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-Binding 、 Capybara 、 実例 を使用して次のことを試しました。ただし、エラーも発生します。
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 Capabilities & Chromeコマンドラインスイッチ の例を使用すると、エラーが発生します。
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
1)別の登録済みドライバーがないことを確認してください。私は自分でこの間違いを犯し、以前の方法でiphone
を使用していたargs
ドライバーを持っていたので、警告。
2)Chromeバージョン57 + Linuxの場合、59 + macOSの場合、または60 + Windowsの場合;
3)宝石を追加/更新しますSelenium-webdriver
;
4)次のdriverを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
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
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
現在のバージョンの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