1

我正在使用 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 Mail”)有大量元素可供搜索吗?他们使用的 JavaScript 有什么问题吗?

我已经能够用 Firefox 和 PhantomJS 复制这个问题

更新:: 我发现在任何页面刷新后所有调用都会发生这种情况。我可以打电话给 driver.page_source 我也有同样的问题。在页面刷新后的一段时间内,似乎 selenium 无法与浏览器交互。难道是硒在阅读网页上的所有内容时遇到了麻烦?

4

2 回答 2

1

我在自己的测试中看到过这种情况,但只是间歇性的,而且永远无法完全重现。似乎发生的事情是 Selenium WebDriver 刚刚被阻止且无响应。

我知道我不得不求助于在我的代码中挽救错误、记录和重试。重试几次后,Selenium WebDriver 似乎再次响应,我可以从那里继续我的测试。

我已经联系了 Ruby WebDriver gem 的维护者,他需要一个可重现的测试才能进行一些可靠的调试。如果您能够提供可重现的测试用例,请与我们分享,以便我们调查此问题。您可以将此要点作为与社区分享的起点。

于 2013-07-15T17:31:58.207 回答
0

这个问题神奇地消失了。它不再发生,我无法复制它。祝找到它的 selenium 工作人员好运,它似乎来来去去都是随机的。

于 2013-07-16T03:56:07.360 回答