当另一个元素等于带有量角器和茉莉花的特定输入时,单击中继器内的一个元素

Clicking an element inside repeater when another element equals specific input with protractor and jasmine

我的HTML结构是这样的:

<li ng-repeat="m in members">
  <div class="col-name">{{m.name}}</div>
  <div class="col-trash">
    <div class="trash-button"></div>
  </div>
</li>

我想做的是使用量角器,当 m.name 等于特定值时单击垃圾桶。

我试过类似的东西:

element.all(by.repeater('m in members')).count().then(function (number) {
  for (var i = 0 ; i < number ; i++) {
    var result = element.all(by.repeater('m in members').row(i));
    result.get(0).element(by.binding('m.name')).getAttribute('value').then(function (name) {
        if (name == 'John') {
            result.get(0).element(by.className('trash-button')).click();
        };
      });
    };
  });

这似乎应该有效,但是,我的函数似乎甚至没有 运行 这个。

我也研究了 promises 和 filters,但它们都没有成功。不断出错。

var array = element.all(by.repeater('m in members'));
array.filter(function (guy) {
  guy.getText().then(function (text) {
    return text == 'John';
  })
}).then(function (selected) {
  selected.element(by.className('trash-button')).click()
}

我只想在查找特定成员列表时点击相应的垃圾箱!

如有任何帮助,我们将不胜感激。

编辑:建议我在找到正确的元素后使用 xpath,这很好,问题是我无法获得过滤器函数让我使用 element(by.xpath...)

如果我尝试:

var array = element.all(by.repeater('m in members'));
array.filter(function (guy) {
  guy.getText().then(function (text) {
    return text == 'John';
  })
}).then(function (selected) {
  selected.element(by.xpath('following-sibling::div/div')).click()
}

我收到错误:

失败:对象没有方法'element'

想通了。遵循 API 参考中的 Protractor 过滤器指南并使用 alecxe 的 xpath 推荐,此代码将在过滤后点击您找到的任何元素。

element.all(by.className('col-name')).filter(function (member, index) {
  return member.getText().then(function (text) {
    return member === 'John';
  });
}).then( function (elements) {
  elements[0].element(by.xpath('following-sibling::div/div/')).click();
});

您可以将 xpath 更改为 select 不同的内容,以防您的 HTML 看起来不像我的。

看来可以不用repeater搜索,直接用by.binding。找到您感兴趣的值后,获取 following sibling 并单击它:

element.all(by.binding('m.name')).then(function(elements) {
    elements.filter(function(guy) {
        guy.getText().then(function (text) {
            return text == 'John';
        })
    }).then(function (m) {
        m.element(by.xpath('following-sibling::div/div')).click();
    });
});

或者,纯 xpath 方法可以是:

 element(by.xpath('//li/div[@class="col-name" and .="John"]/following-sibling::div/div')).click();