Watir:启动 chrome 浏览器有时会出现 Net::ReadTimeout 错误

Gun*_*ser 3 ruby watir watir-webdriver

我只是使用 watir 脚本从服务器下载顺序状态信息。在大多数情况下,它工作正常,但有时我会收到 Net::ReadTimeout 错误。我不知道为什么?

\n\n

代码:

\n\n
require "rubygems"\nrequire "watir"\nWatir.default_timeout = 180     # seconds \xe2\x80\x93 default is 60\nprefs = { :download => { :prompt_for_download => false, :default_directory => path } }\nbrowser = Watir::Browser.new :chrome, :switches => %w[--no-sandbox], :prefs => prefs\nbrowser.goto \'https://www...\'\n...\n
Run Code Online (Sandbox Code Playgroud)\n\n

错误信息:

\n\n
/usr/lib/ruby/2.3.0/net/protocol.rb:158:in `rbuf_fill\': Net::ReadTimeout (Net::ReadTimeout)   \n    from /usr/lib/ruby/2.3.0/net/protocol.rb:136:in `readuntil\' \n    from /usr/lib/ruby/2.3.0/net/protocol.rb:146:in `readline\'  \n    from /usr/lib/ruby/2.3.0/net/http/response.rb:40:in `read_status_line\'\n    from /usr/lib/ruby/2.3.0/net/http/response.rb:29:in `read_new\'\n    from /usr/lib/ruby/2.3.0/net/http.rb:1437:in `block in transport_request\'  \n    from /usr/lib/ruby/2.3.0/net/http.rb:1434:in `catch\'\n    from /usr/lib/ruby/2.3.0/net/http.rb:1434:in `transport_request\'from /usr/lib/ruby/2.3.0/net/http.rb:1407:in `request\'\n    from /usr/lib/ruby/2.3.0/net/http.rb:1400:in `block in request\'\n    from /usr/lib/ruby/2.3.0/net/http.rb:853:in `start\' \n    from /usr/lib/ruby/2.3.0/net/http.rb:1398:in `request\'\n    from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/remote/http/default.rb:103:in `response_for\'\n    from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/remote/http/default.rb:57:in `request\' \n    from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/remote/http/common.rb:59:in `call\'   \n    from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/remote/bridge.rb:653:in `raw_execute\'\n    from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/remote/bridge.rb:124:in `create_session\'\n    from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/remote/bridge.rb:88:in `initialize\'  \n    from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/chrome/bridge.rb:41:in `initialize\'  \n    from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/common/driver.rb:61:in `new\'  \n    from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/common/driver.rb:61:in `for\' \n    from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver.rb:82:in `for\'\n    from /var/lib/gems/2.3.0/gems/watir-6.0.2/lib/watir/browser.rb:46:in `initialize\'   \n    from /var/www/jobs/ubuntu.rb:110:in `new\'from /var/www/jobs/ubuntu.rb:5:in `<main>\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

我只是想找个理由?

\n\n

Firefox 上可以自定义设置吗?怎么了?

\n\n
    \n
  • 瓦提尔版本:6.0.2
  • \n
  • 硒版本:3.0.1
  • \n
  • 浏览器 Chrome 版本:57.0.2987.110
  • \n
  • Chrome 驱动程序版本:2.29.461571
  • \n
  • 操作系统版本:Ubuntu 16.04.3 LTS
  • \n
\n

dan*_*own 7

在 Ubuntu Jenkins 构建服务器上运行 Selenium Webdriver 测试时,我遇到了类似的问题,但我从未在 Windows PC 上本地遇到过此问题。就像您的问题一样,这是一个间歇性问题。我花了很多时间研究它,但无法弄清楚它的真相,但我确实把它归结为 Ruby/Ubuntu 问题而不是测试问题,正因为如此,我决定拯救 Net ::ReadTimeout 错误并重试。自从实现以下示例以来,我再也没有遇到过这个问题。

     attempts = 0  # has to be outside the begin/rescue to avoid infinite loop
  begin
  profile = Selenium::WebDriver::Chrome::Profile.new
  $driver = Selenium::WebDriver.for :chrome, :profile => profile,
  $driver.manage.window.resize_to(1280, 720)
  rescue Net::ReadTimeout => e
    if attempts == 0
      attempts += 1
      retry
    else
      raise
    end
  end
Run Code Online (Sandbox Code Playgroud)

您应该能够简单修改上面的示例以使用 Watir。它基本上捕获错误并重试/重新运行测试。