即使未使用步骤定义类,钩子执行后的 Cucumber 步骤定义类?

问题描述 投票:0回答:2

所以我有一个非常基本的项目,在 Java 中使用 Appium/Cucumber/Gherkin 和 JUnit。我最初想在每个 StepDefinition 类中使用 @Before 和 @After 标记来创建驱动程序、退出驱动程序并提交报告。我遇到的问题是,即使我的步骤都不存在于步骤定义类中,该类本身仍然会被创建,这会导致我的 @Before 和 @After 标签运行。

我有一个初始化的解决方法,基本上是将驱动程序创建移动到后台步骤。但我一直无法找到一种方法来正确使用我的驱动程序退出和报告功能。我很确定如果我将功能强制到每个场景的最后一步,我可以对我的后续案例做同样的事情,但我希望有一种更干净、更全局的方法。

这是否按预期工作?或者步骤定义类是否应该仅在实际使用其函数之一时才实例化?你以前遇到过这种情况吗?

java cucumber appium gherkin
2个回答
3
投票

黄瓜中的钩子本质上是全球性的。也就是说,如果钩子方法在给定 CucumberOption

glue
选项的包结构中定义的任何类中进行编码,则它们将被执行。

解决方法是在 Before 和 After 挂钩中使用标签作为过滤器。您还可以修复这些标签的执行顺序。

如果您希望场景在

Before
挂钩中打开浏览器,请为该场景指定
@Browser
标签。在@Before注释中像
@Before("@Browser")
一样使用它。这仅适用于带有浏览器标签的场景。
After
钩子也是如此。

您可以将 order 属性添加到

Before and After
标签以赋予优先级。
@Before(value="@Browser", order=5)
。这将在顺序为 10 的 Before 挂钩方法之前运行。对于顺序为 10 的 After 挂钩方法,将在顺序为 5 的方法之前运行。


0
投票

如何使用 Cucumber 中的 @Before("@Browser") 注释在功能文件中将场景设置为 @chrome 或 @firefox?

© www.soinside.com 2019 - 2024. All rights reserved.