Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 按元素类定义变量,即使当前页面上未显示_Ruby_Selenium - Fatal编程技术网

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

Ruby 按元素类定义变量,即使当前页面上未显示,ruby,selenium,Ruby,Selenium,我正在使用Ruby和Selenium从页面获取一些数据。我想用驱动程序定义变量。查找元素,但元素当前在页面上不可见 next = driver.find_element(:class, 'right') 它返回Selenium::WebDriver::Error::NoSuchElementError 当元素存在时,它可以正常工作。 有什么解决办法吗? 谢谢大家! Selenium通过执行Javascript命令来工作。通过使用find_元素,它将在DOM上搜索该元素。如果它找不到它,你将得到

我正在使用Ruby和Selenium从页面获取一些数据。我想用
驱动程序定义变量。查找元素,但元素当前在页面上不可见

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