为什么@BeforeClass 不触发?

如何解决为什么@BeforeClass 不触发?

这是从现有代码库中提取一个 Cucumber Scenario Outline,但我被要求使用 TestNG 进行尝试。一些内容(scenario()、scenario()、TestNGCucumberRunner、DataProvider)取自 stackoverflow 上的另一篇文章,因为我不知道如何使 Scenario Outline 与 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 驱动程序 获取其值的地方触发。

处理场景大纲的部分我不完全理解,但至少我不会再遇到 cannot injection @test annotated method with 错误了。

解决方法

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

,

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?