"找到定位器的多个元素"警告

时间:2015-02-11 21:13:40

标签: angularjs testing warnings protractor end-to-end

在我的一项测试中,我使用CSS selector定位元素:

element(by.css("ul.nav button"))

有多个匹配查询的元素,但是,因为我只需要第一个元素,所以我可以使用选择器。

问题是,protractor会发出警告:

  

警告 - 找到多个定位器元素   By.cssSelector(" ul.nav button") - 将使用第一个结果

是否可以取消警告?换句话说,我怎样才能让protractor知道我已经意识到问题并且不想再显示警告?


使用protractor开发版本(直接从主分支安装)。

4 个答案:

答案 0 :(得分:55)

请改为尝试:

element.all(by.css("ul.nav button")).first()

基本上,这告诉Protractor你已经知道有多个元素,而你只想要第一个元素(就像你在问题中所说的那样)。

答案 1 :(得分:7)

警告是有原因的。您已将测试与数据紧密联系在一起。选择器太笼统了。你应该更具体。通过说element(by.css("ul.nav button:nth-child(1)"))或以不同的方式确定搜索范围。量角器测试不应该是测试风格或dom,它们应该是测试业务逻辑。

答案 2 :(得分:2)

不要低估 xpath。你可以用它解决成千上万的问题,包括这个

let elem = element(by.xpath('(//div//a)[3]'))

您可以指定要使用的元素数量。请记住,数字从 1 开始,而不是 js 中通常的 0

答案 3 :(得分:0)

少代码:

$$("ul.nav button").first()