J'ai besoin d'un peu d'aide pour rechercher un texte exact à l'aide de xpath dans webDriver.
Supposons que j'ai le code HTML comme suit ..
<html><body>
<table>
<tr>
<td><button>abcd</button></td>
<td><button>abc</button></td>
</tr>
</table>
</body></html>
Maintenant, je veux cliquer sur le bouton "ABC"
J'ai utilisé xpath comme //button[contains(text(),'abc')]
mais il fonctionne toujours sur le bouton "abcd" car il contient également le texte "abc". À cet égard, j'ai besoin d'un prédicat ou d'une autre procédure permettant de rechercher du texte exact au lieu de contenir du texte.
J'ai également essayé avec //button[matches(text(),'abc')]
, //button[matches($string,'abc')]
, //button[Text='abc')]
, //button[.='abc')]
et bien d'autres, mais aucune de ces solutions n'a permis d'identifier le bouton "abc".
Je ne sais pas s'il y a un problème avec ma version de xpath car je ne suis pas au courant de la version. Mais j'utilise Java 1.6 JDK.
Bien que mon scénario exact ne soit pas l'exemple présenté, une logique similaire doit être appliquée.
Par conséquent, toute aide ou suggestion serait très appréciée.
Je voudrais utiliser la prochaine xpath //button[text()='abc']
. Vous avez mentionné la fonction text()
mais je ne suis pas sûr que la syntaxe soit correcte. Aussi, vous avez essayé d'utiliser contains()
- il recherche le texte partiel et WebDriver obtient le premier élément trouvé. Je votre cas c'est <button>abcd</button>
bouton
//button[.="abc"]
Le point devant l'opérateur d'égalité fera la comparaison de texte. Un autre exemple est /PROJECT[.="MyProject"]
tiré du xPath Java tutorial .
Essayez avec ends-with au lieu de contient. Si les boutons ne possèdent pas d'attributs uniques, vous pouvez également ajouter la hiérarchie parentale. Comme // table/tr/td [1].
Pour trouver l'élément 'abcd', vous pouvez simplement utiliser:
//button[contains(text(),'abcd')]
Pour trouver 'abc', utilisez la fonction normalize-space () qui nettoiera votre texte à des fins de comparaison.
//button[normalize-space(text())='abc']