2
votes

Drapeau Rspec et Chrome / headless

J'ai Chrome sans tête et Chrome fonctionnant pour mes tests Rspec. Je veux qu'un drapeau permute entre les deux pour que je puisse voir les tests se dérouler quand je veux et les cacher quand je ne le veux pas. Comment puis-je implémenter quelque chose comme:

Capybara.javascript_driver = Rails.application.secrets.headless ? :headless_chrome : :chrome

Pour le moment, j'ai juste ce secret lié à un .env var:

rspec --headless


0 commentaires

3 Réponses :


1
votes

Eh bien, remplacer la variable d'environnement fonctionne donc c'est quelque chose.

HEADLESS=true rspec


1 commentaires

Juste une note pour tous ceux qui trouvent ça maintenant. Cela ne fonctionne apparemment qu'avec Rails> = 5.1, pas avec Rails 5.0.



0
votes

Hmm, j'utilise personnellement ce code pour enregistrer le pilote:

Capybara.register_driver :chrome do |app|
  capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
    chromeOptions: {
      args: [
        ('headless' if ENV.fetch('HEADLESS', '1') == '1')
      ].compact
    }   
  )

  Capybara::Selenium::Driver.new(
    app,
    browser: :chrome,
    desired_capabilities: capabilities
  )
end

puis dans .env vous pouvez définir la variable pour être HEADLESS ou non par défaut, puis si vous voulez l'écraser, tapez simplement HEADLESS = 0 rspec


1 commentaires

Je ne sais pas en quoi c'est différent de ce que j'ai écrit.



1
votes

dans votre rails_helper.rb, vous devez créer une instruction comme celle-ci:

$ HEADLESS=true rspec ./spec/features

puis envoyer une variable lors de l'exécution de specs

RSpec.configure do |config|

  config.before(:each) do
    if  ENV['HEADLESS'] == 'true'
      Capybara.current_driver = :selenium_chrome_headless
    else
      Capybara.current_driver = :selenium_chrome
    end
  end
end


0 commentaires