在 Heroku 上使用 webdrivers selenium 获取 ReadTimeout

Ian*_*han 5 rspec heroku capybara selenium-webdriver webdrivers-gem

在 heroku 上使用 selenium webdrivers 时出现以下错误。(rspec->水豚->硒)

Net::ReadTimeout: Net::ReadTimeout with #<TCPSocket:(closed)>
Run Code Online (Sandbox Code Playgroud)

我有heroku-buildpack-google-chrome带有 webdrivers-gem的buildpack。

并在规范设置中有以下块:

chrome_shim = ENV.fetch("GOOGLE_CHROME_SHIM", nil)

Selenium::WebDriver::Chrome.path = chrome_shim

chrome_opts = { "chromeOptions" => { "binary" => chrome_shim } }

Capybara.register_driver :selenium do |app|
    Capybara::Selenium::Driver.new(
      app,
      browser: :chrome,
      desired_capabilities: Selenium::WebDriver::Remote::Capabilities.chrome(chrome_opts)
    )
end

Capybara.javascript_driver = :headless_chrome
Run Code Online (Sandbox Code Playgroud)

Webdrivers.logger.level = :DEBUG输出在这里https://gist.github.com/IanVaughan/3e0c50d2fa4a60e672b96f6726fbbb8c

capybara (3.30.0)
webdrivers (4.2.0)
selenium-webdriver (3.142.7)
Run Code Online (Sandbox Code Playgroud)

完整的堆栈跟踪:https : //gist.github.com/IanVaughan/09b31613833d965ee4f3b7d1e48fd1e2

我正在运行的规范是:

capybara (3.30.0)
webdrivers (4.2.0)
selenium-webdriver (3.142.7)
Run Code Online (Sandbox Code Playgroud)

Tho*_*ole 3

如果超时发生在应用程序第一次请求期间,而应用程序一次性执行某些操作(编译资产等),那么您可能需要增加允许的读取超时

Capybara.register_driver :selenium do |app|
    Capybara::Selenium::Driver.new(
      ...
      timeout: 60 # defaults to 30 IIRC
    )
end
Run Code Online (Sandbox Code Playgroud)