Это одна схема сценария Cucumber, взятая из существующей кодовой базы, но меня попросили попробовать ее с TestNG. Некоторые вещи (сценарий(), сценарии(), TestNGCucumberRunner, DataProvider) были взяты из другого сообщения на stackoverflow, так как я не мог понять, как заставить схему сценария хорошо работать с TestNG.
public class StepsSettings {
private WebDriver driver;
private SettingsPage settingsPage;
private SearchBlock searchBlock;
private TestNGCucumberRunner testNGCucumberRunner;
@Test
@Given("maximum results per page is set to {int}")
public void maximumResultsPerPageIsSetTo(int results) {
settingsPage = new SettingsPage(driver);
searchBlock = new SearchBlock(driver);
settingsPage.navigateTo();
settingsPage.setNumberOfResults(results);
}
@Test
@When("the user searches for {string} in collection {string}")
public void theUserSearchesForInCollection(String key, String collection) {
searchBlock.performSearch(key, collection);
}
@Test
@Then("the number of publications displayed is no more than {int}")
public theNumberOfPublicationsDisplayedIsNoMoreThan(int count) {
By articlesBy = By.cssSelector("article");
Assert.assertTrue(settingsPage.getObjects(articlesBy).size() <= count);
}
@Test(groups = "cucumber scenarios", description = "Runs Cucumber Scenarios", dataProvider = "scenarios")
public void scenario(PickleWrapper pickleEvent, FeatureWrapper cucumberFeature) throws Throwable {
testNGCucumberRunner.runScenario(pickleEvent.getPickle());
}
@DataProvider
public Object[][] scenarios() {
testNGCucumberRunner = new TestNGCucumberRunner(this.getClass());
return testNGCucumberRunner.provideScenarios();
}
@BeforeClass(alwaysRun = true)
public void setup() {
System.setProperty(
"webdriver.chrome.driver",
System.getProperty("user.dir") + "\\webdriver\\chromedriver.exe"
);
driver = new ChromeDriver();
}
@AfterClass(alwaysRun = true)
public void teardown() {
driver.quit();
testNGCucumberRunner.finish();
}
}
При выполнении единственной ошибкой является исключение NullPointerException из-за того, что @BeforeClass не срабатывает, когда драйвер WebDriver получает свое значение.
Часть, касающуюся Scenario Outlines, я не совсем понимаю, но, по крайней мере, я больше не получаю ошибку cannot inject @test с аннотированным методом.