簡體   English   中英

Cucumber 類擴展步驟定義和鈎子

[英]Cucumber class extending step definitions and hooks

我想從 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 {
}

當我這樣做時,我得到

黃瓜.runtime.CucumberException:你不能擴展定義步驟定義或鈎子的類。 類 Hello_Steps 擴展類 AbstractBase_Steps

有人對此有訣竅嗎?

編輯:為了重用相同的步驟定義,我創建了一個新類 Common_Steps 並將其包含在膠水路徑中。 因此它的定義可用於測試中的所有特征文件。

檢查這個討論

希望這可以幫助。

據我了解您的問題,您想減少步驟的邏輯。 這是解決方案。

1)在這種情況下定義一個通用類A ,在co.com.test等通用包中使用步驟

2)定義步驟配置以使用基礎包

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

3) 不從類 B 繼承到 A 的特定步驟

它會導致在所有包中搜索步驟,並會找到通用步驟和具體步驟。

您可以在 stepdefinition 中定義 @Before 步驟,然后在基類中添加方法,

我的方案是在每個步驟后在黃瓜 jvm 報告中打印消息並減少復雜性,這是解決方案,

步驟定義:

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

基類方法:

public static Scenario scenario;

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

唯一的問題是使用 AOP 並創建代理類的黃瓜注釋,因此只需在具體實現中移動@Before@After

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM