2017-03-20 8 views
2

一度Webページ(FirstPageと呼ぶ)に正しいデータを入力して送信すると、SecondPageが取得されます。しかし、間違ったデータを入力して送信をクリックすると、FirstPageに書き込まれたエラーメッセージが表示され、SecondPageは表示されません。私のテストでは、 "幸せなパス"をテストしていて、FirstFormを提出する必要がありますが、間違ったデータによるデータ検証などの否定的なテストもあり、FirstPageで報告されたすべてのエラーメッセージをキャッチする必要があります。 私はこれを処理するこのアプローチを使用しました。あなたが同意するか、同意しないか、より良い方法があるかどうか聞いてみたいと思います。Seleniumでのページ提出とデータ検証の処理

public class FirstPage { 

    public SecondPage clickSubmit() { 
     webDriver.findElement(By.id("submit")).click(); 
     WebDriverWait wait = new WebDriverWait(webDriver, 10); 

     try { wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("someElementOnSecondPage"))); 
     return new SecondPage(); 
     } catch (TimeoutException ex) { 
      return null; 
     } 
} 

    public List<String> getAllErrorMessages() throws Exception { 
     // code for getting all error messages 
    } 

} 


public class FirstPageTest { 

    @Test 
    public void dataValidation() throws Exception { 
     // some intial code where I create firstPage and fill it with BAD data 

     firstPage.submit(); 
     List<String> allMessages = firstPage.getAllErrorMessages(); 

     // Check if messages are fine or not 

    } 

} 

私が適切にページを送信するテストでは、submit()メソッドがSecondPageを返したかどうかを確認しません。私は、SecondPageが返されたときにテストを続行し、そうでなければテストは失敗します。私は価値を返すものをチェックする必要はないと思う。

答えて

3

このようなことについては、ウェブ上に多くの参考文献があります。 This oneが気になります。

これは本当にこのような

以下ロケータはクラスのトップ

private By submitButtonLocator = By.id("submit"); 

になり、これは

public SecondPage clickSubmit() 
{ 
    webDriver.findElement(submitButtonLocator).click(); 
    return new SecondPage(); 
} 

クラスのメソッドになり、よりのようになります。正しいページにいるかどうかを判断するページオブジェクトコンストラクタのチェックが必要です。期待通りに2ページ目にいなければ、その検証は失敗します。メソッドで検証する必要はありません。その検証は、ページオブジェクトモデルルールの1つを実際に破る。すなわち、ロケータは、見つかったページオブジェクトのみに存在すべきであるということである。 By.name("someElementOnSecondPage")は、SecondPageクラス内にのみ存在する必要があります。そのロケータが変更され、それがただのSecondPage以上に存在していたなら、あなたはすべての参照を見つける必要があります。これは良いことではありません。

+0

ありがとうございました。私は主にロケータをどれくらいひどく使っていたかに驚いています。 –

関連する問題