量角器-如何跳到网格中的下一行并返回找到的值

时间:2018-07-20 06:53:13

标签: javascript protractor

请需要量角器的快速帮助。

我需要获取不同于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列获取值并在屏幕上为我显示,但我想在代码的后续步骤中使用它

谢谢!

1 个答案:

答案 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
});

我没有对此进行测试,但是从语法上讲这是正确的。 这应该符合您的需求。