Selenium:如何让WebDriver忽略“元素不可见”错误?

时间:2011-09-07 21:23:15

标签: selenium selenium-webdriver

我正在使用Selenium WebDriver(v2.5.0)。当我使用driver.click(...)“命令

时,我收到此错误
Element is not currently visible and so may not be interacted with Build info: version: '2.5.0', revision: '13516', time: '2011-08-23 18:30:44' System info: os.name: 'Linux', os.arch: 'amd64', os.version: '2.6.38-10-generic', java.version: '1.6.0_26' Driver info: driver.version: RemoteWebDriver

在鼠标悬停在元素上的浏览器中,单击的元素变为可见。有没有办法检查某些东西是否可见?

2 个答案:

答案 0 :(得分:12)

你可以通过行动来做到这一点。为了实现你想要的,使用Python Webdriver客户端,但原理是一样的。

ActionChains(driver).move_to_element(driver.find_element(By.ID, 'Foo'))\
  .click(driver.find_element(By.Name, "Bar"))\
  .perform()

答案 1 :(得分:4)

您最好的解决方案是不使用click()方法,而是实现Actions并让selenium(通过webdriver)模拟鼠标移动元素以激活事件,然后使元素可单击/启用。激活元素后,根据需要执行click()方法。我假设该元素被禁用,使其首先无法点击。

建立您的元素您也可以使用具有hover()方法的RenderedWebElement,然后您不需要创建以下Actions对象,但它可能无法工作,具体取决于应用程序如何使用本机事件进行设计。试着看看哪个效果最好,最优雅。

WebElement element = driver.findElement(By.id("element_id"));

创建一个由webdriver支持的新actions对象

Actions actions = new Actions(driver);

将光标移动到元素 - 这将“激活”您的元素可点击

actions.moveToElement(element).perform();

验证元素现在是可点击的还是“已启用”

assertThat(element.isEnabled());

现在执行点击操作

element.click();