WebDriver PageObject パターンに慣れるのに苦労しています。PageObjects パターンと loadableComponents の使用経験と方法を共有してください。
通常、PageObject はコンポーネントまたは機能の一部を表すため、最初はこれを使用して load() で実際に何かを実行し、isLoaded() で本来の動作を行うかどうかを確認する必要があると思いました。
次に、Web サイト内を移動する場合と同様に、各オブジェクトに独自の URL があるため、オブジェクトの「読み込み」(おそらく初期化) にのみ使用する必要があることに気付きました。isLoaded() を使用して、オブジェクトがテストの準備ができているかどうかをテストします。
しかし、テストする複雑な JavaScript 注文サブミッターがある場合、それは JS ファイル アップローダー、2 つの独立した部分に基づく JS フォーム、および 3 種類の注文がある複合体であり、(URL に関して) どこにも移動せず、ただ要素の状態が変化しています。
get() メソッドを考えてみましょう。インタラクティブなフォームでページに入ります。フォームがページに存在するときに読み込まれます。次に、form1 および form2 オブジェクトがあります...それらの load() および isLoaded() メソッドはどのように見えるべきでしょうか。これらはロードを必要とせず、サービスをテストするだけなので、すぐにアクションの準備ができています。
オブジェクトがロードされたかどうか、またはオブジェクトがロードされて正しくセットアップされたかどうかをチェックするために isLoaded() メソッドが使用されているかどうかはわかりません。しかし、前者の方法が正しいと思います。その設定の妥当性はテスト内で保証されるべきです。
シナリオ:
Testing first part of html form - test that field client side validation works
Testing the second one that depends on the first one
Testing the following file uploader - upload, canceling, clearing, order, fileIDs
Testing the overall html form submission - ServerSide validation errors, results
ドキュメントには次のように書かれています:
- LoadableComponent
-
public メソッドは、ページが提供するサービスを表します
検証、アップロード、アップロード 複数、キャンセル、クリア
ページの内部を公開しないようにしてください
私に起こる唯一のことは、UnitTestsにDriverインスタンスを非表示にし、PageObjectsのみを使用してすべてのフィールド名を保持し、PageObjectsのcssクラス名+ PageObjectsに入力データを提供し、サービス/機能のブール結果をアサートすることです
メソッドは他の PageObject を返します
これは慣れるのが最も難しいことです。1 つのインタラクティブ フォームに 4 つのページ オブジェクトがあるのは、ちょっと不自然です。彼らは Form1、Form2(Form1)、Upload(Form2)、Submit(Upload) を推奨していますが、前のオブジェクトへの参照の連鎖と引き渡しは非常に混沌としていると思います。テストメソッドでそれらすべてに対して get() を呼び出す方が良いようです。しかし、その背後にある考え方は、Driver インスタンスをテストに公開することではなく、Driver インスタンスを内部で使用している PageObjects のみを使用することだと思います。
同じアクションに対する異なる結果は、異なるメソッドとしてモデル化され ます。これは、Page オブジェクト側でそのアクションの有効性について決定するのではなく、テスト側で決定する必要があることを意味すると思います。