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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:17:25