Ruby on rails 如何更改Capybara中Cucumber测试的测试默认驱动程序?

Ruby on rails 如何更改Capybara中Cucumber测试的测试默认驱动程序?,ruby-on-rails,cucumber,capybara,Ruby On Rails,Cucumber,Capybara,在提供的文档中,您可以更改特定测试组上的默认\u驱动程序: describe 'some stuff which requires js', :js => true do it 'will use the default js driver' it 'will switch to one specific driver', :driver => :selenium end 如果我想为一个特定的黄瓜测试组做这个呢?如何添加这些参数 When /^I do something$

在提供的文档中,您可以更改特定测试组上的默认\u驱动程序:

describe 'some stuff which requires js', :js => true do
  it 'will use the default js driver'
  it 'will switch to one specific driver', :driver => :selenium
end
如果我想为一个特定的黄瓜测试组做这个呢?如何添加这些参数

When /^I do something$/  do
  fill_in "a_text_box", :with => "stuff"
  fill_in "another_text_box", :with => "another_thing"
end

谢谢

在cucumber中,我通过两个步骤完成了这项工作:

Capybara.current_driver = :webkit # temporarily select different driver
#... tests ...
Capybara.use_default_driver       # switch back to default driver
/features/support/env.rb
中,放置以下行:

Capybara.javascript_driver = :webkit
然后在cucumber特性中,在特定场景之前,在场景之前添加
@javascript
,如下所示:

@javascript
Scenario: Successful sign in - with no flash message if using current firefox
When I'm using a current version of Firefox
When I visit the practitioner home page with "jane.doe@example.com"'s token
Then I should be signed in as practitioner "Jane Doe"
And I should be on the practitioner activities welcome page
And I should not see a flash message warning me I have an unsupported browser
这告诉cucumber在运行特定场景时使用
javascript
驱动程序


这就是我使用Capybara Webkit实现的方法——我相信其他驱动程序也类似。

使用cucumber,您可以使用标记实现这一点。例如,如果您的默认驱动程序是webkit,但您希望使用selenium运行某些场景,则可以使用
@selenium
对其进行标记。默认情况下,这适用于
gem'selenium webdriver'

通常,如果您想切换到其他驱动程序(本例中为无头chrome),请将以下代码放入
功能/support/drivers.rb

# features/support/drivers.rb
Around '@headless_chrome' do |scenario, block|
  begin
    Capybara.current_driver = :headless_chrome # temporarily select headless chrome
    block.call
  ensure
    Capybara.use_default_driver                # switch back to default webkit driver
  end
end

Capybara现在自动切换到与场景中的标记匹配的任何命名驱动程序,而不是
@javascript
的特例。e、 g.如果您创建一个
平板电脑
驱动程序,并用
@tablet
标记您的场景,那么
平板电脑
驱动程序将自动使用!感谢您对答案进行扩展。这是否使测试特定于场景并在之后恢复为默认值?是的。这只是为了那个场景。@JonM这是不是意味着我可以在我的
env.rb
中定义一个
Capybara.jabberwocky\u驱动程序
,然后用
@jabberwocky
标记我的测试?我会把
Capybara.current\u driver=:webkit
放在When组的前面,然后是
Capybara.user\u default\u驱动程序