对我的小黄瓜感到困惑 - 网页之间的导航

时间:2011-01-24 09:48:54

标签: bdd specflow gherkin

我刚开始在一个Web项目中使用BDD,使用SpecFlow和WatiN通过浏览器自动化,我不太确定如何编写我的步骤。

我正试图从测试开始,以TDD方式驱动所有内容,除非需要进行测试,否则不要写任何内容。 (我也在进行单元测试以推动细节,但这个问题与此无关)。我感到困惑的一件事是页面之间的导航,以及是否/如何在规范中定义。

第一项测试涉及输入一些细节并确保它们显示在列表中。我的第一次尝试是这样的:

  

场景:添加详细信息选项1

     

鉴于我在“主页”页面上   当我点击“添加详细信息”时   我在名称字段中输入“John Smith”   然后点击“保存”
  然后“John Smith”出现在列表中

然而,这涉及在几页之间导航,所以我不知道这是否需要明确 - 否则,我只需要假设我在正确的页面上,或者显然与其无关的步骤我正在访问的页面(例如,'当我单击添加详细信息'时)有断言来检查我所在的页面。

我们是否在方案中使用明确的步骤检查页面?

  

场景:添加详细信息选项2

     

鉴于我在“主页”页面上   当我点击“添加详细信息”时   我正在“添加详细信息”页面
  我在名称字段中输入“John Smith”   然后点击“保存”
  我在“主页”页面
  然后“John Smith”出现在列表中

或者我们是否在选项1的步骤中执行此操作,只是没有明确提及它?

例如,如果点击“添加详细信息”,请检查我们是否会出现在正确的页面上?

public void WhenIClickAddDetils{
    // syntax probably wrong, not important
    Assert.That(IE.Button("AddDetails").exists);
    IE.Button("AddDetails").click();

    Assert.That(IE.PageTitle = "Add Details")); // do we check this here?
}

或者我们应该在输入详细信息之前检查我们是否在正确的页面上?

public void WhenIEnterDetils{
    Assert.That(IE.PageTitle = "Add Details")); // do we check this here?

    IE.TextField("Name").value = "John Smith";
    // etc
}

或者,我们可以从

开始
  

鉴于我在“添加详细信息”页面

然后只需在主页上启动该步骤并点击“添加详细信息”按钮即可进入该页面。虽然在点击“保存”后导航回主页仍然存在同样的问题。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

我想说你不必在这种情况下检查它。基本上,测试是Given-When-Then(arrange-act-assert),而And I am on the "Add Details" page实际上是Then(行为)中的When(断言),看起来不正确对我来说。

我的直觉是它看起来应该是这样的:

Scenario: Add Details directs to "Add Details" page

Given I am on the "Home" page
When I click "Add Details"
Then I am on "Add Details" page


Scenario: "Add Details" adds person to the list

Given I am on the "Add Details" page
And I enter "John Smith" in the Name field
And I click "Save"
Then I am on the "Home" page
And "John Smith" appears in the list