黄瓜类扩展步骤定义和钩子

2022-09-03 02:58:06

我想从java中的“AbstractBase_step”类扩展。所以我想有一个这样的钩子:

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:不允许扩展定义步骤定义或钩子的类。类 Hello_Steps 扩展了类AbstractBase_Steps

有人有诀窍吗?

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


答案 1

根据我对您的问题的理解,您希望减少步骤的逻辑。这是解决方案。

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

2) 定义步骤配置以使用基本包

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

3) 不通过特定步骤从 B 类继承到 A

这将导致将在所有包中搜索步骤,并找到常见步骤和特定步骤。


答案 2

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

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

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

推荐