2017-07-07 118 views
0

我们在我们的自动化框架清理钩从黄瓜特征文件标记方案中使用具有不同值的一个标签要根据黄瓜

@cc_task_clean_up_hook_enrol_A 情景:人可以enrol_A 当我选择上下文菜单 然后我能够登记患者进入“enrol_A”

钩(@cc_task_clean_up_hook)的实施

@After(value = "@toc_task_clean_up_hook_enrol_A", order = HookOrder.CLEAN_UP_APP_AFTER) 
public void cleanUpTOC() { 
    this.patientContextPage.selectedContextMenuItem("Pathway"); 
    this.pathWayPage.selectReferences("Enroll in Pathway"); 
    this.pathWayPage.deactivateEnrollment("enrol_A", "Withdrawn"); 
} 

所以完全相同的方式,我们需要一个像

情景另外一种情况:人可以enroll_B 当我选择右键菜单 然后我能够登记患者进入“enrollB”

所以我们可以实现另一个钩子如下,所不同的是参数类型“enrollB”

@After(value = "@toc_task_clean_up_hook_enrollB", order = HookOrder.CLEAN_UP_APP_AFTER) 
public void cleanUpTOC() { 
    this.patientContextPage.selectedContextMenuItem("Pathway"); 
    this.pathWayPage.selectReferences("Enroll in Pathway"); 
    this.pathWayPage.deactivateEnrollment("enrol_B", "Withdrawn"); 
} 

那么,这可能合并这两种方法,写上一个通用的清理钩子,基于传递的参数?非常感谢您的帮助。

回答

0

您可以将脚本对象添加到传递给后挂钩的参数。该框架会将当前正在执行的场景注入该方法。

public void afterMethod(Scenario scenario){} 
  1. 可以使用Scenario对象,将返回的标签集合当前执行情况的getSourceTagNames()方法。从这个集合中,您可以确定您的代码是否以'enroll_A'或'enroll_B'结尾。

  2. 或者您可以使用getName()方法返回当前场景的描述。所以你会得到'Person can enroll_A'或'P ..... enroll_B'。只需要再次解析。

  3. 您可以修改Then step以将注册类型传递给步骤定义。将其存储在一个变量中。在你的后挂钩中使用这个变量。但是这将需要后钩在同一类。你

还需要将value parameter of After挂钩改为 - {"@toc_task_clean_up_hook_enrollA,@toc_task_clean_up_hook_enrollB"}

一个观察,这两个似乎有相同的步骤,如果是的话,那么你有没有考虑ScenarioOutline。

+0

非常感谢你,它的工作 – user8267843