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

在cucumber中使用相同的浏览器窗口,cucumber,capybara,capybara-webkit,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 som

在我的功能文件中,我有如下内容:

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
Before do
   AccessRandomAccountPage() #Assumes you're logged in already
end
当cucumber执行第二个场景时,它会重新执行后台

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

Capybara在每个场景之前重置会话,因此您应该在每个场景之前显式登录。但由于您并不是在每个场景中都测试登录,所以我建议您将此过程自动化

首先,您可以使您的背景更加去极化:

Background:
 Given I'm logged in
看,这说明了为什么这样做更好

然后你可以:

  • 在后端生成新会话
  • 将会话cookie从后端发送到测试
  • 将cookie设置为水豚。Capybara没有跨驱动程序API,因此您可以使用:
  • :

    :

    :

    似乎并不完全支持它。作为解决方法,您可以执行以下操作:

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

    在您的功能文件中,您使用的是后台:,它针对所有场景执行,为了避免每次调用(),请将后台:更改为场景:并告诉Cucumber使用与前一场景相同的浏览器会话即可

    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
    

    我认为你有很多选择使用前后挂钩,以及标签。我从这里开始读:

    大概是这样的:

    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
    
    Before do
       AccessRandomAccountPage() #Assumes you're logged in already
    end
    
    或者,如果这是特定于一组测试的,如“AlreadyLoggedIn”测试,则可以使用标记:

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

    是否确实要让测试共享状态?您是否知道可能会导致其中一个问题的任何次要(可能没有失败)问题破坏所有其他问题的结果?一般来说,你所要求的是一件非常糟糕的事情。你的观点是正确的,在任何正常情况下,我都会尽量避免这些。但我的问题是,要测试任何功能,我需要登录并访问一个随机帐户摘要页面。所以,我想知道我是否可以只做一次,至少避免登录过程。谢谢你的回复。如果我遇到任何问题,我会尝试并再次发表评论。水豚会在每个场景之前重置会话,所以这种方式不起作用
    Before ('@AlreadyLoggedIn') do
       AccessRandomAccountPage()
    end