Capybara と Selenium でヘッドレス Chrome を使用する方法

概要

Chrome バージョン: 59.0.3071.104

私はCucumber、Capybara、Seleniumを使用してヘッドレスChromeで自動テストを実装しています。

require 'rubygems'
require 'capybara/cucumber'

Capybara.register_driver :selenium_chrome do |app|
  Capybara::Selenium::Driver.new(app, :browser => :chrome, args: ['headless'])
end

Capybara.default_driver = :selenium_chrome

キュウリのテストを実行すると、次のように表示されます。

Headless Chrome でカピバラとセレンを使用する正しい方法は何ですか。ありがとう。

Ruby-Binding、Capybara、 Working Example を使って以下のことを試してみました。しかし、エラーも発生します。

require 'rubygems'
require 'capybara/cucumber'
require 'selenium-webdriver'

Capybara.register_driver :selenium_chrome do |app|
  options = Selenium::WebDriver::Chrome::Options.new
  options.add_argument('--headless')
  driver = Selenium::WebDriver.for :chrome, options: options
  Capybara::Selenium::Driver.new(
    app,
    browser: :chrome,
    desired_capabilities: driver
  )
end

Capybara.default_driver = :selenium_chrome

エラー:

> undefined method `each' for
> #<Selenium::WebDriver::Remote::Capabilities:0xd13baac> (NoMethodError)

最新の ChromeDriver 2.30 をダウンロードしました。

ChromeDriver の機能と Chrome コマンド ライン スイッチの例を使用すると、エラーが発生します。

require 'rubygems'
require 'capybara/cucumber'
require 'selenium-webdriver'

Capybara.register_driver :selenium_chrome do |app|
  caps = Selenium::WebDriver::Remote::Capabilities.chrome(
    "chromeOptions" => {
      "binary" => "/chromedriver_win32/chromedriver.exe",
      "args" => [ "--disable-web-security", "--headless" ]
    }
  )
  Capybara::Selenium::Driver.new(
    app,
    browser: :chrome,
    desired_capabilities: caps
  )
end

Capybara.default_driver = :selenium_chrome

解決策

  1. 別の登録ドライバーがないことを確認してください。私自身もこの間違いを犯し、古い方法で args を使用していた iPhone ドライバーを使用していたため、警告が表示されました。

  2. Linux では Chrome バージョン 57 以降、macOS では 59 以降、Windows では 60 以降であることを確認してください。

  3. gem selenium-webdriver を追加/更新します。

  4. 次のドライバーを spec_helper.rb または Rails_helper.rb に追加します。

Capybara.register_driver :chrome do |app|
  Capybara::Selenium::Driver.new app, browser: :chrome,
    options: Selenium::WebDriver::Chrome::Options.new(args: %w[headless disable-gpu])
end

Capybara.javascript_driver = :chrome