2017-04-26 16 views
0

Cucumber:Cucumberで継承を使用できない場合、どのようにBaseStepsクラスを作成できますか?Cucumber:Cucumberで継承を使用できない場合、どのようにBaseStepsクラスを作成できますか?

ログイン手順CommonStepsクラスを継承しています:

public class LoginSteps extends CommonSteps { 

    WebDriver driver = getDriver(); 

    @Given("^User navigates to the \"([^\"]*)\" website$") 
    public void user_navigates_to_the_website(String url) throws Throwable { 
     basePage.loadUrl(url); 
    } 

    @And("^User entered the \"([^\"]*)\" username$") 
    public void user_entered_the_username(String username) throws Throwable { 
     loginPage.setUsername(username); 
    } 






public class CommonSteps { 
    @After 
    public void close_browser_window(Scenario scenario) throws Exception { 
     if (scenario.isFailed()) { 
      scenario.embed(((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES), "image/png"); 
     } 
    } 
} 
+1

[Cucumber:ステップ定義やフックを定義するクラスを拡張することはできません](http://stackoverflow.com/questions/41985002/cucumber-youre-not-allowed-to-extend-classes) -that-define-step-definitions-or-h) –

答えて

1

あなただけではないロベルトPegoraroのリンクで引用だ理由のためのステップと、継承を使用することができます。私は私のステップを異なるステップのdefファイルに編成するのが好きです。しかし、これは相互運用性の問題につながります。クラス変数を使用してステップ間で通信する場合、それらのステップは同じファイル内になければなりません。あなたが継承を使用しない限り。私は、ステップが自分の間でやりとりするために使用する共有クラス変数(例えば、ページファイルインスタンス変数)を含むUiCommonクラスを作成します。各ステップ定義ファイルはUiCommonを拡張します。今では、さまざまなステップ定義ファイル間のステップ定義をどのようにリファクタリングするかは関係ありません。彼らはまだ通信することができます。

小規模なプロジェクトの場合、これは通常問題ではありません。しかし、gitマージ競合を最小限に抑える必要のある複数のテスト自動化エンジニアを持つ大規模プロジェクトの場合は、重要です。

+0

返信にはとても感謝していますので、すべてのメインメソッドを含むクラスを作成し、すべてのステップファイルに 'Before'タグと 'After'タグメインメソッドクラス内に格納されたメソッドを順番に使用します。 – Gbru

+0

**すべて**前と後のタグは、シナリオごとに1回実行されます。だからあなたがそれらのすべてを走らせたいのでなければ、それぞれを持っているか、タグで制限してください。 – MikeJRamsey56

+0

あなたの助けをありがとう – Gbru

1

Javaの慣用的な解決策、つまりCucumber-JVMは、異なるクラスに実装されたステップ間で状態を共有したい場合には、依存関係注入を使用します。

キュウリは多くの異なる依存性注入フレームワークをサポートします。プロジェクトですでに使用している場合は、依存関係フレームワークがサポートされている可能性が非常に高いです。

依存性注入フレームワークを使用しない場合は、PicoContainerを使用することをお勧めします。あなたがそれを使う方法を知る必要があるならば、私はブログ記事describingをステート間で共有する方法を書いた。

+0

また、依存性注入にSpringを使用しています。 +1。 – MikeJRamsey56

関連する問題