angularjs - 当另一个元素等于 Protractor 和 Jasmine 的特定输入时,单击中继器内的一个元素

标签 angularjs jasmine repeater protractor angularjs-e2e

我的 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>

我想要做的是使用 Protractor ,当 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();
        };
      });
    };
  });

这看起来应该可以工作,但是,似乎我的函数甚至没有运行它。

我还研究了 promise 和过滤器,但也没有成功。不断出现错误。

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()
}

我想做的就是在查找特定的成员(member)列表时点击相应的垃圾桶!

任何帮助将不胜感激。

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

如果我尝试:

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()
}

我收到错误:

失败:对象没有方法“元素”

想通了。遵循 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 以选择不同的内容,以防您的 HTML 与我的不同。

最佳答案

看来你可以避免通过repeater搜索,直接使用by.binding。找到您感兴趣的值后,获取以下同级并单击它:

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();

关于angularjs - 当另一个元素等于 Protractor 和 Jasmine 的特定输入时,单击中继器内的一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28033981/

相关文章:

unit-testing - Angular 2 RC4 : Unit test component that has dependency injection a service that has its own

具有 ControlValueAccessor 测试的 Angular 2(4) 组件

c# - 在 asp.net 转发器中找不到控件?

asp.net - 如何为中继器中的LinkBut​​ton执行AsyncPostBackTrigger

javascript - 如何在 Angular js 中验证文本框

angularjs - 找不到 URL : http://localhost/WebApi2/api/hero 的 Angular2 404

javascript - 从服务内部将 Angular 指令插入 DOM

unit-testing - 在angularjs中测试指令时如何模拟模糊?

javascript - 与 DatePicker 和 AngularJS 的冲突

asp.net - 如何从嵌套转发器控件访问 linq group-by 查询的组?