Rspec+Capybara测试套件升级selenium后出现no sessionId报错
问题背景
原本运行正常的Rspec+Capybara测试套件,未新增测试用例的情况下突然报错:
Failure/Error: visit root_path Webdrivers::VersionError: Unable to find latest point release version for 115.0.5790. You appear to be using a non-production version of Chrome. Please set `Webdrivers::Chromedriver.required_version = <desired driver version>` to a known chromedriver version: https://chromedriver.storage.googleapis.com/index.html
升级selenium-webdriver至4.11.0并移除webdrivers gem后,出现新错误:
Failure/Error: visit root_path Selenium::WebDriver::Error::WebDriverError: no sessionId in returned payload
环境信息
- Rails 7.0.6
- Ruby 3.2.2
当前Chrome无头驱动配置
Capybara.register_driver :chrome_headless do |app| options = Selenium::WebDriver::Chrome::Options.new options.add_argument("--enable-features=NetworkService,NetworkServiceInProcess") options.add_argument("--ignore-certificate-errors") options.add_argument("--proxy-server=#{Billy.proxy.host}:#{Billy.proxy.port}") options.add_argument("--disable-gpu") if Gem.win_platform? options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--window-size=1400,1400") options.add_argument("--headless=new") options.add_preference("intl.accept_languages", "en-US,en") options.add_argument("--lang=en-US") options.add_argument("--time-zone-for-testing=Europe/Paris") Capybara::Selenium::Driver.new( app, browser: :chrome, options:, clear_local_storage: true, clear_session_storage: true ) end Capybara.configure do |config| config.javascript_driver = :chrome_headless end
解决方案
针对第一个Webdrivers::VersionError错误(未升级selenium时可选)
若不想升级selenium-webdriver,可直接指定匹配Chrome版本的chromedriver:
- 查看本地Chrome完整版本号(例如
115.0.5790.170) - 在测试配置文件(如
spec/spec_helper.rb或spec/rails_helper.rb)中添加:
Webdrivers::Chromedriver.required_version = "115.0.5790.170"
针对升级selenium后的no sessionId in returned payload错误
这个错误多由版本不兼容、配置冲突或驱动启动异常导致,尝试以下修复步骤:
1. 确保Chrome与chromedriver版本完全匹配
Selenium 4.11.0兼容Chrome 114-116版本,检查本地Chrome版本,若不在此范围,要么升级/降级Chrome,要么调整selenium版本。
2. 简化Chrome配置,移除冗余冲突参数
--enable-features=NetworkService,NetworkServiceInProcess在Selenium 4+中已默认启用,移除该参数可避免启动冲突,修改后的配置示例:
Capybara.register_driver :chrome_headless do |app| options = Selenium::WebDriver::Chrome::Options.new options.add_argument("--ignore-certificate-errors") options.add_argument("--proxy-server=#{Billy.proxy.host}:#{Billy.proxy.port}") options.add_argument("--disable-gpu") if Gem.win_platform? options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--window-size=1400,1400") options.add_argument("--headless=new") options.add_preference("intl.accept_languages", "en-US,en") options.add_argument("--lang=en-US") options.add_argument("--time-zone-for-testing=Europe/Paris") Capybara::Selenium::Driver.new( app, browser: :chrome, options:, clear_local_storage: true, clear_session_storage: true ) end
3. 检查Billy代理配置
确保Billy代理服务正常启动,且Chrome配置的代理地址正确。可临时注释代理参数,测试是否是代理导致会话创建失败。
4. 更新Capybara版本
确保Capybara与Selenium 4.11.0兼容,建议升级到最新稳定版(如3.39.0+):
在Gemfile中修改:
gem 'capybara', '~> 3.40'
执行bundle update capybara完成升级。
5. 强制指定chromedriver路径(可选)
如果系统未正确识别chromedriver位置,可在配置中添加路径指定:
options.add_option("binary", "/path/to/chromedriver")
内容的提问来源于stack exchange,提问作者Sibylle Courcel
相关产品推荐
相关产品推荐

