【问题标题】:Net::ReadTimeout on headless Firefox Watir-WebDriver cukes无头 Firefox Watir-WebDriver 杯上的 Net::ReadTimeout
【发布时间】:2013-05-30 03:51:35
【问题描述】:

我今天开始遇到 吨 的这些错误:

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'

我在 Firefox 21、Ubuntu 服务器上运行无头(通过无头 gem)Watir-WebDriver cukes。这是激活的宝石包:

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 上运行这些测试时,它们不会发生。有谁之前经历过这个吗?任何和所有想法非常感谢 - 谢谢!

【问题讨论】:

  • 我从来没有弄清楚这个问题的原因,但最终它消失了。我已经好几天没有看到这个错误了。下次我看到它时,我会和我们的系统管理员一起努力解决它,如果我们找到问题的根源,我会更新这个帖子。
  • 嘿,你找到原因了吗?我遇到了同样的问题。
  • 我以前也遇到过这个问题。对于我的问题,这是一个超时问题。我的 ISP 出现连接问题。在我的 ISP 修复后,他们离开了。我猜线路上有静电。
  • 下次出现的时候尝试使用phantomjs,看看两者之间是否有区别。
  • 我也见过他们......有时,几天甚至几周都没有错误,突然间:ReadTimeout :(我最终拯救了异常:-/

标签: ruby linux jenkins cucumber watir-webdriver


【解决方案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

【讨论】:

    【解决方案2】:

    我在别人的机器上看到过这个,花了点时间诊断一下。

    在那种特殊情况下,问题似乎是 Ruby 版本管理器出现了一些混乱,这意味着一些为旧版本 Ruby 编译的 gem 正在被拾取。

    我们吹掉了他们的 gemset,重新安装了 gem,一切又开始可靠地工作了。

    这可能不是您的问题,但对其他人来说值得注意。 Ruby 版本管理是getting easier nowadays,但还是太容易把事情搞得一团糟。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-12
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多