Rails 6下Minitest+Capybara批量测试时Chrome异常退出报错求助
问题场景与解决方法
环境
- Rails 6
- Minitest 搭配 Capybara
问题现象
单独运行单个测试(使用:测试用例行号的方式)时全部通过,但批量运行所有测试时,持续触发以下错误:
Error: Capybara::Portal::Desktop::SomeTest#test_submit_form_request: Selenium::WebDriver::Error::UnknownError: unknown error: Chrome failed to start: exited abnormally. (unknown error: DevToolsActivePort file doesn't exist) (The process started from chrome location /usr/local/bin/chromedriver is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
运行过程中Chrome会短暂启动后立即关闭。
解决方法
1. 配置Chrome驱动参数
在测试配置文件(如test/test_helper.rb)中添加Chrome启动参数,解决沙箱和共享内存限制问题:
Capybara.register_driver :chrome do |app| options = Selenium::WebDriver::Chrome::Options.new # 禁用沙箱,避免权限或资源限制导致崩溃 options.add_argument('--no-sandbox') # 禁用/dev/shm使用,解决内存不足问题 options.add_argument('--disable-dev-shm-usage') # 可选:启用无头模式,减少资源占用(不需要可视化测试时推荐) options.add_argument('--headless=new') # 可选:指定窗口大小,避免布局异常 options.add_argument('--window-size=1280,720') Capybara::Selenium::Driver.new(app, browser: :chrome, options: options) end Capybara.default_driver = :chrome Capybara.javascript_driver = :chrome
2. 确保Chrome与Chromedriver版本匹配
Chrome和Chromedriver版本必须严格对应,版本不兼容会导致批量运行时频繁崩溃。可以通过以下命令查看版本:
# 查看Chrome版本 google-chrome --version # 查看Chromedriver版本 chromedriver --version
如果版本不匹配,下载对应版本的Chromedriver替换即可。
3. 强化测试隔离
在测试类中添加清理逻辑,确保每个测试结束后正确重置Capybara会话:
class ActiveSupport::TestCase teardown do # 重置所有会话,释放浏览器资源 Capybara.reset_sessions! # 恢复默认驱动 Capybara.use_default_driver end end
4. 检查系统资源
批量运行测试时内存、CPU占用过高会导致Chrome被系统强制终止。可以:
- 关闭其他占用资源的程序
- 减少并行测试的数量(如果启用了并行测试)
- 增加系统可用内存
内容的提问来源于stack exchange,提问作者Jason FB
相关产品推荐
相关产品推荐

