alecxe
alecxe

Reputation: 474271

"More than one element found for locator" warning

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).

Upvotes: 37

Views: 24130

Answers (4)

Sergey Pleshakov
Sergey Pleshakov

Reputation: 8978

Do not underestimate xpath. You can solve thousands of problems with it, including this one

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

You can specify the number of element to use. Keep in mind the numbers start from 1, not 0 as usually in js

Upvotes: 2

Jon
Jon

Reputation: 107

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.

Upvotes: 6

Yago
Yago

Reputation: 454

Less code:

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

Upvotes: 4

Isaac Lyman
Isaac Lyman

Reputation: 2201

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).

Upvotes: 68

Related Questions