2016-01-25 50 views
0

我已经为脚本访问的每个Web元素创建了一个方法,以避免由Selenium抛出的“StaleElementReferenceError”。这是怎样的代码看起来:Ruby无法捕捉Selenium :: WebDriver :: Error :: 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被忽略,并且测试跟上这个错误而失败。 我做错了什么?

更正:

这个错误不应该出现在所有为它由红宝石被救出。 主要原因是watir-webdriver gem的旧版本。如果你仍然遇到这个错误,一个简单的宝石更新应该做的伎俩。

回答

1

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

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

您是否看到您的元素在您找到它之间,但在它变得可见之前就已经陈旧了?这是我计划修复的一个有趣的用例。如果这是你的问题,刷新页面将迫使元素过时,这样就会重复你的问题。删除刷新,它应该继续重新定位陈旧的元素,直到它存在。

如果这不是问题或不起作用,请提供您所看到的堆栈跟踪。

+0

好吧,刷新页面行从来没有达到,所以这是涵盖。另外,我刚刚看到我的watir-webdriver gem有点老了。我会更新它并重新运行脚本。我会回来更多更新。 –

+0

好吧,我误解了,我不明白什么是你的测试失败。 :)如果它继续失败,请发布堆栈跟踪。 – titusfortner

+0

你好。是的,我提出了除了你解决方案之外的其他问题。我看到一个问题是代码无法捕捉到这个硒错误。然后我意识到,在您评论之后,StaleElementReference错误可能是watir-webdriver gem旧版本的原因 - 我拥有0.8.0的一个:)。所以你确实帮了我。谢啦 :) –

相关问题