XPath містить: текст, наступний брат і предок у Selenium

Що таке XPath містить?

XPath містить це функція у виразі Xpath, яка використовується для пошуку веб-елементів, які містять певний текст. Ми можемо витягти всі елементи, які відповідають заданому текстовому значенню, використовуючи функцію XPath contains() на всій веб-сторінці. Contains у XPath має можливість знаходити елемент із частковим текстом.

Приклад – містить текст
Тут ми шукаємо прив’язку .містить текст як 'SAP М'.

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

XPath містить

ПРИМІТКА. Ви можете виконати наведену нижче вправу XPath щодо цього https://demo.guru99.com/test/selenium-xpath.html

Якщо простий XPath не може знайти складний веб-елемент для нашого тестового сценарію, нам потрібно використовувати функції з бібліотеки XPath 1.0. За допомогою комбінації цих функцій ми можемо створити більш специфічний XPath.

Слідкуйте за братом у XPath

A Брат і сестра в Selenium Веб-драйвер це функція, яка використовується для отримання веб-елемента, який є братом батьківського елемента. Якщо батьківський елемент відомий, тоді веб-елемент можна легко знайти або розташувати, який може використовувати однорідний атрибут виразу Xpath у веб-драйвері selenium.

Приклад брата в XPath:
Тут на основі елемента-брата 'a' ми знаходимо 'h4'

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

Слідкуйте за братом у XPath

Предка: Щоб знайти елемент на основі батьківського елемента, ми можемо використати атрибут предка XPath.

Слідкуйте за братом у XPath

Давайте зрозуміємо ці 3 функції на прикладі –

Кроки тесту:

Примітка: З дати створення підручника домашню сторінку Guru99 було оновлено, тому використовуйте демонстраційний сайт замість того, щоб запускати тести

  1. Перейдіть до https://demo.guru99.com/test/guru99home/
  2. У розділі «Декілька наших найпопулярніших курсів» виконайте пошук у всіх веб-елементах, які є рідними для WebElement, текст якого «SELENIUM»
  3. Ми знайдемо елемент за допомогою функції XPath text contains ,ancestor and sibling.

Слідкуйте за братом у XPath

ВИКОРИСТАННЯ Містить Text і 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();
    }
}

Вихід буде таким:

ВИКОРИСТАННЯ Містить Text і XPath Sibling

Предок XPath в Selenium

Предок XPath в Selenium це функція, яка використовується для пошуку предка певного члена на вказаному рівні. Можна явно вказати рівень предка, який потрібно повернути, або рівень предка відносно рівня члена. Він повертає кількість ієрархічних кроків від предка, знаходячи вказаного предка, якого бажає користувач.

Тепер припустімо, що нам потрібно виконати пошук у всіх елементах у розділі «Популярний курс» за допомогою предка прив’язки, текст якої «SELENIUM»

Ось такий наш запит xpath

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

Повний код

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

Вихід виглядатиме як-

Повний код

Використання І та АБО

Використовуючи І та АБО, ви можете поставити 2 умови у наш вираз XPath.

  • У випадку І обидві 2 умови мають бути істинними, тоді лише він знаходить елемент.
  • У випадку АБО будь-яка з двох умов має бути істинною, тоді лише вона знаходить елемент.

Ось такий наш запит XPath

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

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

Використання І та АБО

Кроки тесту:

  1. Перейдіть до https://demo.guru99.com/v1/
  2. У розділі буде використано наведений вище демонстраційний сайт для пошуку елементів із різними функціями XPath.

Ви знайдете елемент за допомогою осей І та АБО, батьківського елемента, осі починається з і XPath

І АБО Приклад

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

Батько в Selenium це метод, який використовується для отримання батьківського вузла поточного вузла, вибраного на веб-сторінці. Це дуже корисно в ситуації, коли ви вибираєте елемент і вам потрібно отримати батьківський елемент за допомогою Xpath. Цей метод також використовується для отримання батьківського батька.

Ось такий наш запит XPath

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

XPath Parent in Selenium

XPath використовує 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();

	}

}

Починається-з

Використовуючи функцію Starts-with, ви можете знайти елемент, атрибут якого динамічно змінюється під час оновлення або інших операцій, таких як клацання, надсилання тощо.

Ось такий наш запит XPath

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

Починається-з

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

Використовуючи осі XPath, ви можете знайти динамічні та дуже складні елементи на веб-сторінці. Осі XPath містять кілька методів пошуку елемента. Тут ми обговоримо кілька методів.

після: Ця функція повертає безпосередній елемент певного компонента.

Ось такий наш запит XPath

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

XPath за допомогою Following
XPath використовує наступне
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();
	}

}

Попередній: Ця функція повертає попередній елемент певного елемента.

Ось такий наш запит XPath

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

XPath з використанням Preceding

XPath з використанням 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) Нащадок: Ця функція повертає елемент-нащадок конкретного елемента.

Ось такий наш запит XPath

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

XPath з використанням нащадка

XPath з використанням нащадка
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();

	}

}

Підсумки

  • Бувають ситуації, коли звичайний XPath не може бути використаний для пошуку елемента. У такій ситуації нам потрібні різні функції із запиту xpath.
  • Існує кілька важливих функцій XPath, таких як XPath contains, parent, ancestors, follow-sibling тощо.
  • За допомогою цих функцій можна створювати складні вирази XPath. Якщо вам потрібно зрозуміти, як використовувати містить саме в XPath, функція contains in selenium забезпечує простий спосіб пошуку веб-елементів на основі часткового збігу тексту.