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

如何强制RSpec Rails 7使用selenium-webdriver-3.142.7运行验收测试

解决Rails 7 + Docker环境下RSpec验收测试的selenium-webdriver版本冲突问题

问题根源

从错误栈和依赖关系分析,冲突来自两个核心点:

  1. Rails 7的System Testing要求:actionpack-7.0.2.2的系统测试模块明确要求selenium-webdriver >=4.0.0,而你强制指定了3.142.7版本
  2. 依赖连锁反应:最新版rspec-rails 6.0.1集成了Rails的系统测试逻辑,触发了上述版本检查;同时webdrivers gem的新版本也依赖selenium-webdriver >=4.0.0,进一步加剧冲突

解决方案

方案一:调整Gem依赖版本(推荐)

修改Gemfile,锁定兼容selenium-webdriver 3.x的依赖版本:

group :development, :test do
  gem "debug", platforms: %i[ mri mingw x64_mingw ]
  # 降级rspec-rails到兼容selenium 3的5.x分支
  gem "rspec-rails", "~> 5.1.0"
  gem "factory_bot_rails"
  gem "faker"
end

group :test do
  gem "capybara"
  gem 'selenium-webdriver', '~> 3.142.7'
  # 降级webdrivers到兼容selenium 3的4.x分支
  gem "webdrivers", "~> 4.6.0"
end

方案二:清理Docker缓存并重新安装依赖

由于Docker的bundle卷可能缓存了旧版本依赖,需彻底清理后重新安装:

# 停止服务并删除卷
docker-compose down -v
# 重新构建镜像(忽略缓存)
docker-compose build --no-cache
# 重新安装Gem依赖
docker-compose run web bundle install

方案三:绕过Rails的System Testing驱动检查

如果不想降级依赖,可在RSpec配置中直接指定Capybara驱动,跳过Rails默认的driven_by逻辑:
在spec/rails_helper.rb中添加:

RSpec.configure do |config|
  # 针对system类型测试直接设置Capybara驱动
  config.before(:each, type: :system) do
    Capybara.default_driver = :chrome_headless
    Capybara.javascript_driver = :chrome_headless
  end
end

验证

运行测试前,可在Docker容器内确认依赖版本:

docker-compose run web bundle exec gem list selenium-webdriver

输出应显示selenium-webdriver (3.142.7),无更高版本存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:15:02