2017-11-01 21 views
0

SeleniumHQ's pageobject documentationを読むと、他のページにナビゲートしないメソッドから "this"を返す例を指定します。私の質問はなぜですか?セレンページオブジェクト:なぜこれを返す必要がありますか?

ページオブジェクトの状態が理由である可能性がありますが、ページ自体(実際のUIページ)が状態を変更したり、ページオブジェクト自体が変更されないことが考えられます。 Page Factoryの@FindByアノテーションは、呼び出されるたびに各WebElementが見つかるようにしているので、要素の状態はこの場合には関係していないようです。

答えて

3

その例

public LoginPage typeUsername(String username) { 
    driver.findElement(usernameLocator).sendKeys(username); 
    return this;  
} 

public LoginPage typePassword(String password) { 
    driver.findElement(passwordLocator).sendKeys(password); 
    return this;  
} 

public HomePage submitLogin() { 
    driver.findElement(loginButtonLocator).submit(); 
    return new HomePage(driver);  
} 

を考えてみましょうが、今私たちがpageとして作成ページオブジェクトを作成していると仮定します。あなたのコードが望むものを返さなかった場合

page.typeUsername("tarun"); 
page.typePassword("lalwani"); 
HomePage newPage = page.submitLogin() 

しかし、これを返すと、メソッド連鎖を行うことができます。あなたは、それはそれはタルンの答えに示されているように、メソッドチェーンを可能にするだけでなく、それ

+0

回答と例をありがとう。これは実際に理にかなっています。それを追加することには何の影響もなく、実装/テスト側にいくつかのコードを保存するための新しいオプションが用意されています。 – James

0

にあなたにいくつかのコーディングの手間を節約し、より多くのエレガントなIDEインテリセンスとなります見ることができるように、私は以下の

HomePage newPage = page.typeUsername("tarun").typePassword("lalwani").submitLogin() 

のようにそれを使用することができますフローをキャプチャします。ログインページからログインしてホームページを表示すると、ログインメソッドはホームページのページオブジェクトを返します。そのフローが変わった場合、他のページオブジェクトを返すようにログインメソッドを更新すると、フローが失敗するIDEのどこにでもエラーが発生します。それはあなたがより速く修正する必要がある場所を見つけるのに役立ちます。

私の方法では、私はページオブジェクトを返さないと言っています。私はページオブジェクトのメソッド連鎖の大きなファンではありません。私はあまりにも多くのメソッドを連鎖させることによってあなたがどのページを追跡しているか分からなくなるので、テストフローをあいまいにすると思います。

ページオブジェクトを返すことで、エラーケースなどのための余分なメソッドを記述する必要があります。これは例で分かります。ホームページを返すsubmitLogin()メソッドと、ログインページを返すsubmitLoginExpectingFailure()などがあります。私にとって、私は、余分なコードとテストフローを読むことの難しさを上回るメリットは見つけられていません。

関連する問題