J'utilise XPather navigateur pour vérifier mes expressions XPATH sur une page HTML.
Mon objectif final est d'utiliser ces expressions dans Selenium pour tester mes interfaces utilisateur.
J'ai un fichier HTML avec un contenu similaire à celui-ci:
<tr> <td> abc </td> <td> & nbsp; </td> </tr>
Je souhaite sélectionner un nœud avec un texte contenant la chaîne "
".
Avec une chaîne normale comme "abc", il n'y a pas de problème. J'utilise un XPATH similaire à //td[text()="abc"]
.
Quand j'essaye avec un XPATH comme //td[text()=" "]
ça ne renvoie rien. Existe-t-il une règle spéciale concernant les textes avec " &
"?
Réponses:
Il semble qu'OpenQA , les gars derrière Selenium, ont déjà résolu ce problème. Ils ont défini certaines variables pour correspondre explicitement aux espaces. Dans mon cas, je dois utiliser un XPATH similaire à
//td[text()="${nbsp}"]
.J'ai reproduit ici le texte d'OpenQA concernant ce problème (trouvé ici ):
la source
\u00a0
. Ce qui a fonctionné pour moi a été de taper un espace insécable, sur macAlt+Shift+Space
. La recherche Web ditAlt+0160
sur Windows.J'ai trouvé que je pouvais faire la correspondance lorsque j'entrais un espace insécable codé en dur (U + 00A0) en tapant Alt + 0160 sous Windows entre les deux guillemets ...
travaillé pour moi avec le personnage spécial.
D'après ce que j'ai compris, le standard XPath 1.0 ne gère pas les caractères Unicode qui s'échappent. Il semble y avoir des fonctions pour cela dans XPath 2.0 mais il semble que Firefox ne le supporte pas (ou j'ai mal compris quelque chose). Vous avez donc à voir avec la page de codes locale. Moche, je sais.
En fait, il semble que la norme s'appuie sur le langage de programmation utilisant XPath pour fournir la séquence d'échappement Unicode correcte ... Donc, d'une manière ou d'une autre, j'ai fait la bonne chose.
la source
$col = $xpath->query("//p[text()=\"\xC2\xA0\"]");
Essayez d'utiliser l'entité décimale au
 
lieu de l'entité nommée. Si cela ne fonctionne pas, vous devriez pouvoir utiliser simplement le caractère Unicode pour un espace insécable au lieu de l'
entité.(Remarque: je n'ai pas essayé ceci dans XPather, mais je l'ai essayé dans Oxygen.)
la source
Gardez à l' esprit qu'un processeur XML conforme aux normes aura remplacé toutes les références d'entités autres que les standards de cinq XML (
&
,>
,<
,'
,"
) avec le caractère correspondant dans le codage cible au moment où les expressions XPath sont évaluées. Compte tenu de ce comportement, les suggestions de PhiLho et de jsulak sont la voie à suivre si vous souhaitez travailler avec des outils XML. Lorsque vous entrez 
dans l'expression XPath, elle doit être convertie dans la séquence d'octets correspondante avant que l'expression XPath ne soit appliquée.la source
Je ne peux pas obtenir de correspondance avec Xpather, mais ce qui suit a fonctionné pour moi avec des fichiers XML et XSL simples dans le bloc-notes XML de Microsoft:
La valeur renvoyée est 1, qui est la valeur correcte dans mon scénario de test.
Cependant, j'ai dû déclarer nbsp en tant qu'entité dans mon XML et XSL en utilisant ce qui suit:
Je ne sais pas si cela vous aide, mais j'ai pu réellement trouver nbsp en utilisant une expression XPath.
Modifier: mon exemple de code contient en fait les caractères «& nbsp;» mais la surbrillance de la syntaxe JavaScript le convertit en caractère d'espace. Ne soyez pas induit en erreur!
la source
Rechercher
ou seulementnbsp
- avez-vous essayé cela?la source
Selon le HTML que vous avez fourni:
Pour localiser le nœud avec la chaîne,
vous pouvez utiliser l'une des méthodes suivantesxpath solutions basées sur:Utilisation
text()
:Utilisation
contains()
:Cependant, dans l'idéal, vous pouvez éviter le caractère NO-BREAK SPACE et utiliser l'une des stratégies de localisation suivantes :
En utilisant le
<tr>
nœud parent etfollowing-sibling
:Utilisation
starts-with()
:Utilisation du
<td>
nœud précédent etfollowing
node and
du frère suivant`:Référence
Vous pouvez trouver une discussion détaillée pertinente dans:
séléniumtl; dr
Caractère Unicode 'NO-BREAK SPACE' (U + 00A0)
la source
Vous pouvez utiliser les fonctions XPath Contains, Sibling, Ancestor dans Selenium WebDriver pour localiser des éléments n'ayant pas de propriétés uniques afin d'être identifiés.
pour plus de détails, lisez cette page: https://www.guru99.com/using-contains-sbiling-ancestor-to-find-element-in-selenium.html
la source