2016-03-08 107 views
0

我在与黄瓜一个问题 - 现在我正在做一个移动的自动化和我有使用情况概述功能 - 我有几个变量的情况:处理黄瓜情景实例为一个场景

方案概要:菜单项

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  | 

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

我试着把这些例子作为一个List来处理,但是没有帮助。

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

你的意思是你的代码的每次迭代的应用程序重新安装和启动?你可以通过“重新启动应用程序”来说明你的意思吗? – nullpointer

回答

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")); 
} 
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 

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

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

它也会提高您场景中的抽象级别。目前,您的方案看起来更像是一个脚本,而不是所需行为的规范。