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