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

Mac M1环境下Capybara Selenium连接ChromeDriver失败求助

解决方案

一、指定兼容M1的ChromeDriver版本

你遇到的问题源于106.0.5249.61版本没有适配M1的安装包,从ChromeDriver 107版本开始,官方提供了专门的mac_arm64版本安装包,你可以通过以下方式指定兼容版本:

方法1:环境变量指定版本

启动测试前设置环境变量:

export WEBDRIVERS_CHROME_VERSION=107.0.5304.62

该版本及后续版本均包含M1对应的安装包。

方法2:代码中直接指定版本

在注册Driver的代码前添加版本指定逻辑:

Webdrivers::Chromedriver.required_version = '107.0.5304.62'

二、修复旧版webdrivers gem的下载路径问题

如果你的webdrivers gem版本较旧,可能会错误生成M1安装包的下载URL(比如用chromedriver_mac64_m1.zip而非官方标准的chromedriver_mac_arm64.zip),可以手动指定下载模板:

Webdrivers::Chromedriver.url = 'https://chromedriver.storage.googleapis.com/%{version}/chromedriver_mac_arm64.zip'

三、直接指定本地ChromeDriver路径

若已手动下载适配M1的ChromeDriver,可直接指定本地路径跳过自动下载流程:

Capybara.register_driver :headless_chrome do |app|
  options = Selenium::WebDriver::Chrome::Options.new
  options.add_argument("--disable-gpu")
  options.add_argument("--headless")
  options.add_argument("--no-sandbox")
  options.add_argument("--window-size=1920,1080")

  driver = Capybara::Selenium::Driver.new(
    app,
    browser: :chrome,
    options: options,
    driver_path: '/usr/local/bin/chromedriver' # 替换为你的本地ChromeDriver实际路径
  )

  # 保留原有的下载行为配置
  bridge = driver.browser.send(:bridge)
  path = "/session/:session_id/chromium/send_command"
  path[":session_id"] = bridge.session_id
  bridge.http.call(:post, path, cmd: "Page.setDownloadBehavior",
                                params: {
                                  behavior: "allow",
                                  downloadPath: "/tmp/downloads",
                                })

  driver
end

注意:你的原代码缺少options = Selenium::WebDriver::Chrome::Options.new初始化语句,需补上否则会触发options未定义错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:25:27