2016-12-27 21 views
0

私はいくつかのことを検証したいテストクラス内にテストメソッドを持っていますが、この特定のテストメソッドでソフトアサートした後にしか失敗しません。SoftAssert in Seleniumテストクラス

しかし、私のテスト方法が不具合処理で乱雑になってきていると感じています。私はこれに関するベストプラクティスを見つけることができませんでした。何か案は?私がアサーションをページオブジェクトクラスに移すと、そこにはちょっと乱雑になります。チェック大会

@Test 
public void test() { 
// steps here 

// then asserts here 
SoftAssert soft = new SoftAssert(); 
String expectedHeaderText = "foo"; 

Boolean checkHeader=pageObjectClass.isHeaderPresent() //Change the method on POM pageObjectClass such that it returns the true or false 
soft.assertTrue(checkHeader,true); 

String checkHeaderContent=pageObjectClass.getHeader()//change method on POM pageObjectClass to return a string 
soft.assertTrue(checkHeaderContent.contains(expectedHeaderText), String.format("Expected to find '%s'. Page actually shows '%s'", expectedHeaderText, checkHeaderContent)); 
// more asserts 
sa.assertAll(); 

}

+0

ヘッダーの有無を確認し、ヘッダーのテキストを確認するのはむしろ冗長なようです。最初のアサートを中止し、ヘッダーテキストをチェックするだけで、ヘッダーが存在し、テキストが期待どおりのものであるということを引き続きアサインします。 テストクラスではアサートを維持し、ページオブジェクトクラスではそれが意味をなさないとは限りません。ページオブジェクトクラスは、セレクタとゲッタ/セッタと他のページに関連するロジックを持つだけで、そこでアサーションを実行する必要はありません。 – jaredgilmore

答えて

0

あなたはassertion and verification方法を提供QMetry Automation Frameworkを確認することができます。例:

//verify element present 
firstName.verifyPresent(); 
firstName.assertPresent(); 

//verify Text of Element 
firstName.verifyText("First User"); 
firstName.assertText("First User"); 

//verify Text of element with StringMatchers conditions 
firstName.verifyText(StringMatcher.contains("First User")); 
firstName.assertText(StringMatcher.contains("First User"),"Username Validation"); 

アサートメソッドの場合、アサート失敗時にテストは続行されません。

いずれの検証方法の場合でも、検証が失敗してもテストは続行され、1つ以上の検証が失敗した場合、テストの最終ステータスは失敗します。

+0

クイック返信をありがとう、テストメソッドの中にこれらのうちの5つ以上がある場合は、繰り返しすぎるように見えますか?ヘッダーテキストを確認した後、別のアイテムとそのテキストをチェックするまで数回繰り返します。私は 'isHeaderPresent'の内部にtrue/falseとエラーメッセージを返すと思っていましたか? – user2195411

+0

私はあなたのシナリオを実装する多くの方法を考えることができます。 "expectedHeaderText"をPOMメソッドに渡して、存在、ヘッダーの両方の内容をチェックし、結果に基づいてtrue/falseを返すことをお勧めします。 – prithvi394

+0

POMメソッドの内容と内容をチェックしてtrue/falseを返すと、メソッドがtrue/falseを返すため、エラーメッセージが失われます。テストメソッドのすべての失敗メッセージの内容を保持しない限り、 – user2195411

0

以下

@Test 
public void test() { 

    // steps here 

    // then asserts here 
    SoftAssert soft = new SoftAssert(); 
    String expectedHeaderText = "foo"; 

    soft.assertTrue(pageObjectClass.isHeaderPresent(), "Unable to find the Header page object."); 


    soft.assertTrue(pageObjectClass.getHeader().contains(expectedHeaderText), 
      String.format("Expected to find '%s'. Page actually shows '%s'", expectedHeaderText, pageObjectClass.getHeader())); 

    // more asserts 

    sa.assertAll(); 

} 
関連する問題