5 votes

XPath : Trouver l'élément qui contient le texte X et non Y

J'essaye de trouver un élément web en utilisant XPath en Selenium pour Python. L'élément web doit contenir le texte "Chocolat" mais pas "Dark" .

J'ai essayé cette syntaxe mais je n'ai pas réussi à la faire fonctionner (attention aux paranthèses) :

choco = driver.find_element_by_xpath("//*[text()[contains(., 'Chocolate')] and not[[contains(., 'Dark')]]]")

Voici le même code en utilisant les sauts de ligne et la concaténation pour plus de lisibilité :

choco = driver.find_element_by_xpath((
                                    "//*[text()[contains(., 'Chocolate')]" + 
                                    "and not[[contains(., 'Dark')]]]"
                                    ))

4voto

Andersson Points 31774

Veuillez essayer ce qui suit XPath et faites-moi savoir si des erreurs se produisent :

//*[contains(text(), "Chocolate")][not(contains(text(), "Dark"))]

1voto

Markus Points 16

Voici la syntaxe avec l'utilisation d'un seul jeu de crochets.

Pour les éléments contenant le mot "Chocolat" mais pas "Noir", utilisez :

//*[contains(text(), 'Chocolate') and not(contains(text(), 'Dark'))]

Pour le seul texte des éléments, utilisez :

//text()[contains(., 'Chocolate') and not(contains(., 'Dark'))]

Étant donné le XML suivant :

<doc>
  <e>Dark Chocolate</e>
  <e>Chocolate</e>
</doc>

La première expression se traduit par :

> xpath -e "//*[contains(text(), 'Chocolate') and not(contains(text(), 'Dark'))]" test.xml 
<e>Chocolate</e>

La deuxième expression se traduit par :

> xpath -e "//text()[contains(., 'Chocolate') and not(contains(., 'Dark'))]" test.xml 
Chocolate

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X