我需要做一个断言来检查'elements.all'中是否存在元素。
我的第一个想法是运行一个for循环并将期望放在里面。不是一个好主意,因为它正在检查列表中的每个项目。所以如果我有30个项目,我最终可能会失败29个。
element.all(by.css(element)).then(function(itemList) {
console.log("Total values in dropdown are: " + itemList.length);
for (i = 0; i < itemList.length; i++) {
itemList[i].getText().then(function(text) {
console.log(text);
expect(text).toEqual('whatever-i-need-to-assert');
});
};
});
为了解决这个问题,我嵌套了一个IF'语句,它将“预先检查”字符串匹配。另一个坏主意,因为如果没有匹配,我的期望永远不会运行,因此,给我一个错误的传递:
element.all(by.css(".item a.gc-exercises-link")).then(function(itemList) {
console.log("Total values in dropdown are: " + itemList.length);
for (i = 0; i < itemList.length; i++) {
itemList[i].getText().then(function(text) {
console.log(text);
if (text == 'BOATLIFT-EXERCISE') {
console.log('Match');
expect(text).toEqual('BOATLIFT-EXERCISE');
} else {
console.log('No Match');
};
});
};
});
显然,我在错误的道路上。有人可以让我知道在使用element.all时如何正确期望'Text'。我只需要证明上述列表中有文字。
谢谢!
答案 0 :(得分:3)
这是一个示例,用于检查是否存在与文本&#34;条款&#34;的链接。在页面中:
bootstrap/app.php
请注意,对于每个元素,量角器需要插入浏览器,这可能会很慢,尤其是在有很多元素的情况下。
更快的解决方案是检查XPath中是否存在至少一个元素,包括预期的文本:
browser.get('https://www.google.co.uk/');
expect(element.all(by.css('a')).getText()).toContain('Terms');
答案 1 :(得分:1)
如果您只想检查它是否存在(并且其他列表项不会干扰),您可以在{。{1}}之前的element.all之后调用数组上的.getText()
并使用{{1} }
.then
或者如果你知道索引:
toContain()
作为旁注:您可以使用element.all(by.css(".item a.gc-exercises-link")).getText().then(function(itemList) {
expect(itemList).toContain('some text');
};
代替创建for循环https://angular.github.io/protractor/#/api?view=ElementArrayFinder.prototype.each
答案 2 :(得分:0)
您可以使用过滤功能。
$$("span").filter(function(elem,index){
return elem.getText().then(function(txt){
return txt === 'text to compare';
});
}).then(function(eleList){ // you get the list of elements containing the text here
console.log(eleList.length);
});