【问题标题】:You're not allowed to extend classes that define Step Definitions or hooks不允许扩展定义步骤定义或钩子的类
【发布时间】:2021-12-21 05:49:04
【问题描述】:

我试图将 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/");
    }

【问题讨论】:

  • 你为什么要扩展一个包含钩子方法的类?最终目标是什么?
  • 我想把我所有的钩子放在一个单独的类中,这样我就可以在其他 step def 文件中使用它们。但是,当我这样做时,出现以下错误:Before All/After All failed java.lang.NoClassDefFoundError: org/picocontainer/MutablePicoContainer 我已将 pico-container jar 添加到我的依赖项中,但仍然出现上述错误

标签: java selenium dependency-injection cucumber picocontainer


【解决方案1】:

io.cucumber.java.InvalidMethodException: 你不能扩展 定义步骤定义或挂钩的类。

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

当前方式

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

更新方式

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

【讨论】:

  • 您能否在一些示例代码中显示以上内容。
  • 更新了解决方案。请看看它是否有帮助。
【解决方案2】:

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

在哪里定义钩子对其运行的场景或步骤没有影响。

(c) Cucumber 文档

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多