我想扩展一个" 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并将其包含在粘合路径中。因此,它的定义可用于测试中的所有特征文件。
答案 0 :(得分:6)
希望这有助于。
答案 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();
}
}