【问题标题】:Cucumber JUnit : How to take screenshot when scenario step definitions are spread across classes?Cucumber JUnit:当场景步骤定义跨类分布时如何截屏?
【发布时间】:2016-03-17 16:38:41
【问题描述】:

我有一个功能文件:

@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 时,我在 SearchStepDefinitions 的“//Take screenshot”处得到 NullPointerException。

3) 当我运行 Scenario_4 时,我在 SearchStepDefinitions 的“//Take screenshot”处得到 NullPointerException。

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

【问题讨论】:

  • 所有@Before 和@After 注释都具有相同的范围,因此很可能第一个遇到的第一个被执行,首先,每次对于所有场景。您可以使用标签作为参数指定执行哪些操作。寻找标记的 Hooks here.
  • @MikeJRamsey56 这有效!非常感谢!

标签: java selenium junit cucumber cucumber-junit


【解决方案1】:

所有的@Before 和@After 注释都具有相同的范围,因此很可能第一个遇到的第一个被执行,首先,每次对于所有场景。您可以使用标签作为参数指定执行哪些操作。查找标记的 Hooks here

【讨论】:

  • 让我们从零答案列表中删除它。
猜你喜欢
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 2015-11-21
  • 2023-01-31
  • 1970-01-01
  • 2021-06-07
  • 2014-01-01
  • 1970-01-01
相关资源
最近更新 更多