Cucumber类扩展步骤定义和钩子

时间:2016-01-13 16:28:41

标签: java cucumber hook extend

我想扩展一个" AbstractBase_step" java中的类。所以我想要一个像:

的钩子
public abstract class AbstractBase_Steps {
    protected Scenario scenario;
    @Before
    public void background(Scenario scenario) {
        this.scenario = scenario;
    }
}
为每个步骤文件调用

public abstract class Hello_Steps extends AbstractBase_Steps {
}

当我这样做时,我得到了

  

cucumber.runtime.CucumberException:您不允许扩展定义步骤定义或挂钩的类。 class Hello_Steps扩展了类AbstractBase_Steps

有人有诀窍吗?

编辑:为了重复使用相同的步骤定义,我创建了一个新的Class Common_Steps并将其包含在粘合路径中。因此,它的定义可用于测试中的所有特征文件。

4 个答案:

答案 0 :(得分:6)

检查this discussion

希望这有助于。

答案 1 :(得分:1)

我理解你的问题,你想减少步骤的逻辑。这是解决方案。

1)在这种情况下A定义一个公共类,其中包含co.com.test等常规包中的步骤

2)定义步骤config以使用基础包

@CucumberOptions(format = {"pretty", "html:target/html/"},
features = {"src/test/resources/acceptance/general/general.feature"},
glue = {"co.com.test"})

3)不通过A的具体步骤从B类继承。

这将导致在所有包中搜索步骤,并找到常用步骤和具体步骤。

答案 2 :(得分:0)

您可以在stepdefinition中定义@Before步骤,然后在基类中添加方法,

我的情况是在每个步骤之后在黄瓜jvm报告中打印消息并减少复杂性,这是解决方法,

stepdefinition:

   @Before
public void after(Scenario scenario) {
    this.scenario = scenario;
}

baseclass方法:

public static Scenario scenario;

   public Scenario printResponse_Report(Scenario scenario, String responseStr{
      scenario.write("Response body: \n" +responseStr);
      return scenario;
}

答案 3 :(得分:0)

唯一的问题是使用 AOP 并创建代理类的黄瓜注释,因此只需在具体实现中移动 @Before@After

public class BaseStepDefinition {
    protected void init(){
        PageFactory.initElements(..);
    }
}

public class MyStepDefinition extends BaseStepDefinition {
    @Before
    @Override
    public void init() {
       super.init();
    }
}