我创建了一个为脚本访问的每个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更新应该可以解决问题。
答案 0 :(得分:1)
去年,当你对watir-webdriver中的元素采取行动时,我们大多摆脱了陈旧的元素问题。这是代码:https://github.com/watir/watir-webdriver/blob/master/lib/watir-webdriver/elements/element.rb#L597
当对元素执行操作但是它已过时时,它将使用提供的选择器重新查找它。如果不存在,它将失败。
你是否看到你的元素在你找到它之间但在它变得可见之前变得陈旧?这是一个我打算修复的有趣用例。如果这是您的问题,刷新页面将强制元素过时,因此只会重复您的问题。删除刷新,它应该保持重新定位陈旧元素,直到它存在。
如果问题不存在或者不起作用,请提供您所看到的内容的堆栈跟踪。