Как найти элемент через селен - PullRequest
0 голосов
/ 22 декабря 2018

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

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

нет такого элемента: Невозможноэлемент locate: {"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', редакция: 'неизвестно', время: 'неизвестно' Системная информация: хост: '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 = false, goog: chromeOptions = {debuggerAddress = localhost: 43431}, acceptInsecureCerts = false, webStorageEnabled = true, browserName = chrome, getsScreenshot = true, javascriptEnabled = true, setWindowRect = true, непредвиденный= / tmp / .org.chromium.Chromium.Teyqo7}, takeHeapSnapshot = true, pageLoadStrategy = normal, databaseEnabled = false, handlesAlerts = true, версия = 70.0.3538.110, browserConnectionEnabled = false, nativeEvents = true, locationContextEnSDtrue}] ID сеанса: 367080a50b61c75a8c16a17b954a5972 *** Информация об элементе: {Using = xpath, value = / * [@ showpage = "cards"]}

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

Ответы [ 3 ]

0 голосов
/ 22 декабря 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']
    
0 голосов
/ 23 декабря 2018

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

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

0 голосов
/ 22 декабря 2018

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

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