XPath містить: текст, наступний брат і предок у Selenium
Що таке XPath містить?
XPath містить це функція у виразі Xpath, яка використовується для пошуку веб-елементів, які містять певний текст. Ми можемо витягти всі елементи, які відповідають заданому текстовому значенню, використовуючи функцію XPath contains() на всій веб-сторінці. Contains у XPath має можливість знаходити елемент із частковим текстом.
Приклад – містить текст
Тут ми шукаємо прив’язку .містить текст як 'SAP М'.
"//h4/a[contains(text(),'SAP M')]"
ПРИМІТКА. Ви можете виконати наведену нижче вправу 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.
Давайте зрозуміємо ці 3 функції на прикладі –
Кроки тесту:
Примітка: З дати створення підручника домашню сторінку Guru99 було оновлено, тому використовуйте демонстраційний сайт замість того, щоб запускати тести
- Перейдіть до https://demo.guru99.com/test/guru99home/
- У розділі «Декілька наших найпопулярніших курсів» виконайте пошук у всіх веб-елементах, які є рідними для WebElement, текст якого «SELENIUM»
- Ми знайдемо елемент за допомогою функції XPath text contains ,ancestor and sibling.
ВИКОРИСТАННЯ Містить 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(); } }
Вихід буде таким:
Предок 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']
Кроки тесту:
- Перейдіть до https://demo.guru99.com/v1/
- У розділі буде використано наведений вище демонстраційний сайт для пошуку елементів із різними функціями 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
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
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
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
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 забезпечує простий спосіб пошуку веб-елементів на основі часткового збігу тексту.