web-dev-qa-db-ja.com

ヘッドレスの使い方chromeカピバラとセレン

Chromeバージョン:59.0.3071.104

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

features/support/env.rb

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

キュウリのテストを実行すると、次のようになります。

警告Selenium [DEPRECATION]:argsまたは:switchesは非推奨です。代わりにSelenium :: WebDriver :: Chrome :: Options#add_argumentを使用してください。

ヘッドレスクロームでカピバラとセレンを使用する正しい方法は何ですか。ありがとうございました。

編集1: Ruby-BindingCapybara実例 を使用して次のことを試しました。ただし、エラーも発生します。

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)

編集2:最新のものをダウンロード ChromeDriver 2.

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

Net :: ReadTimeout(Net :: ReadTimeout)

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
10

1)別の登録済みドライバーがないことを確認してください。私は自分でこの間違いを犯し、以前の方法でiphoneを使用していたargsドライバーを持っていたので、警告。

2)Chromeバージョン57 + Linuxの場合、59 + macOSの場合、または60 + Windowsの場合;

3)宝石を追加/更新しますSelenium-webdriver;

4)次のdriverspec_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
10
Lucas Caton

2020-02-01を更新

ChromeDriverのサポートは終了しました 2019年3月24日 、作成者は全員に移動することを推奨しました https://github.com/titusfortner/webdrivers とは言っても、以下は私のために働いた構成:

require "test_helper"

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driver = ENV['DRIVER'] ? ENV['DRIVER'].to_sym : :headless_chrome
  driven_by :Selenium, using: driver, screen_size: [1400, 1400]
end

テストを実行するときに、次のようにDRIVER変数を渡すことで、別のドライバーを指定することもできます。

$ DRIVER=firefox bin/Rails test:system
$ DRIVER=headless_firefox bin/Rails test:system
$ DRIVER=chrome bin/Rails test:system
$ DRIVER=headless_chrome bin/Rails test:system

前の回答

ヘッドレスChrome with Railsアプリを実行する最も簡単な方法は、次のgemをGemfileに追加することです

gem 'chromedriver-helper'
gem 'Selenium-webdriver'

そして、application_system_test_case.rbを次のように更新します。

require "test_helper"

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driver = ENV['CHROME_HEADLESS'] == 'false' ? :Selenium_chrome : :Selenium_chrome_headless
  driven_by driver, screen_size: [1400, 1400]
end

ドライバーはすでに使用可能であるため、argsを渡す必要はありません。使用可能なドライバーは、:rack_test:Selenium:Selenium_chrome:Selenium_chrome_headlessです。

Headless Chromeを実行できます

$ bin/Rails test:system

または、Chromeを実行して、テストが実行されていることを確認することもできます

$ CHROME_HEADLESS=false bin/Rails test:system
4
Edgar Ortega

WindowsのサポートはChrome 60で提供されます。

「ChomeCanary」をダウンロードし、インストールパスをchromeOptions.binaryとして指定します

最新の「chromedriver」をダウンロードし、環境変数のパスに追加します。

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

Capybara.register_driver :Selenium_chrome do |app|
  caps = Selenium::WebDriver::Remote::Capabilities.chrome(
    "chromeOptions" => {
      "binary" => "C:/Users/YOURUSERNAME/AppData/Local/Google/Chrome SxS/Application/chrome.exe",
      "args" => [ "--disable-web-security", "--headless", "--disable-gpu" ]
    }
  )
  Capybara::Selenium::Driver.new(
    app, 
    browser: :chrome, 
    desired_capabilities: caps
  )
end

Capybara.default_driver = :Selenium_chrome
2

現在のバージョンのChromeでこれを機能させることはできますが、空白のウィンドウが表示されます。それを取り除きたい場合は、「ChromeCanary」ビルドを使用する必要があります。

以下のコードは、@ lucas-catonと@ shawn-derikの回答を組み合わせたものですが、上記の問題を解決します。

Capybara.register_driver :chrome do |app|
  Capybara::Selenium::Driver.new(
    app,
    browser: :chrome,
    options: Selenium::WebDriver::Chrome::Options.new(
      binary: 'C:/Users/USERNAME/AppData/Local/Google/Chrome SxS/Application/chrome.exe',
      args: %w[no-sandbox headless disable-gpu]
    )
  )
end
0
mrstebo