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

旧Rails项目更新后Capybara与ChromeDriver版本匹配失败求助

旧Rails项目Capybara系统测试版本匹配问题

问题背景

2017年的旧Rails项目,曾用Chrome 114.0.5735.90-1版本配合Capybara编写系统测试,后来Chrome自动更新,原旧版本下载链接返回404,原修复方案失效。尝试最新Chrome 125.0.6422.112版本时,出现以下错误:

Failure/Error: Capybara.page.driver.browser.manage.window.maximize
     
     Webdrivers::NetworkError:
       Net::HTTPServerException: 404 "Not Found" with https://chromedriver.storage.googleapis.com/125.0.6422.112/chromedriver_linux64.zip
     # ./spec/rails_helper.rb:66:in `block (2 levels) in <top (required)>'

推测旧项目需要匹配旧版Chrome,但具体适配版本已遗忘,现有配置如下:

现有配置

Rails helper(spec/rails_helper.rb)

Capybara.register_driver :selenium_chrome do |app|
  Capybara::Selenium::Driver.new(app, browser: :chrome, :args => ["--window-size=1920,1080"])
end

Capybara.javascript_driver = :selenium_chrome

#so can still run rails server
Capybara.server_port = 3000
Capybara.app_host = 'http://localhost:3000'
Spec.configure do |config|
  config.include Devise::Test::ControllerHelpers, type: :controller

  # controller spec macros
  config.extend ControllerMacros, :type => :controller

  # Include Factory Girl syntax to simplify calls to factories
  config.include FactoryGirl::Syntax::Methods 
  
  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
  config.fixture_path = "#{::Rails.root}/spec/fixtures"
  config.use_transactional_fixtures = false

  config.infer_spec_type_from_file_location!
  config.include Rails.application.routes.url_helpers
  # Filter lines from Rails gems in backtraces.
  config.filter_rails_from_backtrace!
  # arbitrary gems may also be filtered via:
  # config.filter_gems_from_backtrace("gem name")
  config.include Warden::Test::Helpers, type: :system
  config.after(type: :system) { Warden.test_reset! }
  config.include Capybara::DSL
  config.filter_run_when_matching focus: true
  config.before(:each, js: true) do
    Capybara.page.driver.browser.manage.window.maximize
  end
  #databasecleaner code in spec/support/database_cleaning.rb
end

环境配置(application.rb/environment.rb)

Webdrivers::Chromedriver.required_version = "125.0.6422.112"

Gemfile测试组

group :test do
  gem 'capybara', '~> 3.6.0'
  gem 'factory_girl_rails', '~> 4.7'
  gem 'selenium-webdriver', '~> 3.6.0'
  gem "database_cleaner", "~> 1.5"
  gem 'capybara-email'
  etc
end

解决方案建议

1. 匹配gem兼容的Chrome/Chromedriver版本

你的selenium-webdriver版本是3.6.0,capybara是3.6.0,这两个版本发布于2018年左右,对应的Chrome版本区间为68-75。

操作步骤:

  • 安装该区间内的Chrome稳定版(例如Chrome 74.0.3729.169)
  • 配置Webdrivers::Chromedriver.required_version为对应版本的Chromedriver(Chrome 74对应Chromedriver 74.0.3729.6)
  • 关闭Chrome自动更新:Ubuntu系统中,可修改/etc/default/google-chrome添加CHROMIUM_FLAGS="--disable-background-networking",或移除Chrome自动更新源。

2. 离线安装Chromedriver

如果官方源找不到旧版本Chromedriver:

  • 手动下载对应版本的Chromedriver,放在项目目录或系统PATH中
  • 跳过自动下载逻辑,直接指定本地Chromedriver路径

3. 锁定Chrome版本

Ubuntu系统中,执行以下命令锁定当前Chrome版本,防止自动更新:

apt-mark hold google-chrome-stable

4. 小幅升级适配gem(谨慎操作)

若项目代码兼容性允许,可尝试升级capybara和selenium-webdriver到兼容较新Chrome的版本(例如capybara 3.38.0 + selenium-webdriver 3.142.7),升级后需全面测试旧系统功能是否正常。


内容的提问来源于stack exchange,提问作者daveasdf_2

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 07:45:10