覆盖SpecFlow中的步骤声明?

时间:2016-10-31 19:02:35

标签: c# selenium-webdriver cucumber specflow gherkin

因此,在我的工作中,我们有一个核心的SpecFlow库,我们的不同团队可以使用它来实现自动化。这个库有一些声明的步骤。

例如,库可能包含以下内容:

When I click the button

但是,我想说我想定义自己的步骤声明,使用完全相同的措辞。是否可以覆盖它?

3 个答案:

答案 0 :(得分:3)

正如@Grasshopper所写,步骤定义是全局的 但你可以使用Scopes来覆盖它 见http://www.specflow.org/documentation/Scoped-Bindings/

在这种情况下,不要忘记在每个场景中指定将调用标记或原始步骤定义。

答案 1 :(得分:3)

这样做是一个非常糟糕的主意,因为任何使用此步骤并失败的场景都将非常难以理解和调试。

一般情况下,在场景中使用通用库步骤也不是一个好主意。场景不应包含通用步骤或如何完成任务的描述。相反,它们应该包含特定于您的业务环境的步骤,这些应该描述正在做什么以及为什么要这样做。

所以而不是

When I click on sign in
   And I fill in my email with ...
   ...

我们得到更简单,更抽象的

 When I sign in

这就是我们正在做的事情,而不是我们如何做到这一点。

答案 2 :(得分:0)

如果您在同一步骤定义文件或另一个步骤定义文件中有两次相同的步骤(在您的情况下 - 当我单击按钮时),您将获得DuplicateStepException。即使您使用给定或然后注释。这是因为步骤定义全局加载,从而导致冲突。

此外,您无法扩展stepdefinition或hook包含文件,因为黄瓜会抛出一个不可接受的错误。因此,您无法通过继承覆盖行为。

您需要一起编写不同的步骤,或者如果可能的话,将按钮作为参数传递给现有步骤,并在允许修改库代码时放入逻辑。