2014-11-04 83 views
1

我不認爲這是完全無限的滾動,但它是我能想到的與我所看到的相比最好的。使用量角器測試無限滾動

無論如何,我們正在使用ng-grid在表格中顯示數據。我們有大約170個項目(行)可以顯示。當我們使用ng-grid時,它會創建一箇中繼器。當我從瀏覽器中檢查這個中繼器時,它限制爲35個項目,並且當你向下滾動列表時,你開始丟失dom中的頂行,並且新行添加在底部等(因此爲什麼我不認爲它嚴格無限滾動,因爲通常只會增加更多行)

就這樣,我清楚無論您向下滾動多遠都會在dom中存在35個'ng-repeat=row in rendered rows'元素。

直到涉及到測試時,這都很棒。我需要獲取列表中每個項目的文本,但使用element.all(by.binding('item.name'))或by.repeater或by.css並不會有幫助,因爲頁面上只存在35個項目。

現在到我的問題,我如何使它,以便我可以抓住所有170項作爲一個對象,然後我可以迭代通過抓取文本和存儲爲數組?

在其他頁面上,我們有少於35個項目iv只是使用綁定來創建一個對象,然後使用async.js遍歷每一行並獲取文本(參見下面的示例,它是修改後的提取我知道它可能是行不通的,因爲它是,它只是給你參考)

  //column data contains only 35 rows, i need all 170.  
     var columnData = element.all(by.binding('row.entity.name')) 
     , colDataTextArr = [] 
      //prevOrderArray gets created elsewhere 
     , prevOrderArray = ['item1', 'item2'... 'item 169', 'item 170'];  

     function(columnData, colDataTextArr, prevOrderArray){ 
     columnData.then(function(colData){ 
      //using async to go over each row 
      async.eachSeries(colData, function(colDataRow, nRow){ 
       //get the text for the current async row 
      colDataRow.getText().then(function(colDataText){ 
       //add each rows text to an array 
       colDataTextArr.push(colDataText); 
       nRow() 
      }); 
      }, function(err){ 
      if(err){ 
       console.log('Failed to process a row') 
      }else{ 
       //perform the expect 
       return expect(colDataTextArr).toEqual(prevOrderArray); 
      } 
      }); 
     }); 
     } 

順便說一句,據我所知,通過170行迭代和存儲陣列中的文字是不是很有效,所以如果有一個更好的方式來做到這一點,我接受建議。

我對JavaScript和Web測試還是比較新的,所以如果我沒有意義,因爲我使用錯誤的術語或任何讓我知道,我會嘗試解釋更清楚。

回答

2

我認爲測試網格中的所有行是矯枉過正。我想這足以測試你獲得了前幾行的值,然後,如果你絕對需要測試所有的元素,使用evaluate()。

http://angular.github.io/protractor/#/api?view=ElementFinder.prototype.evaluate

不幸的是,在API頁面沒有代碼片段,但它會是這個樣子:

// Grab an element where you want to evaluate an angular expression 
element(by.css('grid-selector')).evaluate('rows').then(function(rows){ 
    // This will give you the value of the rows scope variable bound to the element. 
    expect(rows[169].name).toEqual('some name'); 
}); 

讓我知道,如果它的工作原理。

+0

是的,這是我認爲我將不得不辭職的一種,這部分主要是測試排序順序是否正確並相應地改變,它只是我在其他頁面上使用這種邏輯,並且正在有點懶惰,但我認爲你是對的,我會測試,前幾行按照選擇的排序順序是正確的順序,當我來實際檢查api響應我會評估綁定,謝謝。標記爲正確答案,因爲雖然不是我想要實現的理想解決方案。 – Sirk 2014-11-05 09:25:19