旧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
相关产品推荐
相关产品推荐

