Reputation: 474271
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
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
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
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