将黄瓜场景示例作为一个场景处理

时间:2016-03-08 15:14:29

标签: android cucumber appium

我遇到了Cucumber的问题 - 现在我正在进行移动自动化,并且我有使用场景轮廓的功能 - 我在场景中有一些变量:

场景大纲:菜单项

Given the user is on the hamburger menu
And the language is <language>
Then menu item is <menu item>

Examples:
  | menu item           | language |
  | Search              | EN       |
  | Zoeken              | NL       |
  | Recherche           | FR       |
  | Saved properties    | EN       |
  | Bewaarde zoekertjes | NL       |
  | Biens sauvés        | FR       |
  | Saved searches      | EN       |
  | Bewaarde zoekacties | NL       |
  | Recherches sauvées   | FR       |
  | Settings            | EN       |
  | Instellingen        | NL       |
  | Paramètres          | FR       |

当我运行这个场景时,它会重新启动每一行的应用程序(在某些情况下可能是好的,但不是这个),这非常耗时。有没有办法指出应用程序何时应该重新启动应用程序以及何时应该继续执行这些示例?

我尝试将这些示例作为列表处理,但这没有帮助。

@Then("^menu item is (.*)$")
public void menuItem(List<String> menuItems){
    for(String menuItem : menuItems)
        Assert.assertEquals( menuItem, Common.getElementAttributeByName(menuItem,"text"));
}

2 个答案:

答案 0 :(得分:0)

这听起来像是在每个场景之前重新启动应用程序,对于场景大纲,您希望应用程序只启动一次。

场景大纲是编写许多场景的简便方法。每个示例都将展开并转换为场景,然后执行。

您的选择是

  • 在每个方案之前不重启您的应用程序
  • 接受重新启动应用程序
  • 重写您的方案,以便您没有针对每种语言的示例

最后一种方法意味着您可以将语言列表向下移动。可能是委托给代理的辅助类。

这意味着这样的场景:

Given the user is on the hamburger menu
When he order a hamburger
Then he should be able to do it on all languages  

我对这里的措辞不满意。但这个想法是你隐藏了某个地方的语言列表。这将允许您迭代它们而不是在场景大纲中包含语言列表。

这将解决您遇到的重启问题,因为您在每个方案之前重新启动。

它还会提升场景中的抽象级别。目前,您的场景对我来说看起来更像是一个脚本而不是所需行为的规范。

答案 1 :(得分:0)

正如Thomas Sundberg所说,你有很多选择。但是对于您的特定情况,您可能需要保持所有规格和

  

然后他应该能够在所有语言上做到这一点

具体不够。您可以像这样重写场景:

Scenario: Menu items
    Given the user is on the hamburger menu
    Then the possible menu items are
      | Search              | EN       |
      | Zoeken              | NL       |
      | Recherche           | FR       |
      | Saved properties    | EN       |
      | Bewaarde zoekertjes | NL       |
      | Biens sauvés        | FR       |
      | Saved searches      | EN       |
      | Bewaarde zoekacties | NL       |
      | Recherches sauvées   | FR       |
      | Settings            | EN       |
      | Instellingen        | NL       |
      | Paramètres          | FR       |

然后你可以处理那些:

    @Then("^the possible menu items are$")
    public void menuItems(Map<String, String> menuItems){
        for(Map.Entry<String, String> menuItem:menuItems.entrySet()) {
            switchToLanguage(menuItem.getValue());
Assert.assertEquals( menuItem.getKey(), Common.getElementAttributeByName(menuItem.getKey(),"text"));
}