Ruby 按元素类定义变量,即使当前页面上未显示
我正在使用Ruby和Selenium从页面获取一些数据。我想用Ruby 按元素类定义变量,即使当前页面上未显示,ruby,selenium,Ruby,Selenium,我正在使用Ruby和Selenium从页面获取一些数据。我想用驱动程序定义变量。查找元素,但元素当前在页面上不可见 next = driver.find_element(:class, 'right') 它返回Selenium::WebDriver::Error::NoSuchElementError 当元素存在时,它可以正常工作。 有什么解决办法吗? 谢谢大家! Selenium通过执行Javascript命令来工作。通过使用find_元素,它将在DOM上搜索该元素。如果它找不到它,你将得到
驱动程序定义变量。查找元素,但元素当前在页面上不可见
next = driver.find_element(:class, 'right')
它返回Selenium::WebDriver::Error::NoSuchElementError
当元素存在时,它可以正常工作。
有什么解决办法吗?
谢谢大家! Selenium通过执行Javascript命令来工作。通过使用find_元素,它将在DOM上搜索该元素。如果它找不到它,你将得到你得到的错误。毕竟,如果一个元素不在DOM上,它就找不到
真正的问题是,为什么还要查找DOM中当前不存在的元素?你不能用不存在的东西做任何事
我所能想到的是,由于Javascript尚未完全执行,所以在加载DOM之后,元素就会出现。如果是这种情况,您可以使用WebDriver::Wait在一定时间内尝试查找元素
一个小例子:
编辑以包含try-catch示例:
Selenium通过执行Javascript命令来工作。通过使用find_元素,它将在DOM上搜索该元素。如果它找不到它,你将得到你得到的错误。毕竟,如果一个元素不在DOM上,它就找不到
真正的问题是,为什么还要查找DOM中当前不存在的元素?你不能用不存在的东西做任何事
我所能想到的是,由于Javascript尚未完全执行,所以在加载DOM之后,元素就会出现。如果是这种情况,您可以使用WebDriver::Wait在一定时间内尝试查找元素
一个小例子:
编辑以包含try-catch示例:
为什么不试试ImplicitWait
和explicitwait
当我尝试使用if驱动程序时,会遇到同样的问题。查找元素(:class,'right')。显示?你可以放置等待。我是ruby新手,需要一些时间来了解参数的用法:)为什么不试试ImplicitWait
和explicitwait
当我尝试使用if驱动程序时,它也有同样的问题。找到元素(:class,'right')。显示?你可以放置等待。我是ruby新手,需要一些时间来了解参数的用法:)我知道你的意思,但在我的情况下,我有大约50个不同的页面,在当前页面上元素不存在。我的目标是验证,如果该元素存在于该页面上,则执行某些操作,如果不存在,则执行其他操作。我不确定我是否做对了。。。thanks@mihalp好的,如果我理解正确,你想知道页面上是否存在元素。这很容易实现,因为您会遇到异常。您需要做的就是在find_元素()周围放置一个try-catch块,并捕获NoSuchElementError。当它被抛出时,你知道元素不在此页上。明白了!完成了开始和救援。工作完美。谢谢我知道你的意思,但在我的例子中,我有大约50个不同的页面,在当前页面上元素不存在。我的目标是验证,如果该元素存在于该页面上,则执行某些操作,如果不存在,则执行其他操作。我不确定我是否做对了。。。thanks@mihalp好的,如果我理解正确,你想知道页面上是否存在元素。这很容易实现,因为您会遇到异常。您需要做的就是在find_元素()周围放置一个try-catch块,并捕获NoSuchElementError。当它被抛出时,你知道元素不在此页上。明白了!完成了开始和救援。工作完美。谢谢
wait = Selenium::WebDriver::Wait.new(:timeout => 10) # seconds
begin
element = wait.until { driver.find_element(:id => "some-dynamic-element") }
ensure
driver.quit
end
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