如何在没有AfterStep钩子的情况下处理黄瓜中的动态步进?

时间:2019-04-18 21:21:52

标签: java selenium cucumber

我当前正在使用Cucumber(info.cukes)-Selenium进行自动化测试。

现在,我有一种情况,在流程的任何点都可能发生特定步骤。 因此,我必须设计一个黄瓜方案来验证每一步中的动态页面。

如何在没有AfterStep钩子的情况下实现此目的? (黄瓜(info.cukes)不支持AfterStep挂钩)

示例:

场景:选择订单。

Given: Open URL with chrome browser
When:  Login with correct ID and password
Then: Complect the details on step 1
And: Complect the details on step 2
And: Complect the details on step 3

我的应用程序有一个动态页面,该页面可以出现在任何页面之间,因此我需要检查每个步骤中是否显示该页面,并在显示动态页面时执行特定任务,然后转到下一步在场景中。

请问有人可以帮助我实现黄瓜硒自动化的解决方案。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在保持端到端测试代码DRY时,页面对象几乎总是答案(或者至少是一个很好的起点)。即使您具有AfterStep挂钩,我也要警告不要在其中添加过多的隐式内容,但是按照流程进行和调试可能确实让人头疼,尤其是对于其他人。

在您的情况下,我可以想象一个工作流中三个页面的页面对象,每个对象都有一个clickSubmit()方法,该方法检查神秘页面的URL并完成(如果存在)。像

public void clickSubmit() {
  click(By.className("submitButton"));

  if (driver.getCurrentUrl().contains("mysterypage")) {
      MysteryPage mysteryPage = new MysteryPage(driver);
      mysteryPage.completeForm();
      mysteryPage.clickSumbit();
  }
}

诚然,对于称为clickSubmit的方法执行所有操作来说有点奇怪,所以也许最好在测试中存在一个辅助方法,并在每个方法的结尾都调用它步骤。

事后考虑,如果您对中间页的显示时间和位置具有真实的业务规则,并且不仅是随机的,那么它可能值得一试。如果用户真的很想看到它出现在这里而不是那里,但是您使小黄瓜看不到它的外观,所以它始终“起作用”,那么您就可以掩盖一个bug。