【发布时间】: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 ago,most 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:4487和127.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 trace和geckodriver --v,但我收到错误geckodriver: error: Address already in use (os error 98),但我在端口上运行lsof -i与 geckodriver (4444) 关联,它只返回 geckodriver。
标签: ruby-on-rails selenium selenium-webdriver cucumber wsl-2