2011-01-04 10 views
3

私はSelenium IDEで作成した一連のSeleniumテストをJavaに移植しました。いくつかのテストでは、verifyTextPresentコマンドのJava相当版を使用して、ページ上のテキスト(verifyTrue(selenium.isTextPresent()))を確認します。Selenium RCテストは、verifyTrue(selenium.isTextPresent( "string"))で失敗する必要があります。

IDEからテストを実行しているときにページのテキストにスペルミスがありますが、Selenium RC/TestNG経由でテストを実行しているときにエラーが検出されませんでした。ここで私が持っているコードと問題を引き起こしているテキスト(太字でスペルエラー)の例です:

テキスト:

下記のエラーを修正してください。

少なくとも1つの制限を追加する必要があります。

IDE:

verifyTextPresent | Please correct the errors indicated below. 
verifyTextPresent | You need to add at least one restriction. 

のJava:

verifyTrue(selenium.isTextPresent("Please correct the errors indicated below.")); 
verifyTrue(selenium.isTextPresent("You need to add at least one restriction.")); 

テストの両方のバージョンが正しいテキストを持っているので、なぜエラーをキャッチしませSelenium RCのバージョンはありますか?誰にもこの問題がありましたか?

答えて

5

これが発生する理由は、verifyTrue()の呼び出し後もテストが実行され続けるためです。 Seleniumの検証では、例外をスローしてテストが失敗するアサーションではなく、検証が失敗した場合にスローされる例外をキャッチします。検証では例外をスローするのではなくキャッチするため、テストに合格します。

テストの最後に、checkForVerificationErrors()メソッドを呼び出して、検証が失敗したかどうかを確認する必要があります。メソッドが呼び出されない場合、検証エラーは無視され、テストは引き続き行われます(他の問題がなければ)。

エラーに関するSelenium Google Groupの説明はhereです。様々な検証とアサーションに関する議論はhere.

+0

扱います。それはあまりにも素晴らしい機能のようです。メソッドが呼び出されるまでアサーション例外をスローしません。私はすぐにセレンを呼んだ後にこれを行います。 – sMaN

+0

偉大な投稿、私たちはそれを実現したときにフリークアウトしました。実行していたテストに失敗しませんでした。 checkForVerificationErrors()なしでこれを呼び出す何百ものテストがあります。コール。私たちはtearDown()メソッドで問題を修正しましたが、今度はテストを再実行する必要があります.... – bakoyaro

3

私は同様の問題がありました...私の回避策は、verifyTrue()の代わりにassertTrue()を使用することです。それがあなたのために働くことを願っています。

+0

ありがとうございます。私はこれも考えていました。私はSelenium RCにある種のバグがあると推測しています。私は後でそれを見つけることができるかどうかを調べるためにソースをチェックアウトする必要があります。 2.0でWebDriverに移行したために修正されないかもしれないかもしれませんが、2.0がベータテストから外れるまで、これを当面使用しなければなりません。 – Feanor