让 Headless Chrome 与 Capybara 一起工作

Getting Headless Chrome to work with Capybara

我有点卡住了,我正在关注 Thoughtbots 教程以及所有内容 "looks" 正确:https://robots.thoughtbot.com/headless-feature-specs-with-chrome

我的 rails_helper 文件(相关部分)如下所示:

Capybara.register_driver :chrome do |app|
  Capybara::Selenium::Driver.new(app, browser: :chrome)
end

Capybara.register_driver :headless_chrome do |app|
  capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
    'chromeOptions:' => { args: %w(headless disable-gpu) }
  )

  Capybara::Selenium::Driver.new app,
    browser: :chrome,
    desired_capabilities: capabilities
end

Capybara.javascript_driver = :headless_chrome

使用 chromedriver-helper gem 确实允许我使用 chrome 就好了,但它不会保持无头状态。此外,当我检查它时,我会在 chrome 上确认自动化测试使用没有 --headless 标志出现。

现在使用 brew install chromedriver 给我的是:

Selenium::WebDriver::Error::WebDriverError:
       unable to connect to chromedriver 127.0.0.1:9515

所以好像有些不对劲....它似乎不知道如何连接 brew chrome驱动程序版本..但是大多数教程似乎没有说任何关于使用 brew 链接任何东西的内容版本。

有什么想法吗? (我 运行 在 Rails 4.1 顺便说一句)

由于您正在使用 brew 安装 chromedriver,因此您需要完全删除 chromedriver-helper 及其安装的所有二进制文件和存根文件。这是因为 bundler 将已安装的 binaries/stubs 添加到 brew 安装的 chromedriver 版本之前的路径中,因此隐藏了它。您可以使用

bundle exec which chromedriver

找出您 运行 测试时实际使用的 chromedriver。如果它不是 brew(通常是 /usr/local/bin/chromedriver)安装的那个,那么继续删除它们直到它被安装。