"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
在我的一个测试中,我使用 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