xpath axes dynamic xpath selenium webdriver
Ce didacticiel explique les axes XPath pour Dynamic XPath dans Selenium WebDriver à l'aide de divers axes XPath utilisés, exemples et explication de la structure:
Dans le didacticiel précédent, nous avons découvert les fonctions XPath et son importance dans l'identification de l'élément. Cependant, lorsque plusieurs éléments ont une orientation et une nomenclature trop similaires, il devient impossible d'identifier l'élément de manière unique.
=> Consultez le guide de formation Perfect Selenium ici.
Ce que vous apprendrez:
Comprendre les axes XPath
Comprenons le scénario mentionné ci-dessus à l'aide d'un exemple.
Pensez à un scénario où deux liens avec du texte «Modifier» sont utilisés. Dans de tels cas, il devient pertinent de comprendre la structure nodale du HTML.
Veuillez copier-coller le code ci-dessous dans le bloc-notes et l'enregistrer en tant que fichier .htm.
Edit Edit
L'interface utilisateur ressemblera à l'écran ci-dessous:
Énoncé du problème
Q # 1) Que faire lorsque même les fonctions XPath ne parviennent pas à identifier l'élément?
Répondre: Dans un tel cas, nous utilisons les axes XPath avec les fonctions XPath.
La deuxième partie de cet article traite de la façon dont nous pouvons utiliser le format HTML hiérarchique pour identifier l'élément. Nous allons commencer par obtenir un peu d'informations sur les axes XPath.
Q # 2) Que sont les axes XPath?
Répondre: Un axe XPath définit l'ensemble de nœuds par rapport au nœud actuel (contexte). Il est utilisé pour localiser le nœud qui est relatif au nœud sur cet arbre.
Q # 3) Qu'est-ce qu'un nœud de contexte?
Répondre: Un nœud de contexte peut être défini comme le nœud que le processeur XPath recherche actuellement.
Différents axes XPath utilisés dans les tests de sélénium
Il y a treize axes différents qui sont énumérés ci-dessous. Cependant, nous n'allons pas les utiliser tous lors des tests Selenium.
quel est le système d'exploitation linux et unix
- ancêtre : Cet axe indique tous les ancêtres relatifs au nœud de contexte, atteignant également le nœud racine.
- ancêtre-ou-soi: Celui-ci indique le nœud de contexte et tous les ancêtres relatifs au nœud de contexte, et inclut le nœud racine.
- attribut: Cela indique les attributs du nœud de contexte. Il peut être représenté avec le symbole «@».
- enfant: Cela indique les enfants du nœud de contexte.
- vers le bas: Cela indique les enfants et petits-enfants et leurs enfants (le cas échéant) du nœud de contexte. Cela n'indique PAS l'attribut et l'espace de noms.
- descendant-ou-soi: Cela indique le nœud de contexte et les enfants, et petits-enfants et leurs enfants (le cas échéant) du nœud de contexte. Cela n'indique PAS l'attribut et l'espace de noms.
- Suivant: Cela indique tous les nœuds qui apparaissent après le nœud de contexte dans la structure HTML DOM. Cela n'indique PAS le descendant, l'attribut et l'espace de noms.
- suivant-frère: Celui-ci indique tous les nœuds frères (même parent que le nœud de contexte) qui apparaître après le nœud de contexte dans la structure HTML DOM. Cela n'indique PAS le descendant, l'attribut et l'espace de noms.
- espace de noms: Cela indique tous les nœuds d'espace de noms du nœud de contexte.
- parent: Cela indique le parent du nœud de contexte.
- précédent: Cela indique tous les nœuds qui apparaissent avant que le nœud de contexte dans la structure HTML DOM. Cela n'indique PAS le descendant, l'attribut et l'espace de noms.
- précédent-frère: Celui-ci indique tous les nœuds frères (même parent que le nœud de contexte) qui apparaissent avant que le nœud de contexte dans la structure HTML DOM. Cela n'indique PAS le descendant, l'attribut et l'espace de noms.
- soi: Celui-ci indique le nœud de contexte.
Structure des axes XPath
Considérez la hiérarchie ci-dessous pour comprendre le fonctionnement des axes XPath.
Reportez-vous ci-dessous à un code HTML simple pour l'exemple ci-dessus. Veuillez copier-coller le code ci-dessous dans l'éditeur de bloc-notes et l'enregistrer en tant que fichier .html.
Animal
Vertebrate
Fish
Mammal
Herbivore
Carnivore
Lion
Tiger
Other
Invertebrate
Insect
Crustacean
La page ressemblera à ci-dessous. Notre mission est d'utiliser les axes XPath pour trouver les éléments de manière unique. Essayons d'identifier les éléments indiqués dans le graphique ci-dessus. Le nœud de contexte est 'Mammifère'
# 1) Ancêtre
L 'agenda: Pour identifier l'élément ancêtre à partir du nœud de contexte.
XPath # 1: // div (@ class = 'Mammal') / ancestor :: div
Le XPath «// div (@ class = 'Mammal') / ancestor :: div» renvoie deux nœuds correspondants:
- Vertébré, car il est le parent de «Mammifère», il est donc également considéré comme l'ancêtre.
- Animal en tant que parent du parent de «Mammifère», il est donc considéré comme un ancêtre.
Maintenant, nous devons seulement identifier un élément qui est la classe «Animal». Nous pouvons utiliser le XPath comme mentionné ci-dessous.
XPath#2: //div(@class='Mammal')/ancestor::div(@class='Animal')
Si vous souhaitez atteindre le texte «Animal», vous pouvez utiliser XPath ci-dessous.
# 2) Ancêtre ou soi
L 'agenda: Pour identifier le nœud de contexte et l'élément ancêtre à partir du nœud de contexte.
XPath # 1: // div (@ class = 'Mammal') / ancestor-or-self :: div
Le XPath n ° 1 ci-dessus lance trois nœuds correspondants:
- Animal (ancêtre)
- Vertébré
- Mammifère (soi-même)
# 3) Enfant
L 'agenda: Identifier l'enfant du nœud de contexte «Mammifère».
XPath # 1: // div (@ class = 'Mammal') / enfant :: div
XPath # 1 aide à identifier tous les enfants du nœud de contexte «Mammifère». Si vous souhaitez obtenir l'élément enfant spécifique, veuillez utiliser XPath # 2.
XPath # 2: // div (@ class = 'Mammal') / child :: div (@ class = 'Herbivore') / h5
# 4) Descendant
L 'agenda: Pour identifier les enfants et petits-enfants du nœud de contexte (par exemple: «Animal»).
XPath # 1: // div (@ class = 'Animal') / descendant :: div
Comme Animal est le membre supérieur de la hiérarchie, tous les éléments enfants et descendants sont mis en évidence. Nous pouvons également changer le nœud de contexte pour notre référence et utiliser n'importe quel élément que nous voulons comme nœud.
# 5) Descendant-ou-soi
L 'agenda: Pour trouver l'élément lui-même et ses descendants.
XPath1: // div (@ class = 'Animal') / descendant-or-self :: div
questions d'entretien sur C ++
La seule différence entre descendant et descendant-ou-soi est qu'il se met en valeur en plus de mettre en évidence les descendants.
# 6) Suivi
L 'agenda: Pour trouver tous les nœuds qui suivent le nœud de contexte. Ici, le nœud de contexte est le div qui contient l'élément Mammal.
XPath: // div (@ class = 'Mammal') / suivant :: div
Dans les axes suivants, tous les nœuds qui suivent le nœud de contexte, que ce soit l'enfant ou le descendant, sont mis en surbrillance.
# 7) Frère et sœur suivant
L 'agenda: Pour rechercher tous les nœuds après le nœud de contexte qui partagent le même parent et sont frères du nœud de contexte.
XPath: // div (@ class = 'Mammal') / following-sibling :: div
La principale différence entre le frère suivant et le frère suivant est que le frère suivant prend tous les nœuds frères après le contexte mais partagera également le même parent.
# 8) Précédente
L 'agenda: Il prend tous les nœuds qui précèdent le nœud de contexte. Cela peut être le nœud parent ou grand-parent.
Ici, le nœud de contexte est Invertébré et les lignes en surbrillance dans l'image ci-dessus sont tous les nœuds qui précèdent le nœud Invertébré.
# 9) Sœur précédent
L 'agenda: Pour trouver le frère qui partage le même parent que le nœud de contexte, et qui vient avant le nœud de contexte.
Le nœud de contexte étant l’invertébré, le seul élément mis en évidence est le vertébré, car ces deux-là sont frères et sœurs et partagent le même «animal» parent.
# 10) Parent
L 'agenda: Pour trouver l'élément parent du nœud de contexte. Si le nœud de contexte lui-même est un ancêtre, il n'aura pas de nœud parent et ne récupérera aucun nœud correspondant.
Nœud de contexte n ° 1: mammifère
XPath: // div (@ class = 'Mammal') / parent :: div
Comme le nœud de contexte est Mammal, l'élément avec Vertebrate est mis en surbrillance car c'est le parent du Mammal.
Nœud de contexte n ° 2: animal
XPath: // div (@ class = 'Animal') / parent :: div
Comme le nœud animal lui-même est l'ancêtre, il ne met en évidence aucun nœud et aucun nœud correspondant n'a donc été trouvé.
# 11) Soi
L 'agenda: Pour trouver le nœud de contexte, le self est utilisé.
Nœud de contexte: Mammifère
XPath: // div (@ class = 'Mammal') / self :: div
meilleur ide python gratuit pour windows
Comme nous pouvons le voir ci-dessus, l'objet Mammal a été identifié de manière unique. Nous pouvons également sélectionner le texte «Mammal» en utilisant le XPath ci-dessous.
XPath: // div (@ class = 'Mammal') / self :: div / h4
Utilisations des axes précédents et suivants
Supposons que vous sachiez que votre élément cible est le nombre de balises en avant ou en arrière du nœud de contexte, vous pouvez directement mettre en évidence cet élément et non tous les éléments.
Exemple: précédent (avec index)
Supposons que notre nœud de contexte est «Autre» et que nous voulons atteindre l'élément «Mammifère», nous utiliserions l'approche ci-dessous pour le faire.
Premier pas: Utilisez simplement le précédent sans donner de valeur d'index.
XPath: // div (@ class = 'Other') / précédent :: div
Cela nous donne 6 nœuds correspondants, et nous ne voulons qu'un seul nœud ciblé «Mammifère».
Deuxième étape: Donnez la valeur d'index (5) à l'élément div (en comptant à partir du nœud de contexte).
XPath: // div (@ class = ’Autre’) / précédent :: div (5)
De cette manière, l'élément «Mammifère» a été identifié avec succès.
Exemple: suivant (avec index)
Supposons que notre nœud de contexte soit 'Mammifère' et que nous souhaitons atteindre l'élément 'Crustacé', nous utiliserons l'approche ci-dessous pour ce faire.
Premier pas: Utilisez simplement ce qui suit sans donner de valeur d'index.
XPath: // div (@ class = 'Mammal') / suivant :: div
Cela nous donne 4 nœuds correspondants, et nous ne voulons qu'un seul nœud ciblé «Crustacé»
Deuxième étape: Donnez la valeur d'index (4) à l'élément div (comptez en avant à partir du nœud de contexte).
XPath: // div (@ class = 'Autre') / suivant :: div (4)
De cette façon, l'élément «Crustacé» a été identifié avec succès.
Le scénario ci-dessus peut également être recréé avec précédent-frère et suivant-frère en appliquant l'approche ci-dessus.
Conclusion
L'identification des objets est l'étape la plus cruciale de l'automatisation de tout site Web. Si vous pouvez acquérir la compétence pour apprendre l'objet avec précision, 50% de votre automatisation est effectuée. Bien qu'il existe des localisateurs disponibles pour identifier l'élément, il existe des cas où même les localisateurs ne parviennent pas à identifier l'objet. Dans de tels cas, nous devons appliquer des approches différentes.
Ici, nous avons utilisé les fonctions XPath et les axes XPath pour identifier de manière unique l'élément.
Nous concluons cet article en notant quelques points à retenir:
- Vous ne devez pas appliquer d'axes «ancêtres» sur le nœud de contexte du nœud de contexte lui-même est l'ancêtre.
- Vous ne devez pas appliquer d'axes «parents» sur le nœud de contexte du nœud de contexte lui-même est l'ancêtre.
- Vous ne devez pas appliquer d'axes 'enfants' sur le nœud de contexte du nœud de contexte lui-même est le descendant.
- Vous ne devez pas appliquer d'axes «descendants» sur le nœud de contexte du nœud de contexte lui-même est l'ancêtre.
- Vous ne devez pas appliquer d’axes «suivants» sur le nœud de contexte, c’est le dernier nœud de la structure du document HTML.
- Vous ne devez pas appliquer d’axes «précédents» sur le nœud de contexte, c’est le premier nœud de la structure du document HTML.
Bon apprentissage!!!
=> Visitez ici pour la série exclusive de didacticiels de formation Selenium.
lecture recommandée
- Fonctions XPath pour XPath dynamique dans Selenium
- Tutoriel Cucumber Selenium: Intégration Cucumber Java Selenium WebDriver
- Localisateurs de sélénium: identifier les éléments Web à l'aide de XPath dans Selenium (exemples)
- Introduction à Selenium WebDriver - Tutoriel Selenium # 8
- Tutoriel ChromeDriver Selenium: Tests Selenium Webdriver sur Chrome
- Implémentation de notre premier script WebDriver - Tutoriel Selenium WebDriver # 10
- 30+ meilleurs didacticiels sur le sélénium: apprenez le sélénium avec de vrais exemples
- Gestion des tableaux Web, des cadres et des éléments dynamiques dans Selenium Script - Tutoriel Selenium # 18