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

