2016-05-19 6 views
0

WebDriverの静的オブジェクト参照を使用してテストを並行して実行すると、問題が発生し始めました。PageFactoryでPOMを使用した並列実行

public static WebDriver driver; 

したがって、私はWebDriverの非静的オブジェクト参照を使用することに決めました。私はページ工場でPOMを使用する場合

private WebDriver driver; 

は今、私の理解では、私は、以下に示すように、テストクラスに新しいオブジェクトを作成する必要がありますテストを作成することを毎回です。

/*同じクラスに以下に示すようにページオブジェクトクラスのコンストラクタ*/

private WebDriver driver; 

public LoginPage(WebDriver driver) {   
     this.driver = driver; 
     PageFactory.initElements(driver, this); 
} 

2テストケース。

private LoginPage loginPage;  

@Test 
public void testCase1() { 
    loginPage = new LoginPage(getDriver()); 
    loginPage.sendkeys("sometext"); 
} 

@Test 
public void testCase2() { 
    loginPage = new LoginPage(getDriver()); 
    loginPage.sendkeys("sometext"); 
} 

ここに私の質問は

  1. 私は、右のすべてのテストケースのためのページオブジェクトを作成するにはアムれますか?
  2. これを最適化する方法はありますか? 1つの疑問は、静的でないオブジェクト参照がオーバーライドされ、それらを並列実行するとメソッドの1つに問題を引き起こす可能性があるからです。

申し訳ありませんが、私のクエリはnaiveです。どんな助けもありがとう。

答えて

0

もう一度初期化する必要はありません。また、テストケースではなく@BeforeTestでページを初期化します。

+0

なります

public class SignInPage { public EmailViewPage ClickToLogin(WebDriver driver, By by) { WebUtils.Click(driver, by); return PageFactory.initElements(driver, EmailViewPage.class); } } 

ありがとうございます。私はそれを徹底的に調べます。 –

0

ここでは、ページオブジェクトモデルの例を挙げたいと思います。あなたがこれを関連付けることができることを願っています。

私の主なテスト:

@Before 
public void SelectBrowser(){ 
    driver = WebUtils.SelectBrowser(driver,"Chrome"); 
} 


@Test 
public void LoginToGmail() throws InterruptedException{ 
    //WebDriver driver = new FirefoxDriver(); 
//MAximize the Screen 
    driver.manage().window().maximize(); 
//Go to Gmail Login Page 
    SignInPage SignInPage = new SignInPage(); 
    WebUtils.GoToSignInPageForPropertyFile(driver, "URL"); 
//Click on Next 
    SignInPage.ClickToLogin(driver, By.cssSelector("input[id='next']")); 

今すぐクラスをサポートする:

GoToSignInPageForPropertyFile方法は、各ページのオブジェクトクラスによって使用されるものは何でも私はWebutilsで書くWebUtils になります。

今すぐメソッドClickToLoginは次のようにSignInPageクラスの下で定義されて

public class WebUtils { 

    public static pageobject.SignInPage GoToSignInPageForPropertyFile(WebDriver driver, String URL) { 
     ReadFileData File = new ReadFileData(); 
     Properties Values = File.ReadFile(); 
    driver.get(Values.getProperty("URL")); 
    return PageFactory.initElements(driver, pageobject.SignInPage.class); 
    } 
} 

:さらにWebutils

public class WebUtils { 
    public static void Click(WebDriver driver, By by) { 
     WebElement Element = driver.findElement(by); 
     Element.click(); 
    } 
} 
+0

ありがとうございますKishan ...私はそれを調べます.. –

+0

はい。さらなる問い合わせのために返信を行います。 :-) –

+0

Kishan私は、並列実行に関しては、ファイアウォールオブジェクトの保持については苦労しています。テストケースを2つのクラスファイルで並列実行(parallel = "tests"を設定)し、別クラスにあるfirefoxドライバの初期化中にbeforeclass/beforetestを使用している場合は、classAのテストケースが完了したら私はそれを知っているドライバを終了し、ClassBには利用できません。私が欲しいのは、各テストクラスのドライバインスタンスを別々にすることです。どのようにしてそれを可能にし、それは正しい方法ですか? ........ –

関連する問題