0

我试图将 pico-container DI 合并到我的框架中,这样我就可以在多个步骤定义中使用 @Before 和 @After 标记。请参阅下面的错误。任何建议都会很棒。

You're not allowed to extend classes that define Step Definitions or hooks. class steps.hotelBookingFormPage extends class resources.hooks

import io.cucumber.java.en.Given;
import org.openqa.selenium.internal.ShutdownHooks;
import resources.hooks;

public class hotelBookingFormPage extends hooks {

    public hooks base;
    hotelBookingFormPage (hooks base) {
        base = hooks.startBrowser();
    }

    @Given("I navigate to the hotel booking form page")
    public void iNavigateToTheHotelBookingFormPage() {
        base.driver.get("http://hotel-test.equalexperts.io/");
    }
4

2 回答 2

1

我相信你正试图以错误的方式使用钩子。钩子不是类,而是胶合路径下任何类中的注释方法。你不应该直接打电话给他们。

定义钩子的位置对其运行的场景或步骤没有影响。

(c) 黄瓜文件

每次场景/步骤完成时都会调用所有挂钩。如果您需要比使用条件挂钩更灵活的控制

于 2021-11-08T14:28:46.930 回答
1

io.cucumber.java.InvalidMethodException:不允许扩展定义步骤定义或钩子的类。

StepDefinitionCucumber 为每个场景之前定义的所有类创建一个新实例。StepDefinition然后,只要它需要运行一个步骤,它就会在其中一个实例上调用方法。如果我在 a 中声明一个方法测试class并扩展为StepDefinition扩展,class那么将创建两个实例,并且测试方法将在两个实例上可用,并且 cucumber 将无法决定在哪个实例上调用该方法。如果继承到类(具有钩子方法),那么您可以使用组合。

当前方式

class hotelBookingFormPage extends hooks{
 public hooks base;
    hotelBookingFormPage (hooks base) {
        base = hooks.startBrowser();
    }
}

更新方式

class hotelBookingFormPage{
    hotelBookingFormPage () {
        hooks base = new hooks();
        base.startBrowser();
    }
}
于 2021-11-08T13:20:50.393 回答