java为什么@BeforeClass没有启动?
这是一个从现有代码库中提取的Cumber场景大纲,但我被要求使用TestNG进行尝试。其中一些内容(scenario()、scenarios()、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获取其值时未触发
关于场景概述的部分我并不完全理解,但至少我没有得到无法注入带有错误的@test注释方法的信息
# 1 楼答案
用Before/AfterClass注释的方法必须是静态的
# 2 楼答案
请使用@BeforeTest而不是@BeforeClass。如果问题解决了,请尝试理解这里的测试注释流程。或在此评论以获得进一步帮助