Watir-Webdriver EOFError 和 Errno::ECONNREFUSED

Watir-Webdriver EOFError and Errno::ECONNREFUSED

虽然 运行 使用 Watir-Webdriver(带有 Headless 和 Firefox)的 DelayedJobs 队列每小时几次从网络上获取一些数据,但我遇到了随机 EOFErrorECONNREFUSED 错误。

这是一个相当简单的脚本,用于访问站点、登录、在表单中输入数据并验证返回的数据。但是,错误似乎在脚本中的任何一点随机发生。你可以在下面看到这样的例子。我认为还需要注意的是,单独的应用程序是 运行 在同一台机器中,也使用 Headless、Watir-Webdriver 和 Firefox。

由于随机性、备用应用程序以及谷歌搜索导致我 this issue with Selenium and ports 随机导致 EOF 问题,我倾向于认为这是 运行 Selenium 的问题同时驱动 Firefox(通过 Watir)是根本原因。所以我的问题是:


EOFError 示例

例如,EOFError: end of file reached 在尝试 .goto:

时发生在这里
/home/sam/.rvm/gems/ruby-2.0.0-p353/gems/watir-webdriver-0.7.0/lib/watir-webdriver/browser.rb:77:in `goto'

然后 .text

/home/sam/.rvm/gems/ruby-2.0.0-p353/gems/watir-webdriver-0.7.0/lib/watir-webdriver/elements/element.rb:83:in `text'

ECONNREFUSED 示例

在这里,Errno::ECONNREFUSED Connection refused - connect(2) 发生在 .set:

/home/sam/.rvm/gems/ruby-2.0.0-p353/gems/watir-webdriver-0.7.0/lib/watir-webdriver/user_editable.rb:11:in `set'"

然后 .click:

/home/sam/.rvm/gems/ruby-2.0.0-p353/gems/watir-webdriver-0.7.0/lib/watir-webdriver/elements/element.rb:119:in `click'

堆栈:

如果单独 运行 时任一测试都完全可靠,那么我认为您关于 运行 并行测试它们的假设可能是正确的。

我要么 运行 一个接一个地依次 运行 它们,要么尝试找到其他方法更好地将它们分开。 14=] 容器? (如果您 运行 正在 linux 上)

我成功地为每个应用程序提供了自己的 Xvfb 显示:

在服务器本身上:

$ sudo /usr/bin/Xvfb :98 -screen 0 1280x1024x24 -ac &
$ sudo /usr/bin/Xvfb :99 -screen 0 1280x1024x24 -ac &

应用程序 1 - 在创建浏览器之前:

# ~/repo1/whatever.rb
# ...
h = headless(:display => '98')
# ...

应用程序 2 - 在创建浏览器之前:

# ~/repo2/something.rb
# ...
h = headless(:display => '99')
# ...

@chuck-van-der-linden 可能是正确的,不过,使用 VM 或类似工具是更好的解决方案。如果我刚开始使用这种架构,这就是我的方法。