Grails Geb&x2B;Cucumber:在场景之间重新启动浏览器

Grails Geb&x2B;Cucumber:在场景之间重新启动浏览器,grails,cucumber,geb,cucumber-jvm,Grails,Cucumber,Geb,Cucumber Jvm,我将Grails2.1.1与Cucumber和Geb一起使用。我有一个Auth.feature,它包含两个场景。一个用于成功验证,另一个用于测试无效凭据 我认为我必须解决这个问题的方法是让geb在运行第二个场景之前注销第一个场景中的用户。这是因为我的给定步骤检查以确保我在登录页面。在场景1执行后,我将进入仪表板页面 我想我的问题是:(a)在完成场景之前是否使用geb签出有效用户,或者(b)是否有方法在场景之间重新开始 现在,我已经实现了(a),它工作得很好。我只是想知道这是否是最优的 这是我的特

我将Grails2.1.1与Cucumber和Geb一起使用。我有一个Auth.feature,它包含两个场景。一个用于成功验证,另一个用于测试无效凭据

我认为我必须解决这个问题的方法是让geb在运行第二个场景之前注销第一个场景中的用户。这是因为我的给定步骤检查以确保我在登录页面。在场景1执行后,我将进入仪表板页面

我想我的问题是:(a)在完成场景之前是否使用geb签出有效用户,或者(b)是否有方法在场景之间重新开始

现在,我已经实现了(a),它工作得很好。我只是想知道这是否是最优的

这是我的特写

Feature: login to system
  As a user of the system
  I want to log in to the application
  so that I can use it

  Scenario: login
    Given I access the login page
    When I enter valid credentials
    Then I see the dashboard

  Scenario: auth fail
    Given I access the login page
    When I enter invalid credentials
    Then I see appropriate error messages
这是我的Geb步骤

Given(~'^I access the login page$') {->
  to LoginPage
  at LoginPage
}

When(~'^I enter valid credentials$') {
  page.add('user_10001@test.com', '10001')
}

Then(~'^I see the dashboard$') {->
  at DashboardPage
}

Then(~'^I see an error message on the login page$') { ->
  at LoginPage
}

When(~'^I enter invalid credentials$') { ->
  page.add('baduser', 'paddpassword')
}

Then(~'^I see appropriate error messages$') { ->
  at LoginPage
  // check for error message
}

根据我所做的更多研究,似乎有几种方法可以解决这个问题:

  • 就像我已经在做的那样,在场景结束时注销(或者你可以在开始时注销)
  • 让注销成为自己的场景
  • 在钩子之前的env.groovy中,将
    添加到LogoutPage
  • 使用后台文件注销

在env.groovy中的后钩子中添加以下行:

bindingUpdater.browser.clearCookies()

我看不出这里有什么问题。我使用水豚,它会在不同场景之间自动重置会话。我不知道Geb是否也这样做