按元素类定义变量,即使当前页面上未显示



我正在使用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

相关内容

  • 没有找到相关文章

最新更新