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

How to handle dynamic step in cucumber without AfterStep hook?

我目前正在使用 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

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

你能请别人帮助我用黄瓜 Selenium 自动化实现这个场景吗?

感谢您的帮助。

当谈到保持端到端测试代码干燥时,页面对象几乎总是答案(或者至少,它们是一个很好的起点)。即使你有 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 的方法做所有这些有点奇怪,所以在测试中存在一个辅助方法可能会更好,并且只在最后调用每一步。

事后想想,如果您对这个中间页面出现的时间和地点有真正的业务规则,而且它不仅仅是随机的,那么它可能值得在小黄瓜中捕获。如果用户真的关心它出现在这里而不在那里,但是你让小黄瓜看不到它的外观所以它总是 "just works",你可能会掩盖一个错误。