How to select specified node within Xpath node sets by index with Selenium? How to select specified node within Xpath node sets by index with Selenium? selenium selenium

How to select specified node within Xpath node sets by index with Selenium?


This is a FAQ:

//someName[3]

means: all someName elements in the document, that are the third someName child of their parent -- there may be many such elements.

What you want is exactly the 3rd someName element:

(//someName)[3]

Explanation: the [] has a higher precedence (priority) than //. Remember always to put expressions of the type //someName in brackets when you need to specify the Nth node of their selected node-list.


There is no i in XPath.

Either you use literal numbers: //img[@title='Modify'][1]

Or you build the expression string dynamically: '//img[@title='Modify']['+i+']' (but keep in mind that dynamic XPath expressions do not work from within XSLT).

Or does XPath support specified selection of nodes which are not under same parent node?

Yes: (//img[@title='Modify'])[13]


This //img[@title='Modify'][i] means "any <img> with a title of 'Modify' and a child element named <i>."


There is no i in xpath is not entirely true. You can still use the count() to find the index.

Consider the following page

<html>	<head>		<title>HTML Sample table</title>	</head>	<style>	table, td, th {		border: 1px solid black;		font-size: 15px;		font-family: Trebuchet MS, sans-serif;	}	table {		border-collapse: collapse;		width: 100%;	}	th, td {		text-align: left;		padding: 8px;	}	tr:nth-child(even){background-color: #f2f2f2}	th {		background-color: #4CAF50;		color: white;	}	</style>	<body>	<table>		<thead>			<tr>				<th>Heading 1</th>				<th>Heading 2</th>				<th>Heading 3</th>				<th>Heading 4</th>				<th>Heading 5</th>				<th>Heading 6</th>			</tr>		</thead>		<tbody>			<tr>				<td>Data row 1 col 1</td>				<td>Data row 1 col 2</td>				<td>Data row 1 col 3</td>				<td>Data row 1 col 4</td>				<td>Data row 1 col 5</td>				<td>Data row 1 col 6</td>			</tr>			<tr>				<td>Data row 2 col 1</td>				<td>Data row 2 col 2</td>				<td>Data row 2 col 3</td>				<td>Data row 2 col 4</td>				<td>Data row 2 col 5</td>				<td>Data row 2 col 6</td>			</tr>			<tr>				<td>Data row 3 col 1</td>				<td>Data row 3 col 2</td>				<td>Data row 3 col 3</td>				<td>Data row 3 col 4</td>				<td>Data row 3 col 5</td>				<td>Data row 3 col 6</td>			</tr>			<tr>				<td>Data row 4 col 1</td>				<td>Data row 4 col 2</td>				<td>Data row 4 col 3</td>				<td>Data row 4 col 4</td>				<td>Data row 4 col 5</td>				<td>Data row 4 col 6</td>			</tr>			<tr>				<td>Data row 5 col 1</td>				<td>Data row 5 col 2</td>				<td>Data row 5 col 3</td>				<td>Data row 5 col 4</td>				<td>Data row 5 col 5</td>				<td>Data row 5 col 6</td>			</tr>			<tr>				<td><button>Modify</button></td>				<td><button>Modify</button></td>				<td><button>Modify</button></td>				<td><button>Modify</button></td>				<td><button>Modify</button></td>				<td><button>Modify</button></td>			</tr>		</tbody>	</table>	</br>	<table>		<thead>			<tr>				<th>Heading 7</th>				<th>Heading 8</th>				<th>Heading 9</th>				<th>Heading 10</th>				<th>Heading 11</th>				<th>Heading 12</th>			</tr>		</thead>		<tbody>			<tr>				<td>Data row 1 col 1</td>				<td>Data row 1 col 2</td>				<td>Data row 1 col 3</td>				<td>Data row 1 col 4</td>				<td>Data row 1 col 5</td>				<td>Data row 1 col 6</td>			</tr>			<tr>				<td>Data row 2 col 1</td>				<td>Data row 2 col 2</td>				<td>Data row 2 col 3</td>				<td>Data row 2 col 4</td>				<td>Data row 2 col 5</td>				<td>Data row 2 col 6</td>			</tr>			<tr>				<td>Data row 3 col 1</td>				<td>Data row 3 col 2</td>				<td>Data row 3 col 3</td>				<td>Data row 3 col 4</td>				<td>Data row 3 col 5</td>				<td>Data row 3 col 6</td>			</tr>			<tr>				<td>Data row 4 col 1</td>				<td>Data row 4 col 2</td>				<td>Data row 4 col 3</td>				<td>Data row 4 col 4</td>				<td>Data row 4 col 5</td>				<td>Data row 4 col 6</td>			</tr>			<tr>				<td>Data row 5 col 1</td>				<td>Data row 5 col 2</td>				<td>Data row 5 col 3</td>				<td>Data row 5 col 4</td>				<td>Data row 5 col 5</td>				<td>Data row 5 col 6</td>			</tr>			<tr>				<td><button>Modify</button></td>				<td><button>Modify</button></td>				<td><button>Modify</button></td>				<td><button>Modify</button></td>				<td><button>Modify</button></td>				<td><button>Modify</button></td>			</tr>		</tbody>	</table>	</body></html>