我正在使用Ruby和Selenium从页面中获取一些数据。我想用driver.find_element
定义变量,但元素目前在页面上不可见。
next = driver.find_element(:class, 'right')
它返回Selenium::WebDriver::Error::NoSuchElementError
当元素存在时,它可以正常工作。有什么解决办法吗?谢谢!
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