Ruby 无头Firefox Watir WebDriver cukes上的读取超时
我今天开始遇到很多这样的错误:Ruby 无头Firefox Watir WebDriver cukes上的读取超时,ruby,linux,jenkins,cucumber,watir-webdriver,Ruby,Linux,Jenkins,Cucumber,Watir Webdriver,我今天开始遇到很多这样的错误: Net::ReadTimeout (Net::ReadTimeout) /usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:158:in `rescue in rbuf_fill' /usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:152:in `rbuf_fill'
Net::ReadTimeout (Net::ReadTimeout)
/usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:158:in `rescue in rbuf_fill'
/usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:152:in `rbuf_fill'
/usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:134:in `readuntil'
/usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:144:in `readline'
/usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http/response.rb:39:in `read_status_line'
/usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http/response.rb:28:in `read_new'
/usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1405:in `block in transport_request'
/usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1402:in `catch'
/usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1402:in `transport_request'
/usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1375:in `request'
/usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1368:in `block in request'
/usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:851:in `start'
/usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1366:in `request'
我在Firefox21上运行headless(通过headless gem)Watir WebDriver cukes,这是Ubuntu服务器。以下是激活的宝石束:
Gems included by the bundle:
* builder (3.2.2)
* bundler (1.3.5)
* childprocess (0.3.9)
* cucumber (1.3.2)
* cwtestgen (0.1.6)
* data_magic (0.14)
* diff-lcs (1.2.4)
* faker (1.1.2)
* ffi (1.8.1)
* gherkin (2.12.0)
* headless (1.0.1)
* i18n (0.6.4)
* multi_json (1.7.5)
* page-object (0.8.10)
* page_navigation (0.9)
* require_all (1.2.1)
* rspec (2.13.0)
* rspec-core (2.13.1)
* rspec-expectations (2.13.0)
* rspec-mocks (2.13.1)
* rubyzip (0.9.9)
* selenium-webdriver (2.33.0)
* syntax (1.0.0)
* thor (0.18.1)
* watir-webdriver (0.6.4)
* watir-webdriver-performance (0.2.2)
* websocket (1.0.7)
* yml_reader (0.2)
我甚至不知道从哪里开始解决这个问题。超时是随机的。当我在OSX上的Firefox21上运行这些测试时,它们不会发生(不是headless)。以前有人经历过吗?非常感谢您提出的任何想法——谢谢 我在别人的机器上看到过这一点,并花了一点时间对其进行诊断 在这种特殊情况下,Ruby版本管理器的问题似乎有些混乱,这意味着一些为旧版本Ruby编译的gem正在被采用 我们吹走了他们的宝石,重新安装了宝石,一切又开始可靠地工作了
这可能不是你的问题,但对其他人来说值得一提。Ruby版本管理是,但它仍然太容易把事情弄得一团糟。我遇到了这个问题。我不知道为什么会这样,但我找到了解决办法。我只是终止watir浏览器,然后重试。问题是watir断开了与浏览器的连接,因此无法终止连接。我认为这是最初问题的一部分。为了终止watir浏览器,我用YAML转储浏览器对象,然后解析结果以找到模拟浏览器的pid。完成后,kill命令被发送到正确的pid。最后重新初始化浏览器和headless
tryLeft = 3
begin
@watir.goto url
rescue => error
tryLeft -= 1
if tryLeft >= 0
sleep 1
retry
end
begin
Timeout::timeout(2) { @watir.close }
rescue
File.open(@tmpDumpFile, 'w') { |file| file << YAML::dump(@watir) }
`awk '/pid:/ {print $2;}' "#{@tmpDumpFile}" | xargs -rt kill 2>&1`
FileUtils.rm_f(@tmpDumpFile)
end
@headless.stop
`killall Xvfb 2>&1`
# Reinitialize @watir / @headless then retry
end
tryLeft=3
开始
@watir.goto网址
rescue=>错误
tryLeft-=1
如果tryLeft>=0
睡眠1
重试
结束
开始
超时::超时(2){@watir.close}
营救
open(@tmpDumpFile,'w'){| File | File&1`
FileUtils.rm_f(@tmpDumpFile)
结束
@无头停车
`killall Xvfb 2>&1`
#重新初始化@watir/@headless,然后重试
结束
我从未找出这个问题的原因,但最终它消失了。我已经有好几天没有看到这个错误了。下次我看到它时,我将与我们的系统管理员一起尝试解决它,如果我们找到问题的根源,我将更新这个线程。嘿,你找到原因了吗?我遇到了同样的问题。Ive以前有过这个问题。我的问题是超时问题。我与我的ISP的连接出现问题。在我的ISP修复后,他们消失了。我猜线路上有静电。下次出现这种情况时,尝试使用phantomjs,看看两者之间是否有更好的区别。我也看到过它们……有时,几天甚至几天都没有错误几周后,突然:ReadTimeout:(我最终拯救了这个例外:-/