Search code examples
seleniumtestingxpathautomated-testsprotractor

Protractor get the second element of an ocurrence


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?


Solution

  • 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]");