2

Basically I am searching for a syntax that I can use to select an element that shares the same name, properties and attributes.

I was thinking of selecting them via Index. (Unfortunately Xpath wont work since it's a dynamic element.)

So, I have a page where the element Add is shown twice, both of them adds/throws a different value. But both of them has the same ID, Attributes and Name. In my test I need to select the first Add and then the other.

${add attributes row}          //*[@data-bind="click: function() { 
$parents[1].addItem($parents[1]
    .attributes()[$parentContext.$index()]) }", index=1]


${add attributes row_2}     //*[@data-bind="click: function() { 
$parents[1].addItem($parents[1]
    .attributes()[$parentContext.$index()]) }", index=2]

Is there a way to select them by Index?

Steve Benett
  • 12,843
  • 7
  • 59
  • 79

1 Answers1

2

If you find an XPath that selects both of them, you can apply a predicate to the entire XPath by putting the XPath in parentheses. For instance, //a selects all anchors throughout the DOM. (//a)[4] selects the 4th anchor found in the DOM. You can also use the last and position functions to select relative indices such as the penultimate anchor (//a)[last()-1]

Try a locator like this for the 1st:

xpath=(//*[@data-bind="click: function() {$parents[1].addItem($parents[1].attributes()[$parentContext.$index()]) }"])[1]

Try a locator like this for the 2nd:

xpath=(//*[@data-bind="click: function() {$parents[1].addItem($parents[1].attributes()[$parentContext.$index()]) }"])[2]

See this related question

Community
  • 1
  • 1
ombre42
  • 2,344
  • 15
  • 21