1

私は機能ファイルを持っています:

@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 が発生します。

ステートメントを異なるクラスに保持し、同時に必要に応じてスクリーンショットを撮ることができるように、プログラムをどのように構成すればよいですか?

4

1 に答える 1

0

すべての @Before および @After アノテーションは同じスコープを持っているため、すべてのシナリオで、最初に遭遇したものが実行される可能性があります。タグを引数として使用して実行するものを指定できます。ここでタグ付きフックを探します。

于 2016-03-26T00:26:28.407 に答える