@Before не выполняется в шаге Java Cucumber

у меня есть класс шага огурца, который я пытаюсь инициализировать модель страницы для всех сценариев. Поэтому я добавил @Перед аннотированным методом:

@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 всегда имеет значение null. Метод beforeScenario никогда не вызывается. Я совершенно неправильно понял, как @Before должен работать? Есть советы, как получить то, что я хочу работать?

Edit: у меня также есть аннотированный метод @After, который запускается после каждого сценария, как ожидалось.

Edit : Pom можно увидеть по адресу:http://pastebin.com/PJ6qQRK9

3 ответов


  1. убедитесь, что вы используете cucumber.annotation.Before, а не org.junit.Before. Огурец не будет обрабатывать аннотации JUnit. (Дополнительные сведения в разделе крючки сценария этот блог.)

  2. убедитесь, что ваш @Before метод public, а не private.


есть принятый ответ на этот вопрос, но я хотел бы указать на комментарий Мэтта Уотсона, который решил проблему для меня и для которого я не видел подобных советов в другом месте:

у меня была игра с некоторыми из моих тестов cucumber-jvm, и я думаю, что заметил это. Ваш @Before метод должен быть public, а не private

на @Before метод должны быть public.


Привет я знаю, что это старый пост, но ни одно из этих решений работает для меня. Поэтому я поделюсь своим решением.

Я создал класс Hooks в рамках пакета: com.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"}
)

и это сработало.