按元素类定义变量,甚至不显示在当前页面上

时间:2016-04-23 09:49:53

标签: ruby selenium

我使用Ruby和Selenium从页面获取一些数据。我想用driver.find_element定义变量,但元素当前不在页面上可见。

next = driver.find_element(:class, 'right')

返回Selenium::WebDriver::Error::NoSuchElementError

当元素存在时,它工作正常。 有解决方案吗 谢谢!

1 个答案:

答案 0 :(得分:2)

Selenium通过执行Javascript命令来工作。通过使用find_element,它将搜索DOM上的元素。如果找不到它,您将收到错误。毕竟,如果元素不在DOM上,则无法找到它。

真正的问题是为什么你也想找到一个当前不存在于DOM上的元素?你不能做任何不存在的事情。

我所能想到的是,由于Javascript尚未完全执行,因此在加载DOM之后元素才会出现。如果是这种情况,您可以使用WebDriver :: Wait尝试在一定时间内找到该元素。

一个小例子:

wait = Selenium::WebDriver::Wait.new(:timeout => 10) # seconds
begin
  element = wait.until { driver.find_element(:id => "some-dynamic-element") }
ensure
  driver.quit
end

编辑以包含try-catch示例:

begin
    next = driver.find_element(:class, 'right')
    # Code for when element is found here
rescue NoSuchElementError
    # Code for when element is not found here
end