根据场景使用 Capybara 更改默认驱动程序

Changing default drivers using Capybara per scenario

我写了一个小块,当我在功能文件中的场景上方设置标签 @chrome 时,它将启动 Google Chrome。

Before ('@chrome') do

Capybara.default_driver = :selenium
      Capybara.register_driver :selenium do |app|
      Capybara::Selenium::Driver.new(app,
        :browser => :chrome,
        desired_capabilities: {
        'chromeOptions' => {
          'args' => %w{ window-size=1920,1080 }
        }
      }
    )
      end
  end

我遇到的问题是功能文件中的所有后续场景也会在 Chrome 中 运行,即使没有为它们设置标签。

有没有办法添加它,让我在完成后返回到 Poltergeist。我尝试了以下方法,但没有用:

  After do |scenario|


 if @chrome == true
    Capybara.register_driver = :poltergeist
          Capybara::Poltergeist::Driver.new(
              app,
              phantomjs_options: ['--ignore-ssl-errors=yes', '--ssl-protocol=TLSv1'],
              window_size: [1280, 1024],
              js_errors: false,
              debug: false
          )
    end
  end

提前感谢您可能获得的任何帮助

Capybara 已经提供了这种行为 here。要使用它,您只需要要求它并使用您要使用的标签名称注册一个驱动程序。这通常在您的环境中。rb/custom_env.rb

require 'capybara/cucumber'

Capybara.register_driver :chrome do |app|
  Capybara::Selenium::Driver.new(app,
    browser: :chrome,
    ...
  )
end

重要的是您用来注册驱动程序的名称必须与使用的标签匹配(在本例中为@chrome)。它还表明您不应该在逐个测试的基础上更改 Capybara.default_driver,这就是 Capybara.current_driver 的用途。您也不应该在每种情况下都注册一个新驱动程序,register_driver 意味着为您需要的每个驱动程序配置调用一次,然后稍后按名称引用。