在黄瓜中使用相同的浏览器窗口

时间:2012-12-25 05:26:14

标签: cucumber capybara capybara-webkit

在我的功能文件中,我有类似的内容:

Background:
 Given I am on login screen
 Then I log in

Scenario:
 Given I am on a random account summary
 when I try feature-1
 Then I see some output-1

Scenario:
 Given I am on account summary
 When I try feature-2
 Then I see some message

当黄瓜执行第二种情况时,它会重新执行背景。

我的问题是 - 是否可以告诉Cucumber使用上一个场景中的相同浏览器会话/状态? 这将有助于我的测试节省一些执行时间。

3 个答案:

答案 0 :(得分:4)

Capybara会在每个场景之前重置会话,因此您应该在每个场景之前明确登录。但是,由于您没有在每个场景中测试登录,我建议自动执行此过程。

首先,您可以使背景更具说明性:

Background:
 Given I'm logged in

看看this article,它说明为什么最好这样做。

然后你可以:

  1. 在后端生成新会话
  2. 将会话cookie从后端发送到您的测试
  3. 将Cookie设置为Capybara。 Capybara没有交叉驱动程序API,因此您可以使用:
  4. Webdriver

    page.driver.browser.manage.add_cookie(name: 'name', value: 'value')
    

    Capybara-webkit

    page.driver.browser.set_cookie('c_user=asdasdasd; domain=.domain.com')
    

    Poltergeist

    page.driver.set_cookie('name', 'value')
    

    RackTest似乎并不完全支持它。作为一种解决方法,您可以这样做:

    get new_service_request_path, {}, 'HTTP_COOKIE' => 'name=value'
    

答案 1 :(得分:0)

我认为你有许多选项使用Before和After钩子,以及标记。我开始在这里阅读:https://github.com/cucumber/cucumber/wiki/hooks

这样的事情:

Before do
   AccessRandomAccountPage() #Assumes you're logged in already
end

或者,如果这是特定于一组测试,例如你是“AlreadyLoggedIn”测试,你可以使用标记:

Before ('@AlreadyLoggedIn') do
   AccessRandomAccountPage()
end

答案 2 :(得分:-1)

在您的功能文件中,您使用的是后台:,它是针对所有场景执行的,为了避免每次调用(details of Background),请将后台更改为场景:并且足以告诉它黄瓜使用上一个场景中的相同浏览器会话

Scenario:
  Given I am on login screen
  Then I log in

Scenario:
 Given I am on a random account summary
 when I try feature-1
 Then I see some output-1

Scenario:
 Given I am on account summary
 When I try feature-2
 Then I see some message