Maison > Article > interface Web > Comment écrire et gérer Dynamic XPath dans Selenium [avec tactiques]
Il est essentiel que les tests automatisés soient capables de reconnaître les éléments Web d'une application sous test (AUT). Apprendre à trouver des éléments Web et à écrire manuellement du XPath dynamique dans Selenium peut prendre beaucoup de temps et beaucoup de pratique.
Par exemple, nous allons vous montrer comment rechercher manuellement et facilement des éléments Web dans Selenium à l'aide de XPath.
Les localisateurs sont l’une des fonctionnalités précieuses de Selenium. Ils nous permettent de localiser des éléments Web. Par exemple, si les localisateurs tels que l'identifiant, le nom de la classe, le nom, le texte du lien, etc. ne trouvent pas les éléments Web, nous utilisons XPath pour les trouver sur la page Web.
XPath, également connu sous le nom de XML Path, est l'un des localisateurs de Selenium WebDriver les plus couramment utilisés pour naviguer dans la structure HTML d'une page. Il peut être utilisé pour localiser n'importe quel élément d'une page Web à l'aide de la structure HTML DOM dans les documents HTML et XML.
XPath est destiné à permettre la navigation dans un document XML pour sélectionner des éléments individuels, des attributs ou d'autres parties d'un document XML pour un traitement spécifique. Par exemple, XPath génère des localisateurs fiables, mais il est plus lent en termes de performances que CSS Selector.
Le langage XPath est utilisé pour sélectionner des éléments dans une page HTML. À l'aide de XPath, vous pouvez rechercher n'importe quel élément d'une page en fonction de son nom de balise, de son ID, de sa classe CSS, etc. Dans Selenium, il existe deux types de XPath.
C'est le moyen le plus direct de trouver l'élément, mais l'inconvénient du « XPath absolu » est que si le chemin de l'élément change, ce XPath particulier échoue.
La caractéristique essentielle de XPath est qu'il commence par une seule barre oblique (/), indiquant que vous pouvez sélectionner un élément à partir du nœud racine à l'aide de Dynamic XPath.
Un XPath relatif est un chemin dans lequel le chemin commence à un nœud de votre choix plutôt qu'au nœud racine.
L’avantage d’utiliser XPath relatif est que vous n’avez pas besoin de spécifier l’intégralité de XPath ; au lieu de cela, vous pouvez commencer au milieu ou quelque part entre les deux.
*Inconvénients : *
L'identification de l'élément prendra plus de temps car nous spécifions un chemin partiel plutôt qu'un chemin exact.
Si plusieurs éléments sont sur le même chemin, il choisira le premier élément identifié.
À partir du nœud contextuel (actuel), les axes XPath recherchent différents nœuds dans le document XML. Par exemple, il est utilisé pour trouver le nœud le plus proche de cet arbre.
Les axes XPath sont des méthodes permettant de rechercher des éléments dynamiques qui seraient impossibles à trouver à l'aide des méthodes XPath standard qui n'incluent pas d'ID, de nom de classe, de nom ou d'autres identifiants.
Les méthodes Axes sont utilisées pour localiser les éléments qui changent dynamiquement en raison d'un rafraîchissement ou d'une autre opération. Par exemple, les méthodes des axes enfant, parent, ancêtre, frère ou sœur, précédent, soi et autres sont couramment utilisées dans Selenium Webdriver.
Ils modifiaient des scripts de test alors que les modifications AUT constituent l'une des tâches les plus complexes et les plus longues de l'automatisation des tests, en particulier dans les premiers stades du développement logiciel.
Par conséquent, les développeurs peuvent fréquemment modifier les identifiants et les éléments d'une version à l'autre. De plus, les éléments de l'AUT peuvent changer dynamiquement pendant l'exécution.
Pour résoudre ces problèmes, les testeurs d'automatisation ne doivent pas définir de XPaths fixes pour les éléments du scénario de test, mais plutôt scripter les XPaths de manière dynamique en fonction de modèles spécifiques.
Voici les 11 façons uniques et différentes de créer un XPath dynamique en sélénium :
appareil-réel-cloud-cta.jpg
Ce mécanisme est également connu sous le nom de découverte d'éléments Absolute XPath.
Syntaxe :
html/body/div[1]/div[2]/div[2]/div[1]/form/div[1]/div/div[1]/div/div/input[1]
Une seule barre oblique est utilisée pour créer un XPath avec un chemin absolu, c'est-à-dire que le XPath est conçu pour commencer la sélection à partir du nœud de document/nœud de départ/nœud parent.
Ce mécanisme est également appelé recherche d'éléments avec Relative XPath.
Une double barre oblique est utilisée pour créer un XPath avec un chemin relatif, ce qui signifie que le XPath peut commencer la sélection depuis n'importe où dans le document. Ensuite, recherchez la chaîne précédente sur toute la page (DOM).
Syntaxe
//form/div[1]/div/div[1]/div/div/input[1]
La syntaxe peut être écrite de deux manières, comme indiqué ci-dessous. Inclusion ou exclusion de balises HTML. Si vous souhaitez exclure les balises HTML, vous devez utiliser *.
Syntaxe
//[@attribute_name='attribute_value']
ou
//*[@attribute_name='attribute_value']
Syntaxe
//[@attribute_name1='attribute_value1'][@attribute_name2='attribute_value2]
ou
//*[@attribute_name1='attribute_value1'][@attribute_name2='attribute_value2]
Syntaxe
//[@attribute_name1='attribute_value1' et @attribute_name2='attribute_value2]
ou
//*[@attribute_name1='attribute_value1' et @attribute_name2='attribute_value2]
Syntaxe
//[@attribute_name1='attribute_value1' ou @attribute_name2='attribute_value2]
ou
//*[@attribute_name1='attribute_value1' ou @attribute_name2='attribute_value2]
Contains() est une méthode pour identifier un élément qui change dynamiquement et lorsqu'on est familier avec une partie de la valeur d'attribut de l'élément.
Lorsque nous connaissons la valeur de l'attribut d'un élément (commençant par le texte spécifié), nous pouvons utiliser la méthode start-with() pour l'identifier.
syntaxe
//[contient (@attribute_name,'attribute_value')]
ou
//*[contient (@attribute_name,'attribute_value')]
Ce mécanisme est utilisé pour rechercher un élément en fonction du texte d'une page Web.
Last() sélectionne le dernier élément (du type spécifié) parmi tous les éléments d'entrée.
Syntaxe
//[text()='Nouveau look pour la connexion à venir']
ou
//[text()='Nouveau look pour la connexion à venir']
L'élément est choisi parmi tous les éléments d'entrée en fonction du numéro de position fourni.
Dans le XPath suivant, [@type=’text’] localisera un champ de texte et la fonction [position()=2] identifiera un champ de texte en deuxième position à partir du haut.
Syntaxe
findElement(By.xpath("(//input[@type='text'])[position()=2]"))
ou
findElement(By.xpath("(//input[@type='text'])(2]"))
On pourrait accéder au nième élément en mettant la position de l'index entre crochets. Ensuite, nous avons pu identifier le champ Nom de famille à l'aide du XPath ci-dessous.
Syntaxe
findElement(By.xpath("//label[2]"))
À l'exception des ancêtres, des nœuds d'attribut et des nœuds d'espace de noms, ceci sélectionne tous les nœuds qui apparaissent avant le nœud actuel dans le document.
WebElement select = driver.findElement(By.id(“gender”));
Options de liste = select.findElements(By.tagName(“Male”));
pour (option WebElement : options) {
if("Allemagne".equals(option.getText()))
option.click();
en utilisant selectByValue()
Sélectionner la zone de liste = nouveau Sélectionner(pilote.
zone de liste.
Sélectionner la zone de liste = nouveau Sélectionner (pilote.
Option WebElement = listbox.getFirstSelectedOption();
System.out.println(option.getText()); //imprime l'option sélectionnée.
//Liste de toutes les options sélectionnées.
// Liste de toutes les options.
Un élément dynamique est un élément Web dont les identifiants et pas seulement les identifiants, mais tout attribut tel que le nom de classe, la valeur, etc., ne sont pas fixes.
Par conséquent, à chaque fois que vous rechargez la page, elle change. Par conséquent, vous ne pouvez pas gérer cet élément uniquement via le localisateur.
Par exemple, le nom de classe des éléments de la boîte de réception Gmail change à chaque connexion.
Éléments dynamiques pilotés par base de données ou par session Lorsque vous modifiez un élément de base de données, cela affecte plusieurs domaines d'application testés.
Les éléments dynamiques sont strictement contenus, avec la mise en forme prévue dans le design. Les zones de texte et les boutons sont couramment utilisés avec des identifiants dynamiques.
Lorsque vous automatisez un site Web dynamique, les scripts s'interrompent dès que le contenu change, provoquant l'échec de votre test. Ensuite, vous devez mettre à jour votre scénario de test à chaque fois, ce qui est une tâche fastidieuse.
Il faut toujours comprendre comment ces éléments se comportent lorsque la page est rechargée, ou qu'une nouvelle session est démarrée. Nous pouvons préparer une stratégie pour interagir avec ces éléments une fois que nous les comprenons.
Semblable au sélecteur de lien partiel dans Selenium, nous pouvons utiliser la recherche Xpath avec l'élément de correspondance de texte de départ.
Tous les nœuds qui suivent le nœud contextuel sont répertoriés ci-dessous. Nous pouvons utiliser « ce qui suit » pour spécifier les éléments répertoriés ci-dessous dans la liste des éléments Web.
Peu d'éléments dynamiques contiennent des valeurs statiques ; sur la base de ces valeurs ; nous pouvons rechercher de tels éléments en utilisant la fonction « contient ». Par exemple, il existe une chaîne statique « Hstpl-12345 » dans le nom de classe du bouton HTML ci-dessus. Par exemple, nous pouvons utiliser XPath pour rechercher un élément bouton avec un nom de classe qui inclut le mot « Hstpl ».
Lorsqu'il existe plusieurs éléments dans le DOM avec des attributs similaires, il peut être difficile de les rechercher, surtout lorsqu'ils sont dynamiques.
Par exemple, supposons qu'il y ait dix boutons sur une page et que vous souhaitiez trouver le cinquième. Ensuite, nous recherchons les éléments avec la balise 'button' et allons au cinquième index de la liste des boutons pour trouver cet élément.
Absolute Xpath utilise le chemin complet depuis l'élément racine jusqu'à l'élément spécifique. Comme indiqué ci-dessous, un Xpath absolu commence par HTML et une barre oblique (/). Pour générer des XPaths, utilisez Fire Path (firebug).
Cependant, ils sont plus sujets à la régression car des changements mineurs dans le DOM les rendent incorrects ou font référence à un élément différent.
Par conséquent, l'utilisation de XPath absolu n'est pas considérée comme une bonne pratique dans la plupart des cas, mais elle résout le problème des éléments dynamiques.
Une autre méthode de gestion des éléments dynamiques consiste à rechercher tous les éléments portant le même nom de balise, puis à rechercher l'élément requis selon qu'il contient du texte, une valeur ou des attributs d'élément.
Cet article a montré comment utiliser les fonctions XPath contain(), start-with() et text() avec des attributs et du texte pour identifier de manière unique les éléments de la structure HTML DOM.
Dans Selenium, XPath est utilisé pour localiser des éléments lorsque d'autres localisateurs échouent. Il existe deux types de Selenium XPath : Absolute XPath et Relative XPath.
Source : Cet article a été initialement publié sur testgrid.io.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!