XPath contient, après frère, ancêtre & Sélénium ET / OU

Table des matières:

Anonim

Si un simple XPath ne parvient pas à trouver un élément Web compliqué pour notre script de test, nous devons utiliser les fonctions de la bibliothèque XPath 1.0. Avec la combinaison de ces fonctions, nous pouvons créer XPath plus spécifique. Discutons de trois de ces fonctions -

  1. Contient
  2. Frère et sœur
  3. Ancêtre
  4. Et OU
  5. Parent
  6. Commence avec
  7. Haches XPath

Étudions-les en détail -

Que contient () dans Selenium?

contains () dans Selenium est une fonction dans l'expression Xpath qui est utilisée pour rechercher les éléments Web qui contiennent un texte particulier. Nous pouvons extraire tous les éléments qui correspondent à la valeur de texte donnée en utilisant la fonction XPath contains () sur toute la page Web. Contient dans XPath a la capacité de trouver l'élément avec du texte partiel.

Ex. Ici, nous recherchons une ancre. Contient du texte comme «SAP M».

"// h4 / a [contient (text (), 'SAP M')]"

REMARQUE: vous pouvez pratiquer l'exercice XPath suivant sur ce http://demo.guru99.com/test/selenium-xpath.html

Qu'est-ce que Sibling dans Selenium Webdriver?

Un frère dans Selenium Webdriver est une fonction utilisée pour récupérer un élément Web qui est un frère de l'élément parent. Si l'élément parent est connu, l'élément Web peut être facilement trouvé ou localisé qui peut utiliser l'attribut frère de l'expression Xpath dans sélénium webdriver.

Exemple de frère dans XPath: Ici, sur la base de l'élément frère de 'a', nous trouvons 'h4'

"// div [@ class = 'canvas- graph'] // a [@href = '/ accounts.html'] [i [@ class = 'icon-usd']] / following-sibling :: h4"

Ancêtre : Pour trouver un élément sur la base de l'élément parent, nous pouvons utiliser l'attribut ancêtre de XPath.

Permet de comprendre ces 3 fonctions à l'aide d'un exemple -

Étapes du test

Remarque: depuis la date de création du tutoriel, la page d'accueil de Guru99 a été mise à jour donc utilisez plutôt le site de démonstration pour exécuter des tests

  1. Allez sur http://demo.guru99.com/test/guru99home/
  2. Dans la section 'Quelques-uns de nos cours les plus populaires', recherchez tous les éléments Web qui sont frères d'un WebElement dont le texte est 'SELENIUM'
  3. Nous trouverons l'élément en utilisant le texte XPath contient, la fonction ancêtre et frère.

UTILISATION Contient et XPath Sibling

import java.util.List;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;classe publique SiblingAndParentInXpath {@Testpublic void testSiblingAndParentInXpath () {Pilote WebDriver;String driverPath = "C: \\ geckodriver.exe";System.setProperty ("webdriver.gecko.driver", driverPath);pilote = nouveau FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Elément de recherche dans 'Cours populaire' qui sont frères du contrôle 'SELENIUM', Ici nous trouverons d'abord un h2 dont le texte est '' Quelques-uns de nos cours les plus populaires '', puis nous passons à son élément parent qui est un ' div ', à l'intérieur de ce div nous trouverons un lien dont le texte est' SELENIUM 'puis enfin nous trouverons tous les éléments frères de ce lien (' SELENIUM ')List  dateBox = driver.findElements (By.xpath ("// h2 [contains (text (), 'Quelques-uns de nos cours les plus populaires' ')] / parent :: div // div [// a [text () = 'SELENIUM']] / suivant-frère :: div [@ class = 'rt-grid-2 rt-omega'] "));// Affiche tous les frères de l'élément nommé 'SELENIUM' dans 'Cours populaire'for (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.close ();}}

La sortie sera comme:

Ancêtre dans Selenium Webdriver

Ancestor dans Selenium Webdriver est une fonction utilisée pour trouver l'ancêtre d'un membre spécifique au niveau de la couche spécifiée. Le niveau de l'ancêtre à renvoyer ou le niveau de l'ancêtre par rapport au niveau du membre peut être spécifié explicitement. Il renvoie le nombre d'étapes hiérarchiques de l'ancêtre, localisant l'ancêtre spécifié que l'utilisateur souhaite.

Supposons maintenant que nous devions rechercher tous les éléments dans la section 'Cours populaire' avec l'aide de l'ancêtre de l'ancre dont le texte est 'SELENIUM'

Ici, notre requête xpath sera comme

"//div[.//a[text()='SELENIUM'[/.

Code complet

import java.util.List;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.Keys;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class AncestorInXpath {@Testpublic void testAncestorInXpath () {Pilote WebDriver = nouveau FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Recherche tous les éléments dans la section "Cours populaires"// à l'aide de l'ancêtre de l'ancre dont le texte est 'SELENIUM'List  dateBox = driver.findElements (By.xpath ("// div [.// a [text () = 'SELENIUM']] / ancestor :: div [@ class = 'rt-grid-2 rt- omega '] / suivant-frère :: div "));// Affiche tous les frères de l'élément nommé 'SELENIUM' dans 'Cours populaire'for (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.quit ();}}

La sortie ressemblera à-

Utilisation de AND et OR

En utilisant AND et OR, vous pouvez mettre 2 conditions dans notre expression XPath.

  • Dans le cas de AND, les deux conditions doivent être vraies alors seulement il trouve l'élément.
  • Dans le cas de OU l'une des 2 conditions doit être vraie, alors seulement il trouve l'élément.

Ici, notre requête XPath sera comme

Xpath = // * [@ type = 'submit' OR @ name = 'btnReset']
Xpath = // input [@ type = 'submit' and @ name = 'btnLogin']

Étapes du test:

  1. Allez sur http://demo.guru99.com/v1/
  2. Dans la section, utilisera le site de démonstration ci-dessus pour rechercher des éléments avec différentes fonctions de XPath.

Vous trouverez un élément utilisant les axes ET et OU, parent, commence par et XPath

ET OU Exemple

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;classe publique AND_OR {public static void main (String [] args) {Pilote WebDriver;WebElement w, x;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");pilote = nouveau ChromeDriver ();// Lancez l'applicationdriver.get ("https://www.guru99.com/");// Rechercher un élément en utilisant OR dans le xpathw = driver.findElement (By.xpath ("// * [@ type = 'submit' 'OR @ name =' btnReset ']"));// Imprimer le texte de l'élémentSystem.out.println (w.getText ());// Rechercher un élément en utilisant AND dans le xpathx = driver.findElement (By.xpath ("// input [@ type = 'submit' and @ name = 'btnLogin']"));// Imprimer le texte de l'élément recherchéSystem.out.println (x.getText ());// Ferme le navigateurdriver.quit ();}}

Qu'est-ce que Parent dans Selenium?

Parent dans Selenium est une méthode utilisée pour récupérer le nœud parent du nœud actuel sélectionné dans la page Web. C'est très utile dans la situation où vous sélectionnez un élément et devez obtenir l'élément parent à l'aide de Xpath. Cette méthode est également utilisée pour obtenir le parent du parent.

Ici, notre requête XPath sera comme

Xpath = // * [@ id = 'rt-feature'] // parent :: div

XPath utilisant Parent

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;Classe publique Parent {public static void main (String [] args) {Pilote WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");pilote = nouveau ChromeDriver ();// Lancez l'applicationdriver.get ("https://www.guru99.com/");// Recherche l'élément en utilisant PARENTw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // parent :: div"));// Imprimer le texte de l'élément recherchéSystem.out.println (w.getText ());// Ferme le navigateurdriver.quit ();}}

Commence avec

En utilisant la fonction Starts-with, vous pouvez trouver l'élément dont l'attribut change dynamiquement lors de l'actualisation ou d'autres opérations telles que cliquer, soumettre, etc.

Ici, notre requête XPath sera comme

Xpath = // étiquette [commence par (@ id, 'message')]

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;classe publique StartsWith {public static void main (String [] args) {Pilote WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");pilote = nouveau ChromeDriver ();// Lancez l'applicationdriver.get ("https://www.guru99.com/");// Recherche l'élément en utilisant commence parw = driver.findElement (By.xpath ("// étiquette [commence par (@ id, 'message')]"));// Imprimer le texte de l'élément recherchéSystem.out.println (w.getText ());// Ferme le navigateurdriver.quit ();}}

Axes Xpath

En utilisant les axes XPath, vous pouvez trouver les éléments dynamiques et très complexes sur une page Web. Les axes XPath contiennent plusieurs méthodes pour rechercher un élément. Ici, nous allons discuter de quelques méthodes.

suivant : Cette fonction retournera l'élément immédiat du composant particulier.

Ici, notre requête XPath sera comme

Xpath = // * [@ type = 'text'] // suivant :: input

XPath en utilisant les éléments suivants

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;classe publique Suivant {public static void main (String [] args) {Pilote WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");pilote = nouveau ChromeDriver ();// Lancez l'applicationdriver.get ("https://www.guru99.com/");// Recherche l'élément en utilisant la méthode suivantew = driver.findElement (By.xpath ("// * [@ type = 'text'] // suivant :: input"));// Imprimer le texte de l'élément recherchéSystem.out.println (w.getText ());// Ferme le navigateurdriver.quit ();}}

Précédente: Cette fonction retournera l'élément précédent de l'élément particulier.

Ici, notre requête XPath sera comme

Xpath = // * [@ type = 'submit'] // précédant :: input

XPath utilisant Preceding

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;classe publique Précédente {public static void main (String [] args) {Pilote WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");pilote = nouveau ChromeDriver ();// Lancez l'applicationdriver.get ("https://www.guru99.com/");// Recherche l'élément en utilisant la méthode précédentew = driver.findElement (By.xpath ("// * [@ type = 'submit'] // précédant :: input"));// Imprimer l'élément recherchéSystem.out.println (w.getText ());// Ferme le navigateurdriver.quit ();}}

d) Descendant: Cette fonction retournera l'élément descendant de l'élément particulier.

Ici, notre requête XPath sera comme

Xpath = // * [@ id = 'rt-feature'] // descendant :: a

XPath en utilisant Descendant

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;public class Descendant {public static void main (String [] args) {Pilote WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");pilote = nouveau ChromeDriver ();// Lancez l'applicationdriver.get ("https://www.guru99.com/");// Recherche l'élément en utilisant la méthode descendantew = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // descendant :: a"));// Imprimer l'élément recherchéSystem.out.println (w.getText ());// Ferme le navigateurdriver.quit ();}}

Résumé

  • Il existe certaines situations où XPath standard ne peut pas être utilisé pour trouver un élément. Dans une telle situation, nous avons besoin de fonctions différentes de la requête xpath.
  • Il y a quelques fonctions XPath importantes comme XPath contient, parent, ancêtres, suivant-frère, etc.
  • À l'aide de ces fonctions, vous pouvez créer des expressions XPath complexes.