在运行使用Watir-Webdriver(使用Headless和Firefox)的DelayedJobs队列时,每小时几次从网上获取一些数据,我遇到了随机EOFError
和ECONNREFUSED
错误。< / p>
这是一个相当简单的脚本,可以访问站点,登录,输入表单中的数据并验证返回的数据。但是,错误似乎在脚本中的任何位置随机出现。您可以在下面看到相关示例。我认为同样重要的是要注意一个单独的应用程序在同一台机器上运行,也使用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'
堆栈:
答案 0 :(得分:1)
如果任何一项测试在单独运行时完全可靠,那么我认为你并行运行它们的假设可能是正确的。
我要么一个接一个地连续运行它们,要么试着找到一些其他的方法来更好地分离它们..也许使用像油轮这样的东西并运行linux容器内的测试? (如果你在linux上运行)
答案 1 :(得分:0)
我成功地为每个应用程序提供了自己的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')
# ...
App 2 - 在创建浏览器之前:
# ~/repo2/something.rb
# ...
h = headless(:display => '99')
# ...
但是,@ chuck-van-der-linden可能是正确的,使用VM或类似的是更好的解决方案。如果我从这个架构开始,那将是我的方法。