4

現在、社内で優れたテスト フレームの構築に取り組んでいます。これは中規模から大規模の Web アプリケーション用で、おそらく数十ページです。現在、主に WebDriver Selenium UI ベースのテストを作成しています。

私たちはいくつかのコーディング標準を決定しようとしています。私たちが話し合っていることの 1 つは、(ページが同じであっても) 常に PO を返すページ オブジェクト (PO) を使用するかどうか、現在のページを離れたときにのみ PO を返すかどうかです。新しいもの、またはPOを返さないことさえあります。私は常に、PO を返すことが PO デザイン パターンの重要な機能であると考えてきましたが、これについては間違っている可能性があります。

基本的に、次のパターンのいずれかを決定しようとしています。

class SomePage {
     // constructor
     public SomePage(Driver) { //... } 

     // always return a page object
     public SomePage fillInTextField(String val){
          // details
          return new SomePage(driver);

     // only return a PO if it's a different page
     public void fillInTextField(String val){
          // details
          return;

     }

一方が他方よりも好ましいですか?

4

4 に答える 4

3

それはスタイルの問題です。

使用:

class SomePage {
    ...
    // always return a page object
    public SomePage fillInTextField(String val){
         ...
         return this; // Note: NOT "new SomePage(driver)"
    }
}

次のようなものを書くことができます:

SomePage somePage = HoweverYouGetASomePage();
NextPage nextPage = somePage.fillInTextField1("value1").fillInTextField2("value2").submit();

使用:

class SomePage {
    ...
    // only return a PO if it's a different page
    public void fillInTextField(String val){
        ...
        return;
    }
}

次のようなものを書くことを強制します:

SomePage somePage = HoweverYouGetASomePage();
somePage.fillInTextField1("value1");
somePage.fillInTextField2("value2");
NextPage nextPage = somePage.submit();

どちらが好きかは、どちらが好きかによって異なります。しかし、前者を書きたい場合は、常にページ オブジェクトを返す必要があります。

于 2013-08-01T21:39:30.400 に答える
1

簡単な答えは、同じページにいて、ページの状態が変化していない場合、同じページ オブジェクトを返さないことです。あるページから別のページに移動している場合、新しいページ オブジェクトが返されます。基本的に何も変更されていないため、ページからテキストを取得したり、選択したオプションを取得したりする場合に、同じオブジェクトを返すことは意味がありません。ページの状態が変化している場合は、新しいページ オブジェクトを返す必要があります。そうしないと、StaleElementException. google docsで、LoginPage に気付いた場合getErrorMessage()、同じページ オブジェクトを返さない

元の質問とは少し異なりますが、まだ標準化を行っておらず、標準化の過程にある場合は、PageFactoryを使用することをお勧めします。

于 2013-07-31T20:57:53.393 に答える