Protractor 如何在量角器中处理表格数据

Protractor 如何在量角器中处理表格数据,protractor,Protractor,在量角器中,如何处理重复的内容,比如说表格?例如,给定以下代码,将弹出一个包含3列的表:索引、名称和删除按钮: <table class="table table-striped"> <tr ng-repeat="row in rows | filter : search" ng-class="{'muted':isTemp($index)}"> <td>{{$index+1}}</td> <td>{{row}}</t

在量角器中,如何处理重复的内容,比如说表格?例如,给定以下代码,将弹出一个包含3列的表:
索引
名称
删除按钮

<table  class="table table-striped">
<tr ng-repeat="row in rows | filter : search"  ng-class="{'muted':isTemp($index)}">
  <td>{{$index+1}}</td>
  <td>{{row}}</td>
  <td>
    <button class="btn btn-danger btn-mini" ng-click="deleteRow(row)" ng-hide="isTemp($index)"><i class="icon-trash icon-white"></i></button>
  </td>
</tr>
</table>

{{$index+1}}
{{row}}
在我的测试中,我需要根据给定的名称单击删除按钮。在量角器中找到这个的最好方法是什么

我知道我可以抓取
行.column({{row}})
文本,获取该文本的索引,然后单击
按钮[index]
,但我希望找到一个更优雅的解决方案


例如,在Geb中,您可以将行定位器传递给模块,然后模块将使用列指示符将每行切分。这个解决方案让我盯上了量角器映射法

以下是我在应用程序中如何使用量角器对剑道网格执行类似操作:

我有一个页面对象,它具有以下功能:

// Query all table rows (tr) inside the kendo grid content container
this.getGrid = function () {

    return element.all(by.css('.k-grid-content tr'));
};


// Use the given rows element finder to query for the delete button within the context of the row
this.getDeleteButtonInRow = function (row) {

    return row.element(by.css(".btn.delete"));
};
然后我在测试中使用这些函数,如下所示:

// Verify that a delete button appears in every row of the grid
var grid = pageObj.getGrid();

grid.each(function (row) {

    var deleteButton = downloadsPage.getDeleteButtonInRow(row);

    expect(deleteButton.isDisplayed()).toBe(true);
});

您可以使用映射或过滤器。api如下所示:

  var name = 'some name';

  // This is like element.all(by.css(''))
  return $$('.table.table-stripe tr').filter(function(row) {
    // Get the second column's text.
    return row.$$('td').get(2).getText().then(function(rowName) {
      // Filter rows matching the name you are looking for.
      return rowName === name;
    });
  }).then(function(rows) {
    // This is an array. Find the button in the row and click on it.
    rows[0].$('button').click();
  });

这是我的解决方案,基于@Andres solution,我在页面对象中使用了它:

    this.deleteFriend = function(nameString) {
        return this.rows.filter(function(row) {
            // find the row with the name we want...
            return row.$$('td').get(1).getText().then(function(name) {
                return name === nameString;
            });
        }).then(function(filteredRows) {
            filteredRows[0].$('i.icon-trash').click();
        });
    };

谢谢你,安德烈斯。我差一点就拿到了,但我正在努力学习一些语法。例如,我不喜欢在方法中添加定位器代码。。。但这似乎就是量角器的工作方式?例如,我想使用:
this.nameCol=$$('td');return row.nameCol…
但这似乎不起作用。很抱歉,我试图将其放入注释中,但无法正确设置格式。。。