2017-04-20 8 views
0

Cucumber(java)内に「マスターステップ」を作成することはできますか?Cucumber(java)内に「マスターステップ」を作成することはできますか?

たとえば、繰り返しコードを使用する多くのステップファイルを作成しました。繰り返しコードは、各ステップファイル内のブラウザなどを初期化します。

ドライバセットアップなどが格納されるマスターステップファイルを作成することも可能ですか?そのため、各ステップの前に「Cucumber Before」を使用してセットアップを実行してください。

マイコード:

public class LoginStep { 

WebDriver driver; 
LoginPage loginPage; 

@Before 
public void setUp() throws Exception { 
    System.setProperty("webdriver.chrome.driver", 
      "C:\\Users\\deltaUser\\Desktop\\CucumberFramework\\PimCucumberFramework\\src\\test\\java\\resources\\other\\chromedriver.exe"); 
    this.driver = new ChromeDriver(); 
    this.driver.manage().window().maximize(); 
    this.driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS); 

    loginPage = PageFactory.initElements(driver, LoginPage.class); 
} 

@Given("^User is on the PIM login page$") 
public void user_is_on_the_PIM_login_page() throws Throwable { 
    loginPage.loginIntoAccount(); 
    // loginPage.test(); 
} 

@And("^enters the correct username$") 
public void enters_the_correct_username() throws Throwable { 
    System.out.println("User neters the correct password inside the password textefield"); 
    // loginPage.test2(); 
} 

@And("^enters the correct password$") 
public void enters_the_correct_password() throws Throwable { 
    System.out.println("Entered the correct password"); 
} 

@When("^clicks on the login button$") 
public void clicks_on_the_login_button() throws Throwable { 
    System.out.println("Clicked on the login button"); 
} 

@Then("^user should be taken to the successful login page$") 
public void user_should_be_taken_to_the_successful_login_page() throws Throwable { 
    System.out.println("Succesffully taken to the login page."); 
} 

}

私は、下記の次のコードを試してみましたが、コードは動作しdosntブラウザを開くように見えるが、その後他のステップは、それかのように(いけない仕事)ドライバの別個のインスタンスを作成した:

public class MasterStep { 
WebDriver driver; 
LoginPage loginPage; 

@Before 
public void setUp() throws Exception { 
    System.setProperty("webdriver.chrome.driver", 
      "C:\\Users\\gianni.bruno\\Desktop\\BuyAGiftCucumberFramework\\PimCucumberFramework\\src\\test\\java\\resources\\other\\chromedriver.exe"); 
    this.driver = new ChromeDriver(); 
    this.driver.manage().window().maximize(); 
    this.driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS); 

    loginPage = PageFactory.initElements(driver, LoginPage.class); 
} 

}

+0

私はこれを依存性注入を使用して解決し、セットアップ機能を注入します。それは私が必要とするものを構成し、継承を使って機能を注入しないようにするでしょう。 –

答えて

0

をはい可能です。継承の概念を使用します。

ステップ1:を使用してキーワードを拡張し、あなたが必要なときinitialize()メソッドを呼び出して、このクラスを継承:基本クラス

package com.base; 

import java.util.concurrent.TimeUnit; 

import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 

public class TestBase2 { 

    public static WebDriver driver = null; 

    public void initialize() { 

     System.setProperty("webdriver.chrome.driver", "src/com/drivers/chromedriver.exe"); 
     driver = new ChromeDriver(); 

     driver.manage().window().maximize(); 
     driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
     driver.get("https://www.google.co.in"); 
    } 
} 

ステップ2を作成します。

+0

ドライバを静的に設定する特定の理由がありますか? – Gbru

0

キュウリには、これに使用できる前後のフックが用意されています。

フックは、キュウリ実行サイクルのさまざまな時点で実行できるコードブロックです。これらは通常、各シナリオの前後に環境の設定と分解に使用されます。

各シナリオの最初のステップの前にフックを実行する前。

注釈付きメソッドのスタイル:

@Before 
public void doSomethingBefore() { 
} 

ラムダスタイル:

Before(() -> { 
}); 

ステップは、保留中、未定義の失敗、またはスキップされていても、各シナリオの最後のステップ、後に実行フックの後。

注釈付きメソッドのスタイル:

@After 
public void doSomethingAfter(Scenario scenario){ 
    // Do something after after scenario 
} 

ラムダスタイル:

After((Scenario scenario) -> { 
}); 

シナリオパラメータはオプションですが、あなたがそれを使用する場合は、シナリオの状態を調べることができます。

関連する問題