"More than one element found for locator" 警告

"More than one element found for locator" warning

在我的一个测试中,我使用 CSS selector:

定位一个元素
element(by.css("ul.nav button"))

有多个元素匹配查询,但是,因为我只需要第一个,所以我对选择器没问题。

问题是,protractor 抛出警告:

WARNING - more than one element found for locator By.cssSelector("ul.nav button") - the first result will be used

是否可以抑制警告?换句话说,我怎样才能让 protractor 知道我知道这个问题并且不想再显示警告?


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

试试这个:

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

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

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

更少的代码:

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

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

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

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

中的 0