我正在使用Selenium和本地FireFox浏览器访问live.com的垃圾邮件箱并阅读电子邮件。出于测试目的,我一直在使用“binding.pry”与我的脚本进行交互,并查看问题所在。
当我尝试找到代表收件箱消息的元素时:
driver.find_element(:css,"#messageListContentContainer .ia_hc")
我在60秒后收到此错误:
Timeout::Error: execution expired
from /usr/lib/ruby/1.8/timeout.rb:64:in `rbuf_fill'
但是,因为我在Pry,我可以快速重复相同的命令。大约5或10秒后,它找到元素。
显然,我可以通过在呼叫周围放置before
,rescue
,retry
块来解决问题,但这意味着我必须等待70-80秒才能点击一封电子邮件。有没有人知道为什么find_element需要很长时间才会超时,或者为什么它不会超时?是因为live.com(在网站上称为“Outlook邮件”)有大量的元素可以搜索?是否与他们使用的JavaScript有关?
我已经能够用Firefox和PhantomJS复制这个问题
UPDATE ::我发现任何页面刷新后所有调用都会发生这种情况。我可以调用driver.page_source,我有同样的问题。在页面刷新后的某段时间内,selenium似乎无法与浏览器交互。可能是因为selenium无法读取网页上的所有内容吗?
答案 0 :(得分:1)
我已经看到这种情况发生在我自己的测试中,但是间歇性的,并且永远不会完全重现。似乎发生的事情是Selenium WebDriver刚刚被阻止而且没有响应。
我知道我不得不求助于在我的代码中解救错误,记录和重试。经过几次重试后,Selenium WebDriver似乎再次响应,我可以继续我的测试。
我已联系Ruby WebDriver gem的维护者,他需要一个可重现的测试才能进行一些可靠的调试。如果您能够提供可重现的测试用例,请与我们分享,以便我们可以调查此问题。您可以使用this gist作为与社区分享的起点。
答案 1 :(得分:0)
这个问题神奇地消失了。它不再发生了,我不能复制它。祝硒船员发现它好运,它似乎随机出现。