2017-08-02 6 views
0

私はNightwatchでグリッドのページ付けをテストするためのテストを書いています。私は、テストスイートのメンテナンスを容易にするために、ページオブジェクトと要素セレクタを使用しています。しかし、私はコマンド内で要素セレクタを使うことに限界があります。次のコードはエラーなしで実行されます。私は.getTextコマンドの要素のセレクターを使用していますNightwatchどのようにコマンド内で要素セレクタを表示させることができますか?

pagination() { 
 
     var lastPageNum; 
 
     var currentPageNum; 
 
     var newPageNum 
 
     return this 
 
     .getText('@pageNum1', function(result) { 
 
     currentPageNum = parseInt(result.value); 
 
     console.log('Current Page Number = ' + currentPageNum); 
 
     }) 
 
     .getText('@pageNum2', function(result) { 
 
     lastPageNum = parseInt(result.value); 
 
     console.log('last Page Number = ' + lastPageNum); 
 
     if (lastPageNum >= 2) { 
 
      this.useXpath() 
 
      .waitForElementVisible('//*[@id="borderLayout_eRootPanel"]/div[2]/div/div/span[2]/button[3]', 3000)    
 
      .click('//*[@id="borderLayout_eRootPanel"]/div[2]/div/div/span[2]/button[3]') 
 
      .getText('//*[@id="borderLayout_eRootPanel"]/div[2]/div/div/span[2]/span[1]', function(result) { 
 
       newPageNum = parseInt(result.value); 
 
       console.log('New Page = ' + newPageNum); 
 
       this.assert.equal(newPageNum, currentPageNum + 1, "Assert pagination to Next page passed."); 
 
      }) 
 
     } else { 
 
      console.log('Not enough rows exist in grid to test pagination, pages = ' + lastPageNum) 
 
     } 
 
     }) 
 
    },

注意。ここで私が使用していセレクタは、次のとおりです。

 pageNum1: { 
 
     selector: '//*[@id="borderLayout_eRootPanel"]/div[2]/div/div/span[2]/span[1]', 
 
     locateStrategy: 'xpath' 
 
     }, 
 

 
     pageNum2: { 
 
     selector: '//*[@id="borderLayout_eRootPanel"]/div[2]/div/div/span[2]/span[2]', 
 
     locateStrategy: 'xpath' 
 
     },

これまでのところ、とても良いです。私が実行している問題は、.getTextコマンド内のxpath要素を要素セレクタで置き換えるときです。ここで私は上記を交換しようとしていたコードされています

pagination() { 
 
     var lastPageNum; 
 
     var currentPageNum; 
 
     var newPageNum 
 
     return this 
 
     .getText('@pageNum1', function(result) { 
 
     currentPageNum = parseInt(result.value); 
 
     console.log('Current Page Number = ' + currentPageNum); 
 
     }) 
 
     .getText('@pageNum2', function(result) { 
 
     lastPageNum = parseInt(result.value); 
 
     console.log('last Page Number = ' + lastPageNum); 
 
     if (lastPageNum >= 2) { 
 
      this.useXpath() 
 
      .waitForElementVisible('@nextPageButton', 3000)    
 
      .click('@nextPageButton') 
 
      .getText('@pageNum1', function(result) { 
 
       newPageNum = parseInt(result.value); 
 
       console.log('New Page = ' + newPageNum); 
 
       this.assert.equal(newPageNum, currentPageNum + 1, "Assert pagination to Next page passed."); 
 
      }) 
 
     } else { 
 
      console.log('Not enough rows exist in grid to test pagination, pages = ' + lastPageNum) 
 
     } 
 
     }) 
 
    },

そして、ここでは、私が使用しています追加要素セレクターです:

 nextPageButton: { 
 
     selector: '//*[@id="borderLayout_eRootPanel"]/div[2]/div/div/span[2]/button[3]', 
 
     locateStrategy: 'xpath' 
 
     },

.getTextコマンドのxpathを次のように置き換えてテストを実行しようとすると要素セレクタ、テストは次のエラーで失敗します。要素セレクタは.getTextコマンド関数内で表示されるように取得する方法は

Timed out while waiting for element <@NextPageButton> to be present for 3000 milliseconds. - expected "visible" but got: "not found" 

ありますか?

答えて

0

コマンド内で実際にセレクタを使用する方法はないようですので、最近使用した回避策を掲載します。それはかなり簡単です:ページオブジェクトで、私はセレクタとして使用したいWeb要素を含む定数を宣言しています。これは、ページオブジェクトメソッドを保持するために使用する定数または変数を宣言する前に、ページオブジェクトの先頭にある必要があります。私が上に投稿した元のスニペットには、ページオブジェクト全体ではなくメソッドが含まれていますが、その前に宣言を行う必要があります。ここでは、上記の方法を含むページオブジェクトの例である:

const nPageButton = '//*[@id="borderLayout_eRootPanel"]/div[2]/div/div/span[2]/button[3]'; 
const gridComands = { 
    //page object methods go here 
} 

あなたは定数としてウェブ要素を宣言したら、あなたの要素のセレクターを構築する場合、あなたはその定数を使用することができます。

nextPageButton: { 
    selector: nPageButton, 
    locateStrategy: 'xpath' 
    }, 

これにより、セレクタが提供する機能の少しを犠牲にしながら、メンテナンスが容易になります。セレクタが機能しないときは、ページオブジェクト内の定数を使用することができます。ロケート戦略を定義するユーティリティが失われます。したがって、Web要素にxpathsを使用する場合は、メソッドで.useXpath()を使用する必要があります。 。

関連する問題