Элемент видим, но не может быть найден веб-драйвером - PullRequest
0 голосов
/ 20 мая 2019

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

Я использую find_element_by_xpath, укажите правильный путь (я пробовал в браузере ион возвращает 1 из 1).

driver = webdriver.Chrome()
driver.get('page_url')
driver.find_element_by_xpath(//button[@class="aoc-end md-button md-ink-ripple"])

Вот HTML:

<div class="_md md-open-menu-container md-whiteframe-z2 md-active md-clickable" id="menu_container_77" style="top: 499px; left: 866px; transform-origin: right top;" aria-hidden="false">
 <md-menu-content class="agent-dropdown-menu-content new-menu-content" width="3" role="menu"><!----><md-menu-item>
    <button class="aoc-end-work md-button md-ink-ripple" type="button" ng-transclude="" ng-disabled="!agent.capabilities.canSupervisorLogout" ng-click="logOutAgent(agent.userHandle)" role="menuitem">

Элемент должен быть найден, но фактическим результатом является то, что selenium.common.exceptions.ElementNotVisibleException: Message: elementне видно

Ответы [ 3 ]

0 голосов
/ 20 мая 2019

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

Надеюсь, это поможет.

0 голосов
/ 20 мая 2019

Поскольку элемент, который вы пытаетесь щелкнуть, является динамическим, вам нужно будет подождать, пока он станет активным, прежде чем щелкнуть по нему. Используйте ожидаемые условия и ожидание WebDriver:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

element = WebDriverWait(driver, 20).until(
EC.element_to_be_clickable((By.XPATH, "//button[@class='aoc-end md-button md-ink-ripple']"))).click()

Также обратите внимание на кавычки " " и ' ' на внешнем и внутреннем селекторе xpath.

0 голосов
/ 20 мая 2019

Найти локаторы в веб-приложении, разработанном на угловом языке, довольно сложно, особенно когда разработчики не следуют ни одному из руководств, полезных с точки зрения автоматизации, таких как добавление уникальных атрибутов для каждого веб-элемента и т. Д. *

В вашем случае кажется, что происходит то же самое.

Следующий локатор должен работать для вас (кстати, вы пропустили "" после и перед локатором в методе driver.find_element_by_xpath()):

driver.find_element_by_xpath("//button[@ng-click='logOutAgent(agent.userHandle)']");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...