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

在Heroku上运行Rails7应用无头自动化测试时Selenium报错

解决Heroku上Rails系统测试Chrome启动失败问题

核心问题分析

报错显示Chrome尝试从/app/.cache/selenium/chrome/...启动,而非配置的GOOGLE_CHROME_SHIM路径,且Heroku测试环境为无头环境,缺少必要的Chrome启动参数,导致Chrome无法正常启动。

修复步骤

1. 更新test_helper.rb的Chrome驱动配置

替换原有的驱动注册代码为以下内容,适配Selenium 4+并添加无头环境必需参数:

# 配置Heroku测试环境的Chrome驱动
chrome_bin = ENV.fetch('GOOGLE_CHROME_SHIM', nil)

Capybara.register_driver :chrome do |app|
  options = Selenium::WebDriver::Chrome::Options.new
  options.binary = chrome_bin if chrome_bin

  # 添加Heroku无头环境必需的启动参数
  options.add_argument('--headless=new')
  options.add_argument('--no-sandbox')
  options.add_argument('--disable-dev-shm-usage')
  options.add_argument('--disable-gpu')
  options.add_argument('--window-size=1400,1400')

  Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end

Capybara.javascript_driver = :chrome
  • --headless=new:Selenium 4+推荐的无头模式,兼容性更好
  • --no-sandbox:关闭Chrome沙箱,适配Heroku容器环境
  • --disable-dev-shm-usage:解决容器内/dev/shm空间不足问题
  • --window-size:固定窗口大小,避免测试中布局异常

2. 调整buildpack顺序并指定Chromedriver路径

更新app.json,确保Chrome先于Chromedriver安装,并在测试命令中明确Chromedriver路径:

{
  "buildpacks": [
    { "url": "heroku/ruby" },
    { "url": "heroku/google-chrome" },
    { "url": "heroku/chromedriver" }
  ],
  "environments": {
    "test": {
      "addons": ["heroku-postgresql:in-dyno"],
      "scripts": {
        "test": "CHROMEDRIVER_PATH=/app/.chromedriver/bin/chromedriver bin/rails test:system"
      }
    }
  }
}

3. 验证环境变量

Heroku测试运行时会自动设置GOOGLE_CHROME_SHIM和CHROMEDRIVER_PATH,可在测试日志中确认这两个变量是否正常输出。

验证修复

重新触发Heroku测试运行,若配置正确,Chrome将使用指定的GOOGLE_CHROME_SHIM路径启动,并在无头模式下正常运行系统测试。

内容的提问来源于stack exchange,提问作者Kevin W.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:20:54