@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 ответов
убедитесь, что вы используете
cucumber.annotation.Before
, а неorg.junit.Before
. Огурец не будет обрабатывать аннотации JUnit. (Дополнительные сведения в разделе крючки сценария этот блог.)убедитесь, что ваш @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"}
)
и это сработало.