Watir-Webdriver EOFError 和 Errno::ECONNREFUSED
Watir-Webdriver EOFError and Errno::ECONNREFUSED
虽然 运行 使用 Watir-Webdriver(带有 Headless 和 Firefox)的 DelayedJobs 队列每小时几次从网络上获取一些数据,但我遇到了随机 EOFError
和 ECONNREFUSED
错误。
这是一个相当简单的脚本,用于访问站点、登录、在表单中输入数据并验证返回的数据。但是,错误似乎在脚本中的任何一点随机发生。你可以在下面看到这样的例子。我认为还需要注意的是,单独的应用程序是 运行 在同一台机器中,也使用 Headless、Watir-Webdriver 和 Firefox。
由于随机性、备用应用程序以及谷歌搜索导致我 this issue with Selenium and ports 随机导致 EOF 问题,我倾向于认为这是 运行 Selenium 的问题同时驱动 Firefox(通过 Watir)是根本原因。所以我的问题是:
- 究竟是什么阻止了由 Selenium 驱动的 Firefox 打开两个相互配合良好的实例?我认为端口锁定或某些连接问题可能是罪魁祸首是否正确?
- 如果可能的话,我如何以编程方式避免这些重叠执行导致问题?
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'
堆栈:
- 火狐浏览器 31.5.0
- 无头 1.0.2
- watir-webdriver 0.7.0
- ruby 2.0.0p353
- rvm 1.25.25(稳定)
- CentOS 6.5 版(最终版)
如果单独 运行 时任一测试都完全可靠,那么我认为您关于 运行 并行测试它们的假设可能是正确的。
我要么 运行 一个接一个地依次 运行 它们,要么尝试找到其他方法更好地将它们分开。 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 或类似工具是更好的解决方案。如果我刚开始使用这种架构,这就是我的方法。
虽然 运行 使用 Watir-Webdriver(带有 Headless 和 Firefox)的 DelayedJobs 队列每小时几次从网络上获取一些数据,但我遇到了随机 EOFError
和 ECONNREFUSED
错误。
这是一个相当简单的脚本,用于访问站点、登录、在表单中输入数据并验证返回的数据。但是,错误似乎在脚本中的任何一点随机发生。你可以在下面看到这样的例子。我认为还需要注意的是,单独的应用程序是 运行 在同一台机器中,也使用 Headless、Watir-Webdriver 和 Firefox。
由于随机性、备用应用程序以及谷歌搜索导致我 this issue with Selenium and ports 随机导致 EOF 问题,我倾向于认为这是 运行 Selenium 的问题同时驱动 Firefox(通过 Watir)是根本原因。所以我的问题是:
- 究竟是什么阻止了由 Selenium 驱动的 Firefox 打开两个相互配合良好的实例?我认为端口锁定或某些连接问题可能是罪魁祸首是否正确?
- 如果可能的话,我如何以编程方式避免这些重叠执行导致问题?
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'
堆栈:
- 火狐浏览器 31.5.0
- 无头 1.0.2
- watir-webdriver 0.7.0
- ruby 2.0.0p353
- rvm 1.25.25(稳定)
- CentOS 6.5 版(最终版)
如果单独 运行 时任一测试都完全可靠,那么我认为您关于 运行 并行测试它们的假设可能是正确的。
我要么 运行 一个接一个地依次 运行 它们,要么尝试找到其他方法更好地将它们分开。 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 或类似工具是更好的解决方案。如果我刚开始使用这种架构,这就是我的方法。