Cucumber JUnit:当场景步骤定义分布在各个类中时如何截取屏幕截图?

时间:2016-03-17 16:38:42

标签: java selenium junit cucumber cucumber-junit

我有一个功能文件:

@Scenario_1
Scenario: Google search
Given user opens "google"
When user searches for "Hello World"
Then user sees the results


@Scenario_2
Scenario: Yahoo search
Given user opens "yahoo"
When user searches for "Hello World"
Then user sees the results


@Scenario_3
Scenario: Test w3schools links
Given I test w3schools
When I click on a link
Then the page refreshes with new data displayed


@Scenario_4
Scenario: Test database
Given I log into DB
When I query for UserID
Then the user details are displayed

这些步骤的定义分为3类。

由于这些语句在Scenario_1和Scenario_2中很常见,因此它们的定义分为一类:

SearchStepDefinitions
{
    Scenario_1
    Scenario_2

    @Given(...)
    @When(...)
    @Then(...)
    @After(Scenario s)
    {
        final byte[] screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);     //Take screenshot
        s.embed(screenshot, "image/png");
    }   

}

Scenario_3语句定义在另一个类中。

LinkStepDefinitions
{
    Scenario_3

    @Given(...)
    @When(...)
    @Then(...)
    @After(Scenario s)
    {
        final byte[] screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);     //Take screenshot
        s.embed(screenshot, "image/png");
    }   

}

Scenario_4语句在另一个类中定义。

DatabaseStepDefinitions
{
    Scenario_4

    @Given(...)
    @When(...)
    @Then(...)
}

我需要方案1,2,3的截图,因为它们处理前端。但是,我不希望Scenario4有任何截图,因为它处理后端。

我运行功能文件:

1)Scenario_1和Scenario_2正常运行。

2)当我运行Scenario_3时,我在#34; //获取NullPointerException屏幕截图" SearchStepDefinitions。

3)当我运行Scenario_4时,我得到NullPointerException" //截屏" SearchStepDefinitions。

我应该如何构建我的程序,以便我可以将语句保存在不同的类中,同时在需要时截取屏幕截图?

1 个答案:

答案 0 :(得分:0)

所有@ Before和@After注释都具有相同的范围,因此很可能首先执行遇到的第一个注释,每次都适用于所有场景。您可以使用标记作为参数指定要执行的执行。寻找标记挂钩here