xpath functions dynamic xpath selenium
Ce didacticiel explique l'utilisation des fonctions XPath pour identifier les éléments à l'aide d'exemples:
Avant d'automatiser un site Web, il est nécessaire d'identifier correctement l'objet avant de pouvoir effectuer une opération sur le même. Comme nous le savons, le moyen le plus simple d'identifier l'élément consiste à utiliser des attributs tels que l'ID, le nom, le lien, la classe ou tout autre attribut unique disponible avec la balise où l'élément réside.
Cela n'est possible que lorsque ces attributs sont présents et / ou uniques afin que l'objet soit correctement identifié.
=> Jetez un œil au guide du débutant Selenium ici.
Ce que vous apprendrez:
Présentation des fonctions XPath
Discutons du scénario où les attributs ne sont pas facilement disponibles.
Énoncé du problème
Comment identifier l'élément si les localisateurs tels que ID, Nom, Classe, Lien, etc. ne sont pas disponibles dans la balise d'élément?
Cela peut être clairement compris avec l'exemple donné:
Se connecter à Twitter
Comme vous pouvez le voir dans la capture d'écran ci-dessus, l'en-tête «Connectez-vous à Twitter» n'a aucun attribut associé. Cela dit, nous ne pouvons utiliser aucun des localisateurs tels que ID, Classe, Lien ou Nom pour identifier cet élément.
questions et réponses d'entretien net pour les
Le plugin Firepath de l'outil Firefox a généré le XPath ci-dessous:
// * (@ id = ’page-container’) / div / div (1) / h1
Nous ne recommandons pas l'utilisation du XPath ci-dessus comme structure de page ou comme identifiant car il peut changer dynamiquement. Si nous utilisons ce XPath instable, nous pourrions devoir changer le XPath plus fréquemment, ce qui prend plus de temps à maintenir. C'est un cas où nous ne pouvons pas utiliser l'expression XPath générique avec des localisateurs tels que id, classe, nom ou lien.
Solution
Identification de l'élément à l'aide des fonctions XPath par texte
Comme nous avons le texte visible «Connectez-vous à Twitter» disponible avec nous, nous utiliserions ce qui suit Fonctions XPath pour identifier de manière unique l'élément.
- contient () (Par texte)
- commence par () (Par texte)
- texte()
Les fonctions XPath comme contains (), starts-with () et text () lorsqu'elles sont utilisées avec l'aide du texte «Connectez-vous à Twitter» nous aideraient à identifier correctement l'élément, et d'autres opérations peuvent être effectuées sur celui-ci.
# 1) Contient () Méthode:
Syntaxe: Pour trouver l'élément Web «Connectez-vous à Twitter», utilisez l'une des expressions XPath suivantes qui incluent la méthode contains ().
Par texte
- // h1 (contient (text (), 'Se connecter à'))
- // h1 (contient (text (), 'in to Twitter'))
Remarque: 1 nœud correspondant indique que l'élément Web a été identifié avec succès.
D'après l'exemple ci-dessus, il est clair que la méthode contains () n'a pas besoin du texte absolu (complet) pour identifier correctement l'élément. Le texte partiel suffit à l'identifier correctement. Cependant, le texte partiel sélectionné doit être unique. L'utilisateur peut facilement identifier l'élément même si l'orientation de la page est modifiée à l'aide de la méthode contains ().
Veuillez noter que même si vous utilisez le texte absolu «Connectez-vous à Twitter» avec la méthode contains (), l'élément sera identifié correctement.
# 2) Méthode commence par ():
Syntaxe: Pour trouver l'élément Web «Connectez-vous à Twitter», utilisez les exemples d'expressions XPath suivants qui ont la méthode starts-with ().
Par texte
- // h1 (commence par (text (), 'Connexion'))
- // h1 (commence par (text (), 'Se connecter à'))
D'après l'exemple ci-dessus, il est clair que la méthode des fonctions XPath starts-with () nécessite au moins le premier mot («Log») du texte visible pour identifier de manière unique l'élément. Il fonctionne également sur le texte partiel et échouera si nous n'incluons pas le premier mot du texte partiellement visible.
Veuillez noter que même si vous utilisez le texte absolu «Connectez-vous à Twitter» avec la méthode starts-with (), l'élément sera identifié correctement.
XPath non valide pour commence par (): // h1 (commence par (text (), 'dans Twitter'))
Remarque: Aucun nœud correspondant n'indique que l'élément Web n'a pas été identifié.
# 3) Méthode Text ():
Syntaxe: Pour trouver l'élément Web «Connectez-vous à Twitter», utilisez l'expression XPath suivante qui a la méthode text ().
Dans cette expression, nous utilisons le texte absolu présent entre la balise de début. Si nous utilisons la fonction text () avec Xpath partiel comme nous le faisons dans contains () et starts-with (), nous ne pourrions pas trouver l'élément.
Xpath non valide pour le texte ():
Identification de l'élément à l'aide des fonctions XPath par attribut
Nous utilisons les fonctions XPath (contient ou commence par) avec un attribut lorsqu'il existe des valeurs d'attribut identifiées de manière unique disponibles dans la balise conteneur. Les attributs sont accessibles à l'aide du symbole «@».
Cela peut être clairement compris avec le Exemple:
Se connecter à Google
# 1) Contient () Méthode:
Syntaxe: Pour identifier de manière unique l’élément de bouton 'Je me sens chanceux' à l’aide de la fonction XPath, contains () à l’aide de l’attribut.
(i) Par attribut de valeur:
- // entrée (contient (@ value, 'Feeling'))
- // entrée (contient (@ valeur, 'Lucky'))
D'après les images ci-dessus, il est entendu que l'utilisation de la valeur d'attribut avec la méthode «Feeling» ou «Lucky» avec la méthode contains () identifiera de manière unique l'élément. Cependant, il est important de noter que même si nous utilisons le contenu complet de l'attribut Value, il identifiera l'élément correctement.
(ii) Par attribut de nom:
//input(contains(@name=’btnI’))
La casse non valide pour la fonction XPath avec l'attribut:
Nous devons être très prudents lors de la sélection de l'attribut à utiliser avec les méthodes contains () et starts-with (). Si la valeur d'attribut n'est pas unique, nous ne pourrons pas identifier l'élément de manière unique.
Supposons que si nous prenons l'attribut 'type' lors de l'identification du bouton 'Je me sens chanceux', XPath ne fonctionnera pas.
2 nœuds correspondants indiquent que l'élément n'a pas été identifié correctement. Ici, la valeur de l'attribut type n'est pas unique.
# 2) Méthode commence par ():
La méthode starts-with () avec l'attribut est très utile lorsque nous devons trouver les éléments dont l'ancienne partie de l'attribut reste fixe tandis que la partie ultérieure continue de changer. Cette approche est très utile lorsque les objets changent dynamiquement la valeur de ses attributs. Cela peut également être utilisé si nous voulons capturer des types d'éléments similaires.
Aller à Identifiant Facebook
Inspectez la première zone de texte «Prénom» et la deuxième zone de texte «Nom» du formulaire d'inscription.
La première zone de texte «Prénom» est identifiée.
La deuxième zone de texte «Nom» est identifiée.
Dans les deux zones de texte identifiées pour l'inscription à Facebook, la partie de départ des attributs id reste inchangée.
Prénom id = 'u_0_2'
Identifiant du nom = 'u_0_4'
C'est le scénario dans lequel nous pouvons utiliser l'attribut starts-with () pour obtenir tous les éléments sous ce type d'attribut id. Veuillez noter que nous ne prenons ces deux champs qu'à titre de référence. Cependant, il peut y avoir plus de champs à l'écran avec des identifiants commençant par 'u_0_'.
Starts-with () (Par identifiant d'attribut)
//input(starts-with(@id,”u_0_”))
Note importante: Ici, nous avons utilisé des guillemets doubles au lieu de guillemets simples. Mais les guillemets simples fonctionneront aussi avec la méthode commence par.
11 nœuds correspondants indiquent que ce XPath a identifié tous les éléments dont ces identifiants commencent par «u_0_». La dernière partie de l'identifiant (2 pour le prénom, 4 pour le nom de famille, etc.) détermine la façon dont nous identifions de manière unique l'élément.
Nous pouvons utiliser l'attribut de fonction begin-with où nous devons collecter le type d'éléments similaires dans une liste, et en choisir dynamiquement l'un d'entre eux en contournant l'argument dans une méthode générique pour identifier l'élément de manière unique.
Veuillez suivre l'exemple ci-dessous pour utiliser la fonction commence par à notre avantage.
Exemple de code:
/* Generic Method */ public void xpathLoc(String identifier){ //The below step identifies the element “First Name” uniquely when the argument is “2” WebElement E1=d1.findElement(By.xpath('//input(starts-with(@id,”u_0_”+identifier ))')); E1.sendKeys(“Test1”); /* This step enters the value of First Name as “Test 1” */ } /* Main Method */ public static void main(String() args) { xpathLoc(“2”); --- This step calls the xpathLoc() method to identify the first name. }
Remarque: Eclipse peut ne pas autoriser l'utilisation de guillemets doubles. Vous devrez peut-être recourir à un code différent pour créer XPath dynamique.
L'exemple de code est donné à titre de référence. Vous pouvez l'améliorer pour tenir dans tous les éléments et les opérations que vous souhaitez effectuer et les valeurs que vous souhaitez saisir (dans le cas de champs de texte) pour rendre le code plus polyvalent.
Conclusion
Cet article explique comment nous pouvons utiliser les fonctions XPath contains (), starts-with () et text () avec attribut et texte pour identifier de manière unique les éléments de la structure HTML DOM.
Voici quelques-unes des observations que nous pouvons tirer pour les fonctions XPath:
- Utilisez la méthode «contains ()» dans XPath si vous connaissez le texte ou l'attribut visible de la constante partielle.
- Utilisez la méthode «starts-with ()» dans XPath si vous connaissez le texte ou l'attribut visible de la constante partielle initiale.
- Vous pouvez également utiliser les méthodes contains () et starts-with () avec du texte absolu ou un attribut.
- Utilisez la méthode «text ()» dans XPath si vous êtes conscient du texte visible absolu.
- Vous ne pouvez pas utiliser la méthode text () avec le texte partiel.
- Vous ne pouvez pas utiliser la méthode begin-with () si le texte initial n’est pas utilisé dans XPath ou si le texte initial change constamment.
Dans le prochain didacticiel, nous allons apprendre à utiliser les axes XPath avec les fonctions XPath pour améliorer davantage l'emplacement des éléments sur la page Web disponible.
=> Lisez la série de formations Easy Selenium.
lecture recommandée
- Localisateurs de sélénium: identifier les éléments Web à l'aide de XPath dans Selenium (exemples)
- Gestion des tableaux Web, des cadres et des éléments dynamiques dans le script Selenium - Tutoriel Selenium # 18
- Fonctions de chaîne Python
- Post-processeur Xpath Extractor dans JMeter
- Tutoriel de recherche d'élément par texte de sélénium avec des exemples
- Tutoriel Cucumber Selenium: Intégration Cucumber Java Selenium WebDriver
- Un didacticiel XPath complet - XML Path Language
- Introduction à Selenium WebDriver - Tutoriel Selenium # 8