我今天开始遇到吨这些错误:
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'
我正在运行无头(通过无头宝石)Watir-WebDriver在Firefox 21,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)
我甚至不知道从哪里开始解决这个问题。超时是随机的。当我在OS X(不是无头)上的Firefox 21上运行这些测试时,它们不会发生。有谁之前经历过这个吗?任何和所有想法很多赞赏 - 谢谢!
答案 0 :(得分:1)
我遇到了这个问题。我不知道为什么会这样,但我找到了解决方案。我只是终止watir浏览器并且无头,然后我重试。问题是watir失去了与浏览器的连接,因此无法终止。我认为这是最初问题的一部分。要终止watir浏览器,我使用YAML转储浏览器对象,然后解析结果以找到模拟浏览器的pid。完成后,kill命令将发送到正确的pid。最后,浏览器和无头重新初始化。
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
答案 1 :(得分:0)
我在别人的机器上看过这个,花了一点时间来诊断它。
在这种特殊情况下,问题似乎与Ruby版本管理器有些混淆,这意味着为旧版Ruby编译的一些宝石正在被选中。
我们吹走了他们的宝石,重新安装了宝石,这一切都开始可靠地再次运作了。
这可能不是你的问题,但值得注意的是其他人。 Ruby版本管理是getting easier nowadays,但它仍然太容易让事情陷入混乱。