XPath obsahuje: text, následování sourozence a předka Selenium

Co obsahuje XPath?

XPath obsahuje je funkce ve výrazu Xpath, která se používá k vyhledávání prvků webu, které obsahují konkrétní text. Všechny prvky, které odpovídají dané textové hodnotě, můžeme extrahovat pomocí funkce XPath obsahuje() na celé webové stránce. Obsahuje v XPath má schopnost najít prvek s částečným textem.

Příklad – obsahuje text
Zde hledáme kotvu .obsahuje text jako „SAP M'.

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

XPath obsahuje

POZNÁMKA: Na tomto si můžete procvičit následující cvičení XPath https://demo.guru99.com/test/selenium-xpath.html

Pokud jednoduchý XPath není schopen najít složitý webový prvek pro náš testovací skript, musíme použít funkce z knihovny XPath 1.0. Kombinací těchto funkcí můžeme vytvořit konkrétnější XPath.

Sledování sourozence v XPath

A Sourozenec v Selenium Webdriver je funkce používaná k načtení webového prvku, který je sourozencem nadřazeného prvku. Pokud je znám nadřazený prvek, lze snadno najít nebo najít webový prvek, který může používat sourozenecký atribut výrazu Xpath v selenovém webovém ovladači.

Sourozenec v XPath Příklad:
Zde na základě sourozeneckého prvku „a“ nacházíme „h4“

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

Sledování sourozence v XPath

Předek: K nalezení prvku na základě rodičovského prvku můžeme použít atribut ancestor XPath.

Sledování sourozence v XPath

Pojďme pochopit tyto 3 funkce na příkladu –

Testovací kroky:

Poznámka: Od data vytvoření tutoriálu byla domovská stránka Guru99 aktualizována, takže ke spuštění testů použijte místo toho demo web

  1. Jít do https://demo.guru99.com/test/guru99home/
  2. V sekci „Několik našich nejoblíbenějších kurzů“ prohledejte všechny webové prvky, které jsou sourozenci webového prvku, jehož text je „SELENIUM“
  3. Najdeme prvek využívající XPath text obsahuje ,předek a sourozeneckou funkci.

Sledování sourozence v XPath

POUŽÍVÁNÍ Obsahuje Text a XPath Sourozence

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

Výstup bude takový:

POUŽÍVÁNÍ Obsahuje Text a XPath Sourozence

Předek XPath v Selenium

Předek XPath v Selenium je funkce sloužící k nalezení předka konkrétního členu na zadané vrstvě. Úroveň předka, která má být vrácena, nebo úroveň předka vzhledem k úrovni člena lze explicitně zadat. Vrací počet hierarchických kroků od předka a najde zadaného předka, kterého uživatel chce.

Nyní předpokládejme, že potřebujeme prohledat všechny prvky v sekci 'Populární kurz' s pomocí předka kotvy, jejíž text je 'SELENIUM'

Zde bude vypadat náš dotaz xpath

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

Kompletní kód

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

Výstup bude vypadat -

Kompletní kód

Pomocí AND a OR

Pomocí AND a OR můžete do našeho výrazu XPath vložit 2 podmínky.

  • V případě AND by měly být splněny obě 2 podmínky, pak prvek najde pouze on.
  • V případě OR by měla být splněna kterákoli ze 2 podmínek, pak prvek najde pouze ona.

Zde bude vypadat náš dotaz XPath

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

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

Pomocí AND a OR

Testovací kroky:

  1. Jít do https://demo.guru99.com/v1/
  2. V této sekci použijeme výše uvedenou ukázkovou stránku k vyhledání prvku s různými funkcemi XPath.

Prvek najdete pomocí AND a OR, rodičovské osy, os začíná s a XPath

A NEBO Příklad

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

}

Parent XPath v Selenium

Rodič v Selenium je metoda používaná k načtení nadřazeného uzlu aktuálního uzlu vybraného na webové stránce. Je to velmi užitečné v situaci, kdy vyberete prvek a potřebujete získat rodičovský prvek pomocí Xpath. Tato metoda se také používá k získání rodiče rodiče.

Zde bude vypadat náš dotaz XPath

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

Parent XPath v Selenium

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

	}

}

Začíná s

Pomocí funkce Starts-with můžete najít prvek, jehož atribut se dynamicky mění při obnově nebo jiných operacích, jako je kliknutí, odeslání atd.

Zde bude vypadat náš dotaz XPath

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

Začíná s

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

}

osy Xpath

Pomocí os XPath můžete na webové stránce najít dynamické a velmi složité prvky. Osy XPath obsahují několik metod k nalezení prvku. Zde budeme diskutovat o několika metodách.

následující: Tato funkce vrátí okamžitý prvek konkrétní komponenty.

Zde bude vypadat náš dotaz XPath

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

XPath pomocí následujícího
XPath pomocí následujícího
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();
	}

}

Předchozí: Tato funkce vrátí předchozí prvek konkrétního prvku.

Zde bude vypadat náš dotaz XPath

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

XPath pomocí předchozí

XPath pomocí předchozí
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) Klesající: Tato funkce vrátí potomek prvku konkrétního prvku.

Zde bude vypadat náš dotaz XPath

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

XPath pomocí Descendant

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

	}

}

Shrnutí

  • V některých situacích nelze k nalezení prvku použít běžnou cestu XPath. V takové situaci potřebujeme různé funkce z dotazu xpath.
  • Existují některé důležité funkce XPath, jako je XPath obsahuje, rodič, předci, následující sourozenec atd.
  • Pomocí těchto funkcí můžete vytvářet složité výrazy XPath. Pokud potřebujete pochopit, jak konkrétně používat obsahuje v XPath, funkce obsahuje v selenu poskytuje snadný způsob, jak prohledávat webové prvky na základě částečné shody textu.