初めてのポスター。私は長年 UI の自動化に取り組んできましたが、ページ オブジェクト モデルを紹介されたり、ページ オブジェクト モデルを使用するように指示されたりしたのはつい最近のことです。そのほとんどは常識であり、私がすでに使用している手法を含んでいますが、十分に合理的な説明を広範囲に検索したにもかかわらず、自分の心の中で正当化できなかった特定の細かい点があります. POM を自分のベスト プラクティスと統合しようとしているときに、この質問が驚きを引き起こしたので、ここの誰かが私を啓発してくれることを願っています。
http://code.google.com/p/selenium/wiki/PageObjectsから:
上記のコードは重要なポイントを示しています。ページの状態に関するアサーションは、PageObjects ではなく、テストが行う必要があります。もちろん、すべてのガイドラインと同様に、例外もあります。
http://seleniumhq.org/docs/06_test_design_considerations.html#chapter06-referenceから:
ページ オブジェクトの設計方法には多くの柔軟性がありますが、テスト コードの望ましい保守性を実現するための基本的なルールがいくつかあります。ページ オブジェクト自体は、検証やアサーションを行うべきではありません。これはテストの一部であり、ページ オブジェクトではなく、常にテストのコード内にある必要があります。ページ オブジェクトには、ページの表現と、メソッドを介してページが提供するサービスが含まれますが、テスト対象に関連するコードはページ オブジェクト内にあるべきではありません。
ページオブジェクト内に含めることができ、またそうすべきである単一の検証があり、それは、ページ、およびおそらくページ上の重要な要素が正しく読み込まれたことを検証することです。この検証は、ページ オブジェクトのインスタンス化中に行う必要があります。
これらの「ガイドライン」はどちらも潜在的な例外を認めていますが、基本的な前提には同意できませんでした。私は「ページメソッド」内でかなりの量の検証を行うことに慣れており、検証の存在は、さまざまなコンテキストで問題を見つけるための強力な手法だと思います (つまり、メソッドが呼び出されるたびに検証が行われます)。特定のテストの限られたコンテキストでのみ発生するよりも。
たとえば、AUT にログインしたときに、「ユーザーとしてログインしました」というテキストが表示されたとします。単一のテストでこれを明確に検証することは適切ですが、毎回検証したくないのはなぜですかログインが呼び出されますか?このアーティファクトは、ページが「正しくロードされた」かどうかに直接関連するものではなく、一般的に「テストされているもの」には関連していないため、上記の POM ガイドラインによれば、明らかにページ メソッドに含めるべきではありません。 ..しかし、可能な限り前もって考えずに、重要なアーティファクトを可能な限り頻繁に検証することにより、自動化の力を最大化するために、明らかにそこにある必要があるように思えます。検証コードをページメソッドに入れると、テストで心配することなく「無料で」多くの検証を取得できるため、自動化の力が倍増します。さまざまなコンテキストでのこのような頻繁な検証により、見つけられない問題が見つかることがよくあります。たとえば、検証がそのアーティファクトの単一のテストに限定されている場合。
言い換えれば、私はテスト固有の検証と「一般的な」検証を区別する傾向があり、後者が広範囲にページメソッドに含まれることは完全に適切/望ましいと思います。これにより、より薄いテストとより厚いページ オブジェクトが促進され、一般に、これらのガイドラインでは反対の競合が存在するにもかかわらず、より多くのコードを再利用することでテストの保守性が向上します。私は要点を逃していますか?ページメソッドで検証を望まない本当の理由は何ですか? 私が説明した状況は実際にこれらのガイドラインで説明されている「例外」の 1 つであり、したがって実際には POM と矛盾していませんか? ご意見ありがとうございます。-jn-