每个方案使用Capybara更改默认驱动程序

时间:2016-03-16 09:36:58

标签: ruby cucumber capybara

当我在功能文件中的方案上方设置标记@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

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:1)

Capybara已经提供了这种行为here。要使用它,您只需要它并使用您要使用的标记名称注册驱动程序。这通常在你的env.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应该为你需要的每个驱动程序配置调用一次,然后稍后通过名称引用。