2017-06-16 3 views
6

version Chrome: 59.0.3071.104Comment utiliser Chrome sans tête avec capybara et le sélénium

Utiliser concombre, Capybara, Selenium pour mettre en œuvre des 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 dit:

WARN Selenium [DEPRECATION] :args or :switches is deprecated. Use Selenium::WebDriver::Chrome::Options#add_argument instead.

Quelle est la bonne façon d'utiliser capybara et le sélénium avec Headless Chrome. Je vous remercie. EDIT 1: J'ai essayé ce qui suit en utilisant Ruby-Binding, Capybara et Working Example. 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 ChromeDriver 2.30

En utilisant l'exemple de ChromeDriver Capabilities & 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 

Répondre

5

1) Assurez-vous que vous ne disposez pas d'un autre pilote enregistré, je fait cette erreur moi-même et avait un pilote iphone, qui utilisait le args à l'ancienne, c'est pourquoi je recevais l'avertissement.

2) Assurez-vous que vous avez la version Chrome 57+ sur Linux, 59+ sur macOS ou 60+ sous Windows;

3) Ajouter/mettre à jour la gemme selenium-webdriver;

4) Ajouter le pilote 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 
+0

Merci.J'ai réussi à me débarrasser de l'avertissement. – kstratis

1

support de Windows vient dans Chrome 60.

Télécharger "Chome Canary" et donner le chemin d'installation en tant que binary dans chromeOptions.

Téléchargez la dernière "chromedriver" et ajouter à chemin dans les 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 
0

je pourrais obtenir ce travail avec la version actuelle de Chrome, mais il afficherait une fenêtre vide. Si vous voulez 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