我希望通过其中一个属性(索引可以更改)的文本在量角器中获取ng-repeat内的特定元素。
HTML
receiveTimeout
据我所知,如果我知道我想要的索引,请说2,我可以这样做:
<div ng-repeat="item in items">
<span class="item-name">
{{item.name}}
</span>
<span class="item-other">
{{item.other}}
</span>
</div>
但在这个特定情况下,我正在寻找具有特定文本(item.name)的“项目中的项目”,例如“apple”。如上所述,索引每次都会有所不同。关于如何解决这个问题的任何想法?
答案 0 :(得分:0)
function elementThere(specificText, boolShouldBeThere){
var isThere = '';
element.all(by.repeater('item in items')).each(function (theElement, index) {
theElement.getText().then(function (text) {
// Uncomment the next line to test the function
//console.log(text + ' ?= ' + specificText);
if(text.indexOf(specificText) != -1){
element.all(by.repeater('item in items')).get(index).click();
isThere = isThere.concat('|');
}
});
});
browser.driver.sleep(0).then(function () {
expect(isThere.indexOf('|') != -1).toBe(boolShouldBeThere);
});
}
it('should contain the desired text', function () {
elementThere('apple', true);
}
这是否符合您的需求?
答案 1 :(得分:0)
public items = element.all(by.binding('item.name'))
getItemByName(expectedName) {
return this.items.filter((currentItem) => {
return currentItem.getText().then((currentItemText) => {
return expectedName === currentItemText;
});
}).first();
}
并调用this.getItemByName('Item 1')
之类的方法。将Item 1
替换为预期的字符串。
答案 2 :(得分:0)
我能够通过简化@ bdf7kt建议的解决方案来解决这个问题:
element.all(by.repeater('item in items')).each(function(elem) {
elem.getText().then(function(text) {
if(text.indexOf('apple') != -1) {
//do something with elem
}
});
});
此外,这个特殊的解决方案对我的用例不起作用,但我肯定会为其他人工作:
var item = element(by.cssContainingText('.item-name', 'apple'));
//do something with item