Tout en trouvant le XPath relatif via Firebug: cela crée comme
.//*[@id='Passwd']
--------- Et si nous n'utilisions pas le point au début, cela signifie-t-il?
Il suffit d’ajouter //*
dans le Xpath --it en surbrillance --- divers éléments de page ---------- que signifie-t-il?
Vous trouverez ci-dessous les champs XPaths pour le mot de passe Gmail. Quelle est la signification de *
?
.//*[@id='Passwd']
//child::input[@type='password']
Ces expressions sélectionnent toutes des ensembles de nœuds différents:
.//*[@id='Passwd ']
Le '.' au début signifie que le traitement en cours commence au nœud actuel. Le '*' sélectionne tous les nœuds d'élément descendant de ce nœud actuel avec la valeur d'attribut @id
égale à 'Passwd'.
Que faire si nous n'utilisons pas point au début ce que cela signifie?
Ensuite, vous sélectionneriez tous les nœuds d'élément avec une valeur @id
- attribut égale à 'Passwd' dans le document whole.
Ajoutez simplement // * dans le XPath - il met en évidence --- divers éléments de page
Cela sélectionnerait tous les nœuds d'élément du document whole.
Ci-dessous mentionné: le champ XPatht pour Mot de passe Gmail est vrai. Quelle est la signification de *?
.//*[@id='Passwd']
Cela sélectionnerait tous les nœuds d'élément descendant du nœud actuel pour lesquels @id
- attribut-valeur est égal à 'Passwd'.
// child :: input [@ type = 'password']
Cela sélectionnerait tous les nœuds d'élément enfant nommés input
dont @type
- valeurs d'attribut sont égaux à 'mot de passe'. Le préfixe d'axe child::
peut être omis, car il s'agit du comportement par défaut.
La syntaxe de choix de l'expression appropriée est expliquée ici sur w3school.com .
Et les axes (point en cours de traitement) sont expliqués ici sur une autre page w3school.com .
Il y a plusieurs concepts clés XPath distincts en jeu ici ...
XPaths absolus vs relatifs (/
vs .
)
/
introduit un chemin d'emplacement absolu, commençant à la racine du document..
introduit un chemin d'emplacement relatif, en partant du nœud de contexte. Élément nommé vs n'importe quel élément (ename
vs *
)
/ename
sélectionne un élément racine ename
./ename
sélectionne tous les éléments enfants ename
du nœud actuel./*
sélectionne l'élément racine, quel que soit son nom ../*
ou *
sélectionne tous les éléments enfants du nœud de contexte, quel que soit leur nom. axe descendant ou autonome (//*
)
//ename
sélectionne tous les éléments ename
d'un document ..//ename
sélectionne tous les éléments ename
sur ou sous le nœud de contexte.//*
sélectionne tous les éléments d'un document, quel que soit leur nom ..//*
sélectionne tous les éléments, quel que soit leur nom, sur ou sous le nœud de contexte.Avec ces concepts à l'esprit, voici des réponses à vos questions spécifiques ...
.//*[@id='Passwd']
signifie sélectionner tous les éléments sur ou sous le nœud de contexte actuel qui ont une valeur d'attribut id
égale à 'Passwd'
.//child::input[@type='password']
peut être simplifié en //input[@type='password']
et signifie sélectionner tous les éléments input
du document ayant un attribut type
égal à 'password'
.Le point dans XPath est appelé "expression d'élément de contexte" . Si vous mettez un point au début de l'expression, cela le rendrait spécifique au contexte. En d'autres termes, il chercherait l'élément avec id="Passwd"
dans le contexte du nœud sur lequel vous appelez la méthode "find element by XPath".
Le *
dans le .//*[@id='Passwd']
permet de faire correspondre les éléments à tous les éléments avec id='Passwd'
.
J'espère que ça aide :)