XPath Indeholder: Tekst, Following Søskende og forfader i Selenium

Hvad er XPath Indeholder?

XPath indeholder er en funktion i Xpath udtryk, som bruges til at søge efter de webelementer, der indeholder en bestemt tekst. Vi kan udtrække alle de elementer, der matcher den givne tekstværdi ved hjælp af XPath contains()-funktionen på hele websiden. Indeholder i XPath har evnen til at finde elementet med delvis tekst.

Eksempel – indeholder tekst
Her er vi searching et anker .indeholder tekst som 'SAP M'.

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

XPath indeholder

BEMÆRK: Du kan øve following XPath øvelse om dette https://demo.guru99.com/test/selenium-xpath.html

Hvis en simpel XPath ikke er i stand til at finde et kompliceret webelement til vores testscript, skal vi bruge funktionerne fra XPath 1.0-biblioteket. Med kombinationen af ​​disse funktioner kan vi skabe mere specifik XPath.

Following Søskende i XPath

A Søskende i Selenium Webdriver er en funktion, der bruges til at hente et webelement, som er en søskende til det overordnede element. Hvis det overordnede element er kendt, kan webelementet let findes eller lokaliseres, der kan bruge søskendeattributten for Xpath-udtrykket i selenium webdriver.

Søskende i XPath Eksempel:
Her på baggrund af søskendeelementet 'a' finder vi 'h4'

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

Following Søskende i XPath

Forfader: For at finde et element på basis af det overordnede element kan vi bruge ancestor-attributten til XPath.

Following Søskende i XPath

Lad os forstå disse 3 funktioner ved hjælp af et eksempel -

Testtrin:

Bemærk: Siden oprettelsesdatoen for selvstudiet er hjemmesiden for Guru99 blevet opdateret, så brug demosiden i stedet for at køre tests

  1. Gå til https://demo.guru99.com/test/guru99home/
  2. I afsnittet 'Nogle af vores mest populære kurser', søg i alle webelementer, som er søskende til et webelement, hvis tekst er 'SELENIUM'
  3. Vi vil finde element ved hjælp af XPath-tekst indeholder ,forfader og søskendefunktion.

Following Søskende i XPath

BRUG Indeholder tekst og XPath-søskende

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;

public class SiblingAndParentInXpath {

    @Test

    public void testSiblingAndParentInXpath(){

    	WebDriver driver;
    	String driverPath = "C:\\geckodriver.exe";
    	System.setProperty("webdriver.gecko.driver", driverPath);
        driver = new FirefoxDriver();        
        
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://demo.guru99.com/test/guru99home/");

        //Search element inside 'Popular course' which are sibling of control 'SELENIUM' ,Here first we will find a h2 whose text is ''A few of our most popular courses' ,then we move to its parent element which is a 'div' , inside this div we will find a link whose text is 'SELENIUM' then at last we will find all of the sibling elements of this link('SELENIUM')
        
        List <WebElement> dateBox = driver.findElements(By.xpath("//h2[contains(text(),'A few of our most popular courses')]/parent::div//div[//a[text()='SELENIUM']]/following-sibling::div[@class='rt-grid-2 rt-omega']"));

        //Print all the which are sibling of the the element named as 'SELENIUM' in 'Popular course'
        for (WebElement webElement : dateBox) {
            System.out.println(webElement.getText());
        }     

        driver.close();
    }
}

Output vil være som:

BRUG Indeholder tekst og XPath-søskende

XPath Ancestor i Selenium

XPath Ancestor i Selenium er en funktion, der bruges til at finde stamfaderen til et specifikt medlem på det angivne lag. Niveauet af forfader, der skal returneres, eller niveau for forfader i forhold til niveau for medlemmet kan udtrykkeligt specificeres. Det returnerer antallet af hierarchical trin fra forfaderen, lokalisering af den specificerede forfader, som brugeren ønsker.

Antag nu, at vi skal søge efter alle elementer i sektionen 'Populært kursus' med hjælp fra forfaderen til ankeret, hvis tekst er 'SELENIUM'

Her vil vores xpath-forespørgsel være sådan

"//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega']/following-sibling::div"

Komplet kode

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{

@Test

    public void testAncestorInXpath(){

        WebDriver driver = new FirefoxDriver();             
		driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://demo.guru99.com/test/guru99home/");

        //Search All elements in 'Popular course' section 
		//with the help of ancestor of the anchor whose text is 'SELENIUM'

        List <WebElement> dateBox = driver.findElements(By.xpath("//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega']/following-sibling::div"));

        //Print all the which are sibling of the element named as 'SELENIUM' in 'Popular course'

        for (WebElement webElement : dateBox) {
            System.out.println(webElement.getText());
        }
     
        driver.quit();
    }
}

Output vil se ud -

Komplet kode

Brug AND og OR

Ved at bruge AND og OR kan du sætte 2 betingelser i vores XPath-udtryk.

  • I tilfælde af AND skulle begge 2 betingelser være sande, så er det kun den, der finder elementet.
  • I tilfælde af OR skulle en af ​​de 2 betingelser være sand, så er det kun den, der finder elementet.

Her vil vores XPath-forespørgsel se ud

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

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

Brug AND og OR

Testtrin:

  1. Gå til https://demo.guru99.com/v1/
  2. I afsnittet, vil bruge ovenstående demo site til at søge element med forskellige funktioner i XPath.

Du vil finde et element ved hjælp af AND og OR, parent, starter-with og XPath-akser

OG ELLER Eksempel

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class AND_OR {

	public static void main(String[] args) {
		WebDriver driver;
		WebElement w,x;
		System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe");
		 driver= new ChromeDriver();
 		 
         // Launch the application
     	 driver.get("https://www.guru99.com/");
     	 
     	//Search element using OR in the xpath
     	 w=driver.findElement(By.xpath("//*[@type='submit' OR @name='btnReset']"));
      	
     	 //Print the text of the element
			System.out.println(w.getText());
			
		//Search element using AND in the xpath
			x=driver.findElement(By.xpath("//input[@type='submit' and @name='btnLogin']"));	
			 
		//Print the text of the searched element
			System.out.println(x.getText());
			 
	//Close the browser
     driver.quit();
	}

}

XPath-forælder i Selenium

Forælder i Selenium er en metode, der bruges til at hente den overordnede node for den aktuelle node valgt på websiden. Det er meget nyttigt i den situation, hvor du vælger et element og skal hente det overordnede element ved hjælp af Xpath. Denne metode bruges også til at få forældrenes forælder.

Her vil vores XPath-forespørgsel se ud

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

XPath-forælder i Selenium

XPath ved hjælp af forældre

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;


public class Parent {

	public static void main(String[] args) {
		WebDriver driver;
		WebElement w;
		
		System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe");
		 driver= new ChromeDriver();
 		 
         // Launch the application
     	 driver.get("https://www.guru99.com/");
     	 
     	 //Search the element by using PARENT
     	 w=driver.findElement(By.xpath("//*[@id='rt-feature']//parent::div"));
      	
		//Print the text of the searched element
     	 System.out.println(w.getText());
	 
	//Close the browser
     driver.quit();

	}

}

Starter-med

Ved at bruge Starts-with-funktionen kan du finde det element, hvis attribut ændres dynamisk ved opdatering eller andet operafunktioner som klik, indsend osv.

Her vil vores XPath-forespørgsel se ud

Xpath=//label[starts-with(@id,'message')]

Starter-med

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;


public class StartsWith {

	public static void main(String[] args) {
		WebDriver driver;
		WebElement w;
		
		System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe");
		 driver= new ChromeDriver();
 		 
         // Launch the application
     	 driver.get("https://www.guru99.com/");
     	 
     	 //Search the element by using starts-with
     	 w=driver.findElement(By.xpath("//label[starts-with(@id,'message')]"));
     	
     	 //Print the text of the searched element
     	System.out.println(w.getText());
     	 
     	//Close the browser
	        driver.quit();
	}

}

Xpath akser

Ved at bruge XPath-akser kan du finde den dynamiske og meget complex elementer på en webside. XPath-akser indeholder flere metoder til at finde et element. Her vil diskutere et par metoder.

following: Denne funktion returnerer det umiddelbare element af den bestemte komponent.

Her vil vores XPath-forespørgsel se ud

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

XPath ved hjælp af Following
XPath ved hjælp af following
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;


public class Following {

	public static void main(String[] args) {
		WebDriver driver;
		WebElement w;
		
		System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe");
		 driver= new ChromeDriver();
 		 
         // Launch the application
     	 driver.get("https://www.guru99.com/");
     	 
     	 //Search the element by using Following method
     	 w=driver.findElement(By.xpath("//*[@type='text']//following::input"));
      	
		//Print the text of the searched element
     	 System.out.println(w.getText());
	 
	//Close the browser
     driver.quit();
	}

}

Foregående: Denne funktion returnerer det foregående element i det bestemte element.

Her vil vores XPath-forespørgsel se ud

Xpath= //*[@type='submit']//preceding::input

XPath ved hjælp af Preceding

XPath ved hjælp af Preceding
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;


public class Preceding {

	public static void main(String[] args) {
		
		WebDriver driver;
		WebElement w;
		
		System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe");
		 driver= new ChromeDriver();
 		 
         // Launch the application
     	 driver.get("https://www.guru99.com/");
     	 
     	 //Search the element by using preceding method
     	 w=driver.findElement(By.xpath("//*[@type='submit']//preceding::input"));
      	
		//Print the searched element
     	 System.out.println(w.getText());
	 
	//Close the browser
     driver.quit();

	}

}

d) Aftagende: Denne funktion returnerer det efterkommerelement af det bestemte element.

Her vil vores XPath-forespørgsel se ud

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

XPath ved hjælp af Descendant

XPath ved hjælp af 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) {
		WebDriver driver;
		WebElement w;
		System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe");
		 driver= new ChromeDriver();
 		 
         // Launch the application
     	 driver.get("https://www.guru99.com/");
     	 
     	 //Search the element by using descendant method
     	 w=driver.findElement(By.xpath("//*[@id='rt-feature']//descendant::a"));
      	
		//Print the searched element
     	 System.out.println(w.getText());
	 
	//Close the browser
     driver.quit();

	}

}

Resumé

  • Der er nogle situationer, hvor almindelig XPath ikke kan bruges til at finde et element. I en sådan situation har vi brug for andre funktioner end xpath-forespørgslen.
  • Der er nogle vigtige XPath-funktioner som XPath indeholder, forælder, forfædre, following- søskende osv.
  • Ved hjælp af disse funktioner kan du oprette complex XPath udtryk.