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

Я использую 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"]

или же

//*[@showpage="cards"]

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

нет такого элемента: невозможно найти элемент:
{«method»: «xpath», «selector»: «/ * [@ showpage =» cards «]»} (Информация о сеансе:
chrome = 70.0.3538.110) (информация о драйвере: chromedriver = 2.43.600233
(523efee95e3d68b8719b3a1c83051aa63aa6b10d), платформа = Linux
4.15.0-43-generic x86_64) (ПРЕДУПРЕЖДЕНИЕ: сервер не предоставил никакой информации о трассировке стека) Длительность команды или время ожидания: 24 миллисекунды
Для документации об этой ошибке, пожалуйста, посетите:
http://seleniumhq.org/exceptions/no_such_element.html Информация о сборке:
версия: ‘3.4.0’, редакция: ‘неизвестно’, время: ‘неизвестно’ Информация о системе:
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 Возможности
[{mobileEmulationEnabled = false, hasTouchScreen = false, платформа = LINUX,
acceptSslCerts = ложный,
GOOG: chromeOptions = {debuggerAddress = локальный: 43431},
acceptInsecureCerts = false, webStorageEnabled = true, browserName = chrome,
takeScreenshot = true, javascriptEnabled = true, setWindowRect = true,
surpriseAlertBehaviour =, applicationCacheEnabled = false,
вращающийся = false, networkConnectionEnabled = false,
хром = {chromedriverVersion = 2.43.600233
(523efee95e3d68b8719b3a1c83051aa63aa6b10d),
UserDataDir = / TMP / .org.chromium.Chromium.Teyqo7},
takeHeapSnapshot = true, pageLoadStrategy = normal,
databaseEnabled = false, handlesAlerts = true, версия = 70.0.3538.110,
browserConnectionEnabled = false, nativeEvents = true,
locationContextEnabled = true, cssSelectorsEnabled = true}] Идентификатор сеанса:
367080a50b61c75a8c16a17b954a5972
*** Информация об элементе: {Using = xpath, value = / * [@ showpage = «cards»]}

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

1

Решение

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

$driver->wait()->until(
WebDriverExpectedCondition::elementToBeClickable(WebDriverBy::xpath('//a[@showpage="cards"]')))->click();
1

Другие решения

Вызывать 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']
    
1

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

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

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector