“More than one element found for locator” warning

2019-01-25 02:58发布

问题:

In one of my tests, I'm locating an element using a CSS selector:

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

There is more than one element matching the query, but, since I need only the first one, I'm okay with the selector.

The problem is, protractor throws a warning:

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

Is it possible to suppress the warning? In other words, how can I let protractor know that I'm aware of the problem and don't want the warning to be shown anymore?


Using protractor development version (installed directly from the master branch).

回答1:

Try this instead:

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

Basically, this tells Protractor that you already know there's more than one element, and you just want the first one (like you said in your question).



回答2:

The warning is there for a reason. You've tied your tests too closely to your data. The selector is too general & you should be more specific. Either by saying element(by.css("ul.nav button:nth-child(1)")) or scoping your search differently. Protractor tests aren't supposed to be testing style or dom, they're supposed to be testing business logic.



回答3:

Less code:

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