Ruby无法捕获Selenium :: WebDriver :: Error :: StaleElementReferenceError

时间:2016-01-25 19:09:27

标签: ruby-on-rails ruby selenium watir-webdriver

我创建了一个为脚本访问的每个web元素调用的方法,以避免" StaleElementReferenceError"由硒引发。这就是代码的外观:

     def reach_element(page,element)
       begin
         element.wait_until_present
       rescue Selenium::WebDriver::Error::StaleElementReferenceError
         puts '* retrying to reach element'
         page.refresh
         retry
       end
     end

似乎忽略了StaleElementReferenceError,并且测试仍然因此错误而失败。 我做错了吗?

更正:

这个错误不应该出现,因为它可以被ruby救出。 主要原因是watir-webdriver gem的旧版本。如果您仍然遇到此错误,那么简单的gem更新应该可以解决问题。

1 个答案:

答案 0 :(得分:1)

去年,当你对watir-webdriver中的元素采取行动时,我们大多摆脱了陈旧的元素问题。这是代码:https://github.com/watir/watir-webdriver/blob/master/lib/watir-webdriver/elements/element.rb#L597

当对元素执行操作但是它已过时时,它将使用提供的选择器重新查找它。如果不存在,它将失败。

你是否看到你的元素在你找到它之间但在它变得可见之前变得陈旧?这是一个我打算修复的有趣用例。如果这是您的问题,刷新页面将强制元素过时,因此只会重复您的问题。删除刷新,它应该保持重新定位陈旧元素,直到它存在。

如果问题不存在或者不起作用,请提供您所看到的内容的堆栈跟踪。