【问题标题】:Selenium Net::ReadTimeout on tests that pass instantly without @javascript tag - Ruby Cucumber testsSelenium Net::ReadTimeout 在没有 @javascript 标签的情况下立即通过的测试 - Ruby Cucumber 测试
【发布时间】:2021-11-10 02:27:59
【问题描述】:

最终编辑:我放弃了,只是完全重新安装了 WSL2 和所有内容。工作得很好。因此,如果您以某种方式处理同样的问题,硬重置可能是一个可行的选择。

我已经查看了许多以前的 Stack Overflow 帖子,最值得注意的是 this one,其第二个解决方案在该主题的大多数其他帖子中得到了回应,即延长内部超时以分配更多时间让浏览器加载页面花费超过默认的 60 秒。

我正在运行的 Cucumber 测试很小(我用作基线的测试是 4 个场景和 16 个步骤)并且在不使用 Selenium 时几乎立即通过,页面大多是静态的,我只想能够在以后的测试中看到它运行+处理弹出窗口,所以我不需要更多的加载时间。

这些测试在几个月前都运行良好(6 月),但是当我重新打开 同一个 repo,完全未修改时,我现在无法运行任何使用 selenium 进行的测试 - 在运行时甚至不再打开浏览器。因此,我觉得这与我的项目设置无关,因为它都没有改变。即便如此,我已经卸载了 gems 并重新安装了它们,更新了它们,但都无济于事。我不知道在此期间本地系统设置/环境变量可能发生了哪些变化,因为我专门通过 WSL2 处理该应用程序,自上次打开此特定项目以来我还没有接触过它。非常欢迎这方面的任何想法。

我为 Capybara 所做的唯一配置是在我的 env.rb 文件中的测试会话之间将 Capybara.javascript_driver 设置为 :selenium:selenium_headless,其他一切都默认运行。 My firefox and geckodriver versions are compatible.

版本:

  • Ubuntu - 20.04.1 LTS
  • Ruby - 2.5.3
  • 火狐 - 92.0
  • 壁虎司机 - 0.29.1
  • xfce4 - 4.14(运行apt list -a xfce4,因为xfce4-about 给了我一个错误:17:02:48.578: No vendor information found in "/usr/share/xfce4/vendorinfo".

相关(?)宝石:

  • selenium-webdriver (4.0.0.rc1)
  • webdriver (0.18.0)
  • 黄瓜 (7.0.0)
  • 黄瓜导轨 (2.4.0)

如果需要任何类型的更多信息,请告诉我,谢谢。

编辑:相关 Github 存储库:last working version from a few months agomost recent development branch as of this post

编辑 2、4、5:将 geckodriver 日志级别设置为跟踪后的一个 Cucumber 场景的日志:

2021-09-15 17:42:19 DEBUG Selenium Executing Process ["/usr/bin/geckodriver", "--port=4444"]
2021-09-15 17:42:19 DEBUG Selenium polling for socket on ["127.0.0.1", 4444]
1631752939382   geckodriver     INFO    Listening on 127.0.0.1:4444
2021-09-15 17:42:19 WARN Selenium [DEPRECATION] [:browser_options] :options as a parameter for driver initialization is deprecated. Use :capabilities with an Array of value capabilities/options if necessary instead.
2021-09-15 17:42:19 INFO Selenium -> POST session
2021-09-15 17:42:19 INFO Selenium    >>> http://127.0.0.1:4444/session | {"capabilities":{"alwaysMatch":{"browserName":"firefox","moz:firefoxOptions":{"log":{"level":"trace"}}}}}
2021-09-15 17:42:19 DEBUG Selenium      > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=UTF-8", "User-Agent"=>"selenium/4.0.0.rc1 (ruby linux)", "Content-Length"=>"105"}
1631752939650   mozrunner::runner       INFO    Running command: "/usr/bin/firefox" "--marionette" "-no-remote" "-profile" "/tmp/rust_mozprofileqR2HiM"
1631752939651   geckodriver::marionette DEBUG   Waiting 60s to connect to browser on 127.0.0.1:46793
Net::ReadTimeout (Net::ReadTimeout)
/usr/share/rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/net/protocol.rb:181:in `rbuf_fill'
/usr/share/rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/net/protocol.rb:157:in `readuntil'
/usr/share/rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/net/protocol.rb:167:in `readline'
/usr/share/rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/net/http/response.rb:40:in `read_status_line'
/usr/share/rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/net/http/response.rb:29:in `read_new'
/usr/share/rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/net/http.rb:1494:in `block in transport_request'
/usr/share/rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/net/http.rb:1491:in `catch'
/usr/share/rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/net/http.rb:1491:in `transport_request'
/usr/share/rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/net/http.rb:1464:in `request'
/usr/share/rvm/gems/ruby-2.5.3/gems/selenium-webdriver-4.0.0.rc1/lib/selenium/webdriver/remote/http/default.rb:124:in `response_for'
/usr/share/rvm/gems/ruby-2.5.3/gems/selenium-webdriver-4.0.0.rc1/lib/selenium/webdriver/remote/http/default.rb:77:in `request'
/usr/share/rvm/gems/ruby-2.5.3/gems/selenium-webdriver-4.0.0.rc1/lib/selenium/webdriver/remote/http/common.rb:59:in `call'
/usr/share/rvm/gems/ruby-2.5.3/gems/selenium-webdriver-4.0.0.rc1/lib/selenium/webdriver/remote/bridge.rb:589:in `execute'
/usr/share/rvm/gems/ruby-2.5.3/gems/selenium-webdriver-4.0.0.rc1/lib/selenium/webdriver/remote/bridge.rb:52:in `create_session'
/usr/share/rvm/gems/ruby-2.5.3/gems/selenium-webdriver-4.0.0.rc1/lib/selenium/webdriver/common/driver.rb:338:in `create_bridge'
/usr/share/rvm/gems/ruby-2.5.3/gems/selenium-webdriver-4.0.0.rc1/lib/selenium/webdriver/common/driver.rb:73:in `initialize'
/usr/share/rvm/gems/ruby-2.5.3/gems/selenium-webdriver-4.0.0.rc1/lib/selenium/webdriver/common/driver.rb:53:in `new'
/usr/share/rvm/gems/ruby-2.5.3/gems/selenium-webdriver-4.0.0.rc1/lib/selenium/webdriver/common/driver.rb:53:in `for'
/usr/share/rvm/gems/ruby-2.5.3/gems/selenium-webdriver-4.0.0.rc1/lib/selenium/webdriver.rb:87:in `for'
/home/nacho/Github/cs370/features/support/env.rb:18:in `<top (required)>'
/usr/share/rvm/gems/ruby-2.5.3/gems/cucumber-7.0.0/lib/cucumber/glue/registry_and_more.rb:121:in `require'
/usr/share/rvm/gems/ruby-2.5.3/gems/cucumber-7.0.0/lib/cucumber/glue/registry_and_more.rb:121:in `load_code_file'
/usr/share/rvm/gems/ruby-2.5.3/gems/cucumber-7.0.0/lib/cucumber/runtime/support_code.rb:142:in `load_file'
/usr/share/rvm/gems/ruby-2.5.3/gems/cucumber-7.0.0/lib/cucumber/runtime/support_code.rb:81:in `block in load_files!'
/usr/share/rvm/gems/ruby-2.5.3/gems/cucumber-7.0.0/lib/cucumber/runtime/support_code.rb:80:in `each'
/usr/share/rvm/gems/ruby-2.5.3/gems/cucumber-7.0.0/lib/cucumber/runtime/support_code.rb:80:in `load_files!'
/usr/share/rvm/gems/ruby-2.5.3/gems/cucumber-7.0.0/lib/cucumber/runtime.rb:260:in `load_step_definitions'
/usr/share/rvm/gems/ruby-2.5.3/gems/cucumber-7.0.0/lib/cucumber/runtime.rb:72:in `run!'
/usr/share/rvm/gems/ruby-2.5.3/gems/cucumber-7.0.0/lib/cucumber/cli/main.rb:29:in `execute!'
/usr/share/rvm/gems/ruby-2.5.3/gems/cucumber-7.0.0/bin/cucumber:9:in `<top (required)>'
/usr/share/rvm/gems/ruby-2.5.3/bin/cucumber:23:in `load'
/usr/share/rvm/gems/ruby-2.5.3/bin/cucumber:23:in `<main>'
/usr/share/rvm/gems/ruby-2.5.3/bin/ruby_executable_hooks:24:in `eval'
/usr/share/rvm/gems/ruby-2.5.3/bin/ruby_executable_hooks:24:in `<main>'

编辑 3:我一直在仔细研究日志并搜索各种术语/行,但我并没有真正想出太多我知道如何使用的东西。我做过的几件事:

  • 连接到 127.0.0.1:35213 及其变体,因为每次我运行测试时它都会发生变化,并看到我的应用程序的工作版本
  • 尝试连接到它正在监听的各种套接字,例如 127.0.0.1:4487127.0.0.1:4487/session,这在测试之间保持不变,但它要么 a) 不加载,要么 b) 返回带有文本 HTTP method not allowed 的空白页纯 HTML 格式

【问题讨论】:

  • 读取超时几乎总是与网络相关。尝试打开日志记录以查看是否可以获得更多信息:Selenium::WebDriver.logger.level = :debug。 webdriver 是 selenium-webdriver 的替代实现,因此您不需要两者。
  • @titusfortner 感谢您提供信息!将其设置为调试,将日志添加到主帖子
  • 是的,你甚至没有从司机那里得到一个会话。我猜在 mozrunner 线之后发生了一些事情,并且没有得到报告。尝试通过将其添加到功能来打开 geckodriver 日志记录:{"moz:firefoxOptions": {"log": {"level": "trace"}}}
  • 供后代使用 - Selenium Ruby client has helpers to do this Selenium::WebDriver.logger.level = :debug opts = Selenium::WebDriver::Firefox::Options.new(log_level: :trace) driver = Selenium::WebDriver.for :firefox, options: opts 立即将输出添加到主帖!
  • 它看起来没有输出任何跟踪日志,我不确定如何判断它是否正常工作,但它甚至不再运行其余的测试,它只是出错了并退出。我尝试了上面链接中的其他一些选项来设置跟踪日志,即在命令行中运行geckodriver --log tracegeckodriver --v,但我收到错误geckodriver: error: Address already in use (os error 98),但我在端口上运行lsof -i与 geckodriver (4444) 关联,它只返回 geckodriver。

标签: ruby-on-rails selenium selenium-webdriver cucumber wsl-2


【解决方案1】:

不确定 webdriver 0.18.0 gem 是什么?但是,如果您可以提出一个我们可以下拉和分类的 repo,我很乐意提供帮助。

从您的原始帖子中也没有可复制的内容。因此,一旦您有 github 链接,请告诉我们。我敢打赌问题是你的项目/电脑设置

【讨论】:

  • 嗨,卢克,感谢您的回复; here's a link to the repo for the last working version from a few months agohere's a link to my repo+branch with recent changes to the app itself。我做了一个懒惰的选择,不遵循 BDD,所以测试都是由于在最近的分支中失败。不过,测试应该都通过第一个链接。
  • 我还继承了一些随着时间的推移慢慢删除的遗留代码,所以我也不确定webdriver 0.18.0 gem 是什么,但因为在我没有之前一切正常想通过删除一些小的依赖来意外地引起问题。一旦/如果我可以再次进行测试,我会尝试删除它并看看有什么问题,我想?
  • 那颗宝石看起来很可疑。我会非常小心地使用它。仅供参考,这不是 selenium-webdriver,而是由其他人维护的东西,与 selenium 没有任何关系
【解决方案2】:

我放弃了尝试修复任何东西,只是卸载了 Ubuntu 并重新安装了它,再次完成了完整的设置过程,但省略了 xfce4,因为我意识到我不需要它来达到我的目的。新的开始成功了,希望我能在三个小时内完成,而不是四天。我想,生活和学习。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-17
    • 2020-12-24
    • 2014-12-08
    • 2023-01-09
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多