Version Chrome: 59.0.3071.104
Utilisation de Concombre, Capybara, Selenium pour implémenter les tests d’automatisation avec Headless 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
Lors de l'exécution d'un test de concombre, il est indiqué:
WARN Selenium [DEPRECATION]: args ou: les commutateurs sont obsolètes. Utilisez plutôt Selenium :: WebDriver :: Chrome :: Options # add_argument.
Quelle est la bonne façon d'utiliser capybara et sélénium avec Headless Chrome? Je vous remercie.
EDIT 1: J'ai essayé ce qui suit en utilisant Ruby-Binding , Capybara et Exemple de travail . Mais cela donne aussi des erreurs.
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
Erreur:
> undefined method `each' for
> #<Selenium::WebDriver::Remote::Capabilities:0xd13baac> (NoMethodError)
Edit 2: Téléchargez la dernière version de ChromeDriver 2.30
En utilisant l'exemple de Capacités ChromeDriver & Commutateurs de ligne de commande Chrome Je reçois une erreur.
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) Assurez-vous de ne pas avoir un autre pilote enregistré, j'ai commis cette erreur moi-même et j'avais un pilote iphone
, qui utilisait l'ancienne args
, c'est pourquoi j'ai reçu l'avertissement.
2) Assurez-vous que vous avez la version de Chrome 57+ sous Linux, 59+ sous MacOS ou 60+ sous Windows;
3) Ajouter/mettre à jour le joyau Selenium-webdriver
;
4) Ajoutez le driver suivant à votre spec_helper.rb
ou 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
La manière la plus simple d’exécuter des applications Chrome sans tête avec Rails consiste à ajouter les gemmes suivantes à la Gemfile
gem 'chromedriver-helper'
gem 'Selenium-webdriver'
Et mettez à jour votre application_system_test_case.rb
avec ce qui suit:
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
Il n'est pas nécessaire de transmettre args
car les pilotes sont déjà disponibles, les pilotes disponibles sont :rack_test
, :Selenium
, :Selenium_chrome
, :Selenium_chrome_headless
.
Vous pouvez exécuter Headless Chrome
$ bin/Rails test:system
Ou vous pouvez également exécuter Chrome
et voir le test en cours d'exécution dessus
$ CHROME_HEADLESS=false bin/Rails test:system
Le support Windows arrive dans Chrome 60.
Téléchargez "Chome Canary" et donnez le chemin d'installation sous la forme d'une binary
dans chromeOptions.
Téléchargez le dernier "chromedriver" et ajoutez-le au chemin dans Variables d'environnement.
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
Je pourrais le faire fonctionner avec la version actuelle de Chrome, mais cela afficherait une fenêtre vide. Si vous souhaitez vous en débarrasser, vous devez utiliser la version "Chrome Canary".
Le code ci-dessous est une combinaison des réponses que @ lucas-caton et @ shawn-derik, mais résout le problème que j'ai mentionné ci-dessus.
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