You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:

  1. 查看本地Chrome完整版本号(例如115.0.5790.170)
  2. 在测试配置文件(如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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 14:47:45