Comment sélectionner le noeud spécifié dans les ensembles de noeuds Xpath par index avec Selenium?

J’écris un test de Selenium. Et voici l’expression xpath que j’utilise pour faire correspondre tous les boutons “Modifier” dans un tableau de données.

//img[@title='Modify'] 

Ma question est la suivante: comment puis-je visiter les ensembles de nœuds correspondants par index? J’ai essayé avec

 //img[@title='Modify'][i] 

et

 //img[@title='Modify' and position() = i] 

Mais ni l’un ni l’autre ne fonctionne. J’ai aussi essayé avec XPath checker (One firefox extension). Il y a au total 13 correspondances trouvées, alors je ne sais absolument pas comment je vais en sélectionner une. Ou XPath supporte-t-il une sélection spécifiée de nœuds qui ne sont pas sous le même nœud parent?

Ceci est une FAQ :

 //someName[3] 

signifie : tous les éléments someName dans le document, qui sont le troisième someName de leur parent – il peut y avoir beaucoup de tels éléments.

Ce que vous voulez, c’est exactement le 3ème élément someName :

 (//someName)[3] 

Explication : le [] a une priorité supérieure (priorité) à // . N’oubliez pas de toujours mettre des expressions du type //someName entre crochets lorsque vous devez spécifier le Nième nœud de la liste de nœuds sélectionnée.

Il n’y a pas de i dans XPath.

Soit vous utilisez des nombres littéraux: //img[@title='Modify'][1]

Ou vous construisez la chaîne d’expression de manière dynamic: '//img[@title='Modify']['+i+']' (mais gardez à l’esprit que les expressions XPath dynamics ne fonctionnent pas dans XSLT).

Ou XPath prend-il en charge une sélection spécifiée de nœuds qui ne sont pas sous le même nœud parent?

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


Cette //img[@title='Modify'][i] signifie “tout avec un titre de” Modifier “et un élément enfant nommé .”

 //img[@title='Modify'][i] 

est court pour

 /descendant-or-self::node()/img[@title='Modify'][i] 

retourne donc le iéme nœud sous le même nœud parent.

Tu veux

 /descendant-or-self::img[@title='Modify'][i] 

(// * [@ atsortingbute = ‘value’]) [index] pour trouver la cible de l’élément tout en y trouvant plusieurs correspondances

Il n’y a pas de i dans xpath n’est pas tout à fait vrai. Vous pouvez toujours utiliser le count() pour trouver l’index.

Considérez la page suivante

    
Heading 1 Heading 2 Heading 3 Heading 4 Heading 5 Heading 6
Data row 1 col 1 Data row 1 col 2 Data row 1 col 3 Data row 1 col 4 Data row 1 col 5 Data row 1 col 6
Data row 2 col 1 Data row 2 col 2 Data row 2 col 3 Data row 2 col 4 Data row 2 col 5 Data row 2 col 6
Data row 3 col 1 Data row 3 col 2 Data row 3 col 3 Data row 3 col 4 Data row 3 col 5 Data row 3 col 6
Data row 4 col 1 Data row 4 col 2 Data row 4 col 3 Data row 4 col 4 Data row 4 col 5 Data row 4 col 6
Data row 5 col 1 Data row 5 col 2 Data row 5 col 3 Data row 5 col 4 Data row 5 col 5 Data row 5 col 6
Heading 7 Heading 8 Heading 9 Heading 10 Heading 11 Heading 12
Data row 1 col 1 Data row 1 col 2 Data row 1 col 3 Data row 1 col 4 Data row 1 col 5 Data row 1 col 6
Data row 2 col 1 Data row 2 col 2 Data row 2 col 3 Data row 2 col 4 Data row 2 col 5 Data row 2 col 6
Data row 3 col 1 Data row 3 col 2 Data row 3 col 3 Data row 3 col 4 Data row 3 col 5 Data row 3 col 6
Data row 4 col 1 Data row 4 col 2 Data row 4 col 3 Data row 4 col 4 Data row 4 col 5 Data row 4 col 6
Data row 5 col 1 Data row 5 col 2 Data row 5 col 3 Data row 5 col 4 Data row 5 col 5 Data row 5 col 6