私は機能ファイルを持っています:
@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 で共通であるため、それらの定義は 1 つのクラスにグループ化されます。
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 の「//スクリーンショットを撮る」で NullPointerException が発生します。
3) Scenario_4 を実行すると、SearchStepDefinitions の「//スクリーンショットを撮る」で NullPointerException が発生します。
ステートメントを異なるクラスに保持し、同時に必要に応じてスクリーンショットを撮ることができるように、プログラムをどのように構成すればよいですか?