元素可见,但无法通过webdriver找到

时间:2019-05-20 08:12:59

标签: python selenium selenium-webdriver pytest

我正在使用selenium和python进行自动化测试,尝试单击Web中的元素时遇到问题。

我正在使用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:消息:元素不可见

3 个答案:

答案 0 :(得分:0)

在用角度开发的Web应用程序中查找定位器非常棘手,尤其是当开发人员没有遵循从自动化角度来看有用的任何准则时,例如为每个Web元素等添加唯一属性等等。

就您而言,似乎正在发生同一件事。

以下定位符应该为您工作(顺便说一句,您在driver.find_element_by_xpath()方法中定位符前后缺少“”):

driver.find_element_by_xpath("//button[@ng-click='logOutAgent(agent.userHandle)']");

答案 1 :(得分:0)

从异常来看,该元素似乎在页面中存在,但当前不可见。 元素不可见的可能原因可能是(元素被另一个元素掩盖,元素可以在下拉列表中等)。如果元素在下拉列表中,则首先打开列表,然后找到该元素。

希望这会有所帮助。

答案 2 :(得分:0)

由于您要单击的元素是动态元素,因此需要先等待它变为可点击状态,然后才能单击它。使用预期条件并等待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选择器上的" "' '引号。