Rspec 和 Chrome/headless 标志

Rspec and Chrome/headless flag

我有 headless Chrome 和 Chrome 正在为我的 Rspec 测试工作。我想要一个标志在两者之间切换,这样我就可以在需要时看到测试发生,在不需要时隐藏它们。我怎样才能实现类似的东西:

rspec --headless

现在我把这个秘密绑定到 .env var:

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

好吧,重写 env var 是可行的。

HEADLESS=true rspec

嗯,我个人是用这段代码来注册驱动的:

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

然后在 .env 中,您可以将变量默认设置为 HEADLESS 或不设置,然后如果您想覆盖它,只需键入 HEADLESS=0 rspec

在您的 rails_helper.rb 中,您应该创建这样的语句:

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

然后在运行规格

时发送一个变量
$ HEADLESS=true rspec ./spec/features