Home > front end >  Protractor get the second element of an ocurrence
Protractor get the second element of an ocurrence

Time:06-02

I have an issue and I'm quite new with protractor.

I need to get an element by its text, right now it is not possible to change how the UI is built to use better selectors.

So what I have right now is a span tag with the text Summary inside of it, to retrieve the element using XPath I do the following:

const myElement = element(by.xpath("//span[text()='Summary']"));

That works for the first occurrence when there's only one element on the screen, however, when there are two elements, it fails with the following error:

  • Failed: element not interactable

Possibly because it is trying to access the first element which is toggled. So I tried accessing the element index as I read around with:

element(by.xpath("//span[text()='Summary']")[1]);

And got the following error:

Failed: Invalid locator

I read somewhere that the values start on 1 and not on 0 so I tried with:

element(by.xpath("//span[text()='Summary']")[2]);

Yet, I'm still getting the same error:

Failed: Invalid locator

Is there a way I can get to these second element?

CodePudding user response:

When you are using list slicing then there exist more then one elements. So you can try to use elements instead of element

element(by.xpath("(//span[text()='Summary'])[2]");

OR

element(by.xpath("(//span[contains(text(),'Summary')])[2]");

CodePudding user response:

You can try this XPath, it has additional brackets, you have been almost there.

(//span[text()='Summary'])[2]

Reference: XPath query to get nth instance of an element

  • Related