【发布时间】:2014-11-05 07:19:52
【问题描述】:
我不认为这是严格意义上的无限滚动,但与我所看到的相比,这是我能想到的最好的。
无论如何,我们正在使用 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 和网络测试还很陌生,所以如果我因为使用了错误的术语或其他任何让我知道的东西而没有意义,我会尝试更清楚地解释。
【问题讨论】:
标签: javascript angularjs protractor ng-grid