问题与此问题"More than one element found for locator" warning非常相似:我有ng-repeat
,其中有两个div
s,其上有ng-if
,所以只有一个div
显示{1}}。 div
中的每个ng-repeat
都具有相同的等级login__cell-link
。
我需要检查此div
中的值,因此我使用
element.all(by.repeater('item in array')).then( allElements => {
allElements[i].element(by.className('login__cell-link')).getText();
});
问题是警告:
警告 - 为定位器By(css选择器,.login__cell-link)找到多个元素 - 将使用第一个结果
此答案https://stackoverflow.com/a/28464809/4753661表示要使用:element.all(by.css("ul.nav button")).first()
但我得到错误:
[TypeError:allElements [i] .element.all不是函数]
如何链接element
和element.all
,或者在这种情况下是否有更好的解决方案来检查一个div
?谢谢。
答案 0 :(得分:10)
链接时使用.all()
而不是.element.all()
:
allElements[i].all(by.className('login__cell-link')).first().getText();
顺便说一下,您不需要在此明确解决承诺,并且可以将其链接到一起:
element
.all(by.repeater('item in array'))
.get(i)
.all(by.className('login__cell-link'))
.first()
.getText();
无耻的自我推销:如果您想尽早发现此类错误,可以将ESLint
静态代码分析工具与eslint-plugin-protractor
correct-chaining
rule一起使用。< / p>