0

WebDriver と PageFactory では、Java を使用して新しい自動化プロジェクトを実装しており、PageObject を作成するさまざまな方法を試してきました。私たちはいくつかの異なるアイデアで引き裂かれており、窮地に追い込まれないようにしたいと考えています。

WebDriver のドキュメントに記載されているように、新しい PageObject を作成するためのクラス テンプレートと共に、初期化された WebDriver を PageFactory に提供するのが最善ですか?

driver.get(URL);
PageObject page = PageFactory.initElements(driver, PageObject.class);

// elsewhere
class PageObject {
  private WebDriver driver;

  public PageObject(WebDriver driver) {
    this.driver = driver;
    this.validateUrl();
  }

  public void validateUrl() throws Exception {
    if (!driver.getUrl().equals(url)) {
      throw new Exception("URL not valid");
    }
  }
}

しかし、PageObject はおそらくその URL など、それ自体について多くのことを知っているので、Page Object に仕事をさせることはできないのでしょうか?

PageObject page = new PageObject(driver);
page.goToUrl();

// elsewhere
class PageObject {
  private WebDriver driver;
  private String url;

  public PageObject(WebDriver driver) {
    PageFactory.initElements(driver, this);
  }

  public void goToUrl() {
    driver.get(url);
  }
}

PageFactory に初期化だけではなくインスタンス化を実行させる利点はあまりないと思いますが、理由がある場合は、アーキテクトによる標準設定から逸脱したくありません。

ありがとう

4

2 に答える 2

0

Page Factory の利点の 1 つ:

シナリオ:

アプリケーションでは、1 ページに 100 個のフィールドがあります。同じページが 50 回呼び出されます。

このタイプのシナリオがページ オブジェクト手段を使用して実行される場合、各要素が何度も検索されます。性能低下の恐れがあります。

ページ ファクトリ手段を使用して同じシナリオを実行すると、要素は最初だけ検索され、次にキャッシュから取得されます。これにより、パフォーマンスが向上します。

于 2014-01-17T08:50:15.860 に答える
0

最善の方法は、Geb や Thucydides などのフレームワークで PageObjects とその初期化を抽象化することです。これにはGeb + Spock BDDの組み合わせを使用しており、これまでの結果は優れています。

于 2012-04-10T16:47:32.973 に答える