web-dev-qa-db-fra.com

Comment utiliser le chrome sans tête avec capybara et sélénium

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
8
shawn derik

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
7
Lucas Caton

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
3
Edgar Ortega

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
1
shawn derik

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
0
mrstebo