XPath bevat: tekst, volgende broer of zus en voorouder in Selenium

Wat bevat XPath?

XPath bevat is een functie binnen de Xpath-expressie die wordt gebruikt om te zoeken naar webelementen die een bepaalde tekst bevatten. We kunnen alle elementen extraheren die overeenkomen met de gegeven tekstwaarde met behulp van de XPath contain() functie op de hele webpagina. Bevat in XPath heeft de mogelijkheid om het element met gedeeltelijke tekst te vinden.

Voorbeeld – bevat tekst
Hier zoeken we een anker. bevat tekst als 'SAP M'.

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

XPath bevat

OPMERKING: U kunt de volgende XPath-oefening op deze https://demo.guru99.com/test/selenium-xpath.html

Als een eenvoudige XPath kan geen ingewikkeld webelement vinden voor ons testscript, we moeten de functies uit de XPath 1.0-bibliotheek gebruiken. Met de combinatie van deze functies kunnen we specifiekere XPath creëren.

Broer of zus volgen in XPath

A Broertje binnen Selenium Webstuurprogramma is een functie die wordt gebruikt om een ​​webelement op te halen dat een sibling is van het parent element. Als het parent element bekend is, kan het webelement eenvoudig worden gevonden of gelokaliseerd dat het sibling attribuut van de Xpath expressie in selenium webdriver kan gebruiken.

Broer of zus in XPath Voorbeeld:
Hier vinden we op basis van het broer-zuselement van 'a' 'h4'

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

Broer of zus volgen in XPath

Voorvader: Om een ​​element te vinden op basis van het ouderelement kunnen we het voorouderattribuut van XPath gebruiken.

Broer of zus volgen in XPath

Laten we deze 3 functies begrijpen aan de hand van een voorbeeld:

Teststappen:

Opmerking: Sinds de datum waarop de tutorial is gemaakt, is de startpagina van Guru99 bijgewerkt, dus gebruik in plaats daarvan de demosite om tests uit te voeren

  1. Ga naar https://demo.guru99.com/test/guru99home/
  2. Zoek in de sectie 'Een paar van onze populairste cursussen' naar alle webelementen die een broer of zus zijn van een webelement waarvan de tekst 'SELENIUM' is
  3. We zullen ontdekken dat elementen die XPath-tekst gebruiken de functie voorouder en broer of zus bevatten.

Broer of zus volgen in XPath

GEBRUIKEN Bevat tekst en 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;

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();
    }
}

De uitvoer zal er als volgt uitzien:

GEBRUIKEN Bevat tekst en XPath Sibling

XPath-voorouder in Selenium

XPath-voorouder in Selenium is een functie die wordt gebruikt om de voorouder van een specifiek lid op de opgegeven laag te vinden. Het niveau van de voorouder dat moet worden geretourneerd of het niveau van de voorouder ten opzichte van het niveau van het lid kan expliciet worden opgegeven. Het retourneert het aantal hiërarchische stappen vanaf de voorouder, waarbij de opgegeven voorouder wordt gevonden die de gebruiker wil.

Stel nu dat we alle elementen in de sectie 'Populaire cursus' moeten doorzoeken met behulp van de voorouder van het anker waarvan de tekst 'SELENIUM' is.

Hier zal onze xpath-query er zo uitzien

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

Volledige code

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();
    }
}

De uitvoer ziet er zo uit:

Volledige code

Met EN en OF

Door AND en OR te gebruiken, kunt u 2 voorwaarden in onze XPath-expressie plaatsen.

  • In het geval van AND moeten beide voorwaarden waar zijn, dan wordt alleen het element gevonden.
  • In het geval van OR zou een van de twee voorwaarden waar moeten zijn, dan wordt alleen het element gevonden.

Hier zal onze XPath-query er zo uitzien

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

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

Met EN en OF

Teststappen:

  1. Ga naar https://demo.guru99.com/v1/
  2. In de sectie zal de bovenstaande demosite worden gebruikt om elementen met verschillende functies van XPath te zoeken.

U zult een element vinden met de assen AND en OR, parent, starts-with en XPath

EN OF Voorbeeld

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-ouder in Selenium

Ouder binnen Selenium is een methode die wordt gebruikt om het bovenliggende knooppunt op te halen van het huidige knooppunt dat op de webpagina is geselecteerd. Het is erg handig in de situatie waarin u een element selecteert en het bovenliggende element moet ophalen met behulp van Xpath. Deze methode wordt ook gebruikt om de ouder van de ouder te achterhalen.

Hier zal onze XPath-query er zo uitzien

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

XPath-ouder in Selenium

XPath met behulp van Parent

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();

	}

}

Begint met

Met de functie Starts-with kunt u het element vinden waarvan het kenmerk dynamisch verandert bij vernieuwing of andere bewerkingen, zoals klikken, verzenden, enz.

Hier zal onze XPath-query er zo uitzien

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

Begint met

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-assen

Met XPath-assen kunt u de dynamische en zeer complexe elementen op een webpagina vinden. XPath-assen bevatten verschillende methoden om een ​​element te vinden. Hier bespreken we een paar methoden.

volgend: Deze functie retourneert het directe element van het specifieke onderdeel.

Hier zal onze XPath-query er zo uitzien

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

XPath met behulp van Volgen
XPath gebruikt het volgende
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();
	}

}

Voorafgaand: Deze functie retourneert het voorgaande element van het specifieke element.

Hier zal onze XPath-query er zo uitzien

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

XPath met behulp van Vooraf

XPath met behulp van Vooraf
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) Aflopend: Deze functie retourneert het afstammende element van het specifieke element.

Hier zal onze XPath-query er zo uitzien

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

XPath met Descendant

XPath met 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();

	}

}

Samenvatting

  • Er zijn situaties waarin gewone XPath niet kan worden gebruikt om een ​​element te vinden. In een dergelijke situatie hebben we verschillende functies nodig van de xpath-query.
  • Er zijn een aantal belangrijke XPath-functies, zoals XPath bevat, ouder, voorouders, volgende broer of zus, etc.
  • Met behulp van deze functies kunt u complexe XPath-expressies maken.