@Before不会在java Cucumber Step中执行

2022-09-02 22:49:39

我有一个 Cucumber Step 类,我正在尝试为所有方案初始化页面模型。所以我添加了一个@Before注释的方法:

@Before()
private void beforeScenario() {
    LOGGER.info("Running before!");
    loginPage = BrowserDriver.getPageModel(LoginPage.class);
}

然后,我有一堆依赖于设置loginPage的步骤。例如:

@When("^I click the help link$")
public void I_click_the_help_link() {
    loginPage.clickHelpLink();
}

我有多个步骤类。上述两种方法都位于同一个 Step 类中。但是,loginPage 始终为空。之前Scenario方法永远不会被调用。我是否完全误解了@Before是如何工作的?关于如何获得我想工作的任何提示?

编辑:我还有一个@After注释的方法,可以按预期在每个场景之后运行。

编辑 :Pom可以在:http://pastebin.com/PJ6qQRK9


答案 1
  1. 请确保您使用的是 而不是 。Cucumber 不会处理 JUnit 注释。(有关详细信息,请参阅本博客文章的“方案挂钩”部分。cucumber.annotation.Beforeorg.junit.Before

  2. 请确保您的 @Before 方法是 ,而不是 。publicprivate


答案 2

你好,我知道这是一个旧帖子,但这些解决方案都不适合我。所以我将分享我的解决方案。

我在包下创建了类:Hookscom.mycompany.automation.util

package com.mycompany.automation.util;

import com.mycompany.automation.rest.database.AS400DBManager;
import cucumber.api.java.After;
import java.sql.SQLException;

/**
 * @author <a href="mesaj@mycompany.com">Julian Mesa</a>
 * @version 0.1.0
 * @since 0.1.0
 */

    public class Hooks {

      @After
      public void beforeScenario() throws SQLException, ClassNotFoundException {
        System.out.print("Closing connection.");
        AS400DBManager.getInstance().closeConnection();
      }

    }

然后我在流道的胶水选项中指定了包:

@RunWith(CucumberWithSerenity.class)
@CucumberOptions(
    features = "src/test/resources/features",
    glue = {"com.mycompany.automation.features.steps",
        "com.mycompany.automation.util"}
)

它奏效了。


推荐