Cucumber JUnit:当场景步骤定义分布在 类 时如何截屏?
Cucumber JUnit : How to take screenshot when scenario step definitions are spread across classes?
我有一个功能文件:
@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 个 classes。
由于 Scenario_1 和 Scenario_2 的语句是通用的,因此将它们的定义归为一组 class:
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 语句定义在另一个 class.
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 语句定义在另一个 class.
DatabaseStepDefinitions
{
Scenario_4
@Given(...)
@When(...)
@Then(...)
}
我需要场景 1、2、3 的屏幕截图,因为它们涉及前端。但是,我不想要 Scenario4 的任何屏幕截图,因为它处理后端。
我运行特征文件:
1) Scenario_1 和 Scenario_2 运行 很好。
2) 当我 运行 Scenario_3 时,我在 SearchStepDefinitions 的“//截屏”处得到 NullPointerException。
3) 当我 运行 Scenario_4 时,我在 SearchStepDefinitions 的“//截屏”处得到 NullPointerException。
我应该如何构建我的程序,以便我可以将语句保存在不同的 classes 中,同时在需要时截取屏幕截图?
所有@Before 和@After 注释都具有相同的作用域,因此很可能第一个遇到的被执行,嗯,第一次,对于所有场景每次。您可以使用标记作为参数来指定执行哪个。寻找标记的挂钩 here.
我有一个功能文件:
@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 个 classes。
由于 Scenario_1 和 Scenario_2 的语句是通用的,因此将它们的定义归为一组 class:
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 语句定义在另一个 class.
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 语句定义在另一个 class.
DatabaseStepDefinitions
{
Scenario_4
@Given(...)
@When(...)
@Then(...)
}
我需要场景 1、2、3 的屏幕截图,因为它们涉及前端。但是,我不想要 Scenario4 的任何屏幕截图,因为它处理后端。
我运行特征文件:
1) Scenario_1 和 Scenario_2 运行 很好。
2) 当我 运行 Scenario_3 时,我在 SearchStepDefinitions 的“//截屏”处得到 NullPointerException。
3) 当我 运行 Scenario_4 时,我在 SearchStepDefinitions 的“//截屏”处得到 NullPointerException。
我应该如何构建我的程序,以便我可以将语句保存在不同的 classes 中,同时在需要时截取屏幕截图?
所有@Before 和@After 注释都具有相同的作用域,因此很可能第一个遇到的被执行,嗯,第一次,对于所有场景每次。您可以使用标记作为参数来指定执行哪个。寻找标记的挂钩 here.