有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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注释方法的信息


共 (2) 个答案

  1. # 1 楼答案

    用Before/AfterClass注释的方法必须是静态的

  2. # 2 楼答案

    请使用@BeforeTest而不是@BeforeClass。如果问题解决了,请尝试理解这里的测试注释流程。或在此评论以获得进一步帮助