Как найти элемент через селен

Я использую Selenium с PHP WebDriver. Я пытаюсь щелкнуть ссылку на панели навигации, которая отображается в HTML следующим образом:

<li class=""><a href="javascript:;" showpage="cards"><i class="zzdi zzdi-closed-caption zzdi-hx-fw"></i> User Cards</a></li>

Я пытаюсь выбрать элемент и щелкнуть по нему. Однако, когда я пытаюсь использовать xpath следующим образом:

//a[@showpage="cards"]

or

//*[@showpage="cards"]

Я получаю следующую ошибку:

нет такого элемента: невозможно найти элемент: {"method": "xpath", "selector": "/ * [@ showpage =" cards "]"} (Информация о сеансе: chrome = 70.0.3538.110) (Информация о драйвере: chromedriver = 2.43.600233 (523efee95e3d68b8719b3a1c83051aa63aa6b10d), platform = Linux 4.15.0-43-generic x86_64) (ВНИМАНИЕ: сервер не предоставил никакой информации о трассировке стека) Длительность команды или тайм-аут: 24 миллисекунды Для получения документации по этой ошибке посетите: http://seleniumhq.org/exceptions/no_such_element.html Информация о сборке: версия: '3.4.0 ', редакция:' unknown ', время:' unknown 'Информация о системе: host:' ubuntu ', ip:' 127.0.1.1 ', os.name:' Linux ', os.arch:' amd64 ', os.version: '4.15.0-43-generic', java.version: '1.8.0_191' Информация о драйвере: org.openqa.selenium.chrome.ChromeDriver Capabilities [{mobileEmulationEnabled = false, hasTouchScreen = false, platform = LINUX, acceptSslCerts = false, goog: chromeOptions = {debuggerAddress = localh ost: 43431}, acceptInsecureCerts = false, webStorageEnabled = true, browserName = chrome, playsScreenshot = true, javascriptEnabled = true, setWindowRect = true, неожиданныйAlertBehaviour =, applicationCacheEnabled = false, rotatable = false, networkConnection = false, networkConnectionEriable = false, networkConnection = false, .600233 (523efee95e3d68b8719b3a1c83051aa63aa6b10d), userDataDir = / tmp / .org.chromium.Chromium.Teyqo7}, takeHeapSnapshot = true, pageLoadStrategy = normal, databaseEnlesabled10 = false, browserEnabled10 = false. , locationContextEnabled = true, cssSelectorsEnabled = true}] Идентификатор сеанса: 367080a50b61c75a8c16a17b954a5972 *** Информация об элементе: {Using = xpath, value = / * [@ showpage = "cards"]}

Любая помощь о том, как использовать xpath или как использовать любой другой метод выбора, который позволил бы мне щелкнуть ссылку, была бы оценена.


person Idan    schedule 22.12.2018    source источник


Ответы (3)


Возможно, вам придется подождать, пока элемент сможет щелкнуть по нему:

$driver->wait()->until(
  WebDriverExpectedCondition::elementToBeClickable(WebDriverBy::xpath('//a[@showpage="cards"]')))->click();
person Andersson    schedule 22.12.2018
comment
Эта ошибка возникает как исключение при попытке выполнить драйвер- ›findElement. Сценарий даже не доходит до части wait () ... - person Idan; 22.12.2018
comment
Спасибо, но я боюсь, что это не сработало. Я получаю фатальную ошибку PHP: Uncaught Facebook \ WebDriver \ Exception \ TimeOutException в /var/www/html/wioc/sdk/ext/vendor/facebook/webdriver/lib/WebDriverWait.php:84 после команды. Когда я использую getPageSource, я четко вижу эту ссылку в HTML. - person Idan; 22.12.2018
comment
@Idan, можешь проверить, находится ли ссылка внутри <iframe> - person Andersson; 22.12.2018
comment
На странице нет фреймов, и ссылка видна, когда я открываю сайт вручную. Спасибо! - person Idan; 23.12.2018

Чтобы вызвать click() в элементе с текстом как Карты пользователя, поскольку этот элемент представляет собой JavaScript включен элемент, вам необходимо вызвать WebDriverWait, чтобы элемент стал интерактивным, и вы можете использовать любое из следующих решений:

  • Использование LINK_TEXT:

    User Cards
    
  • Использование CSS_SELECTOR:

    a[showpage='cards']>i.zzdi.zzdi-closed-caption.zzdi-hx-fw
    
  • Использование XPATH:

    //a[@showpage='cards' and normalize-space()='User Cards']
    
person DebanjanB    schedule 22.12.2018

По-видимому, из-за различий в размере окон (моя машина и виртуальный экран, используемый Selenium), панель навигации не отображалась, и поэтому элемент не мог быть найден.

Обнаружил это, когда делал обходной путь - получал все элементы с тегом «a», а затем просматривал их. Элемент можно было найти только после нажатия дополнительной кнопки, чтобы отобразить панель навигации.

person Idan    schedule 23.12.2018