请需要量角器的快速帮助。
我需要获取不同于0的第一个单元格文本,然后从第0列和第4列的行数据中获取
在这种情况下,我可以从第4列中正确获取第一个值
var resultsTableSummary = element(by.id('lvTable')); //Results table
var rows = resultsTableSummary.all(by.tagName("tr")); // get rows
var cells = rows.all(by.tagName("td")); // get cell values
cells.get(4).getText().then(function(result)
{
if (result > 0)
{
console.log('for Result value '+ result);
}
})
但是我想知道两件事:
1-万一第一行没有值,如何移动到下一个tr(行)?我试图用元素创建一个数组,但是我没有那么成功,请问有什么想法吗?
2-如何从该承诺中返回值?该功能是从第4列获取值并在屏幕上为我显示,但我想在代码的后续步骤中使用它
谢谢!
答案 0 :(得分:1)
我建议仅保留行元素并根据您的需要过滤它们。这样一来,您将始终可以访问每一行,因为您总是在处理每一行。如下:
getFirstValidRowData(rows: ElementArrayFinder): promise.Promise<string[]> {
return rows.filter(function (row) {
// filter rows by its values. IF one value is greater than 0 row is valid
return row.all(by.tagName('td')).filter(function (cell) {
// filter a row by valid cells
return cell.getText().then(function (text) {
return parseInt(text) > 0;
});
// if there are cells found row is valid
}).then(function (cells) {
return cells.length > 0;
});
// take valid row and get cells 1 and 4
}).first().all(by.css('td')).filter(function (cell, index) {
return index === 0 || index === 3;
// return values of these cells
}).map(function (cell) {
return cell.getText();
});
}
在测试中,您可以执行以下操作:
it('should have one valid row', async function() {
var resultsTableSummary = element(by.id('lvTable')); //Results table
var rows = resultsTableSummary.all(by.tagName("tr"));
var validRowsData = await getFirstValidRowData(rows);
// do whatever you want with your data from cell 1-4
});
我没有对此进行测试,但是从语法上讲这是正确的。 这应该符合您的需求。