XPath содержит: текст, следующий за родственным элементом и предком в Selenium

Что содержит XPath?

XPath содержит — это функция в выражении Xpath, которая используется для поиска веб-элементов, содержащих определенный текст. Мы можем извлечь все элементы, соответствующие заданному текстовому значению, с помощью функции XPath 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

Давайте разберемся с этими тремя функциями на примере:

Этапы тестирования:

Примечание: С момента создания руководства домашняя страница Guru99 была обновлена, поэтому вместо этого используйте демонстрационный сайт для запуска тестов.

  1. Перейдите на https://demo.guru99.com/test/guru99home/
  2. В разделе «Несколько наших самых популярных курсов» найдите все веб-элементы, которые являются родственными веб-элементам с текстом «SELENIUM».
  3. Мы найдем элемент, используя текст XPath, содержащий функцию предка и родственную функцию.

Следование за братом в XPath

USING Содержит текст и родственный XPath

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

Результат будет таким:

USING Содержит текст и родственный XPath

Предок 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();
    }
}

Вывод будет выглядеть так:

Полный код

Использование И и ИЛИ

Используя AND и OR, вы можете поместить два условия в наше выражение XPath.

  • В случае И оба условия должны быть истинными, только тогда элемент будет найден.
  • В случае ИЛИ любое из двух условий должно быть истинным, только тогда элемент будет найден.

Здесь наш запрос XPath будет выглядеть так:

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

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

Использование И и ИЛИ

Этапы тестирования:

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

Вы найдете элемент, используя оси AND и OR, родительский элемент, начало с и 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 в Selenium

Родитель в Selenium — это метод, используемый для получения родительского узла текущего узла, выбранного на веб-странице. Это очень полезно в ситуации, когда вы выбираете элемент и вам нужно получить родительский элемент с помощью Xpath. Этот метод также используется для получения родительского объекта родителя.

Здесь наш запрос XPath будет выглядеть так:

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

Родитель XPath в Selenium

XPath с использованием родителя

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 с использованием следующего
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 с использованием предыдущего

XPath с использованием предыдущего
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, родительский элемент, предки, следующий брат и т. д.
  • С помощью этих функций вы можете создавать сложные выражения XPath.