0

そこで、他の Webdriver フレームワーク アーキテクトからフィードバックを得たいと思っていた興味深い難問があります。現在、私はかなり標準的な実行モデルに従います。

  • ベースオブジェクト
  • pageobject (baseobject を拡張)
  • Junit testobject (1 つまたは複数の pageobject を参照)

pageobjects 内で、findBy UI マッピングを変数として定義し、その pageobject 用に記述したさまざまなメソッド内でそれらを参照することにしました。これは非常にうまく機能します。ただし、50 個の個別のハイパーリンクが存在する可能性がある場合に、ページ (およびそれぞれのページオブジェクト) のメソッド設計をどのように処理するかについて、私が頭を悩ませている項目があります。

これまでの私の傾向と設計は、作成したほとんどのページオブジェクトのリンクごとにメソッド (実際にはサービスと考えています) を作成して、@Test で必要なメソッドを呼び出すだけで完了できるようにすることでした。これにより、テストのメンテナンスの可能性がなくなります...私が知っている標準的な方法です。しかし、私は今決めようとしています...ページオブジェクトのリンクごとに1つずつ、50個のメソッドを作成することは理にかなっていますか、それとも私の希望に反して、テスト自体からリンクテキストを渡し、渡されたパラメータを使用してfindByを構築します。

一方では page オブジェクト内のコードはかなり少なくなりますが、他方ではテストがより脆弱になります。これらのリンクは、何百ものテストで参照される可能性があります。

これが私のモデルの簡単な例です:

classname extends baseobject{

   By someLocator = By.linkText("some text");
   By someOtherLocator = By.linkText("some other text");
   By andAnotherLocator = By.id("someid");

   public void someLinkMethod(){
    driver.findElement(someLocator).click();
   }

   public void someOtherLinkMethod(){
    driver.findElement(someOtherLocator).click();
   }

   public void someidMethod(){
    driver.findElement(andAnotherLocator).click();
   }

}

というわけで質問を終わります。このモデルは、テスト設計に最適です。私のサービス (メソッド) は分離されており、簡単に保守できます。しかし、上に示したようにリンクの UI マッピングが 2 つではなく 50 ある場合はどうすればよいでしょうか? 私は次のデザインをいじりましたが、@Test は本当に嫌いです。

public void selectFromLeftBar(String barItem){
  driver.findElement(by.linkText(barItem)).click();
}

どんな考えでも大歓迎です!

4

1 に答える 1

2

ページオブジェクトクラスでそれを行います。理由は次のとおりです。

  1. ページのリンク テキストが変更された場合、コードは何をしますか? リンクが同じことを行う場合でも、各テストに移動してそのテキストを変更する必要があります。

  2. あなたのページがそのリンクを削除するとどうなりますか? つまり、そのリンクを呼び出すたびに見つけなければならないという同じ問題に悩まされています。それがメソッドの場合...メソッドを削除すると、IDE はそれを使用した各インスタンスを通知します。

  3. 最後に、テスト用の標準インターフェースを提供しています。ここで例外を設けるとしたら、ページに他のものを渡すのを妨げるものは何ですか?

補足として、使用する要素のみをマッピングすることをお勧めします。必要になる可能性のあるすべての要素を計画すると、綿毛で満たされた大規模なクラスになり、手にかかる時間が少なくなることがわかりました.

于 2013-08-20T17:53:48.323 に答える