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