Якщо простий XPath не може знайти складний веб-елемент для нашого тестового сценарію, нам потрібно скористатися функціями бібліотеки XPath 1.0. За допомогою комбінації цих функцій ми можемо створити більш конкретний XPath. Давайте обговоримо 3 такі функції -
- Містить
- Брат або сестра
- Предка
- І АБО
- Батько
- Починається з
- Сокири XPath
Давайте їх детально вивчимо -
Що містить () у селені?
contains () у Selenium - це функція у виразі Xpath, яка використовується для пошуку веб-елементів, що містять певний текст. Ми можемо витягти всі елементи, що відповідають заданому текстовому значенню, за допомогою функції XPath contains () по всій веб-сторінці. Містить у XPath має можливість знайти елемент із частковим текстом.
Напр. Тут ми шукаємо якір .містить текст як 'SAP M'.
"// h4 / a [містить (текст (), 'SAP M')]"
ПРИМІТКА. Ви можете практикувати наступні вправи XPath на цьому http://demo.guru99.com/test/selenium-xpath.html
Що таке брат або сестра в Selenium Webdriver?
Однорівнева в Selenium WebDriver це функція , яка використовується для вилучення веб - елемента , який представляє собою родинний до батьківського елементу. Якщо батьківський елемент відомий, тоді веб-елемент можна легко знайти або знайти, який може використовувати атрибут побратима виразу Xpath у селеновому веб-драйвері.
Приклад брата або сестри у XPath: Тут на основі елемента брата "a" ми знаходимо "h4"
"// div [@ class = 'canvas- graph'] // a [@href = '/ accounting.html'] [i [@ class = 'icon-usd']] / following-sibling :: h4"
Предк : Щоб знайти елемент на основі батьківського елемента, ми можемо використовувати атрибут предка XPath.
Давайте зрозуміємо ці 3 функції на прикладі -
Тестові кроки
Примітка: З дати створення підручника домашню сторінку Guru99 оновлено, тому використовуйте демонстраційний сайт, щоб запускати тести
- Перейдіть на сторінку http://demo.guru99.com/test/guru99home/
- У розділі "Деякі з наших найпопулярніших курсів" знайдіть усі веб-елементи, які є побратимами веб-елемента, текст якого "SELENIUM"
- Ми знайдемо елемент за допомогою тексту XPath, функції предків та братів або сестер.
ВИКОРИСТАННЯ Містить і XPath Sibling
імпортувати java.util.List;імпортувати java.util.concurrent.TimeUnit;імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.WebElement;імпорт org.openqa.selenium.firefox.FirefoxDriver;імпорт org.testng.annotations.Test;публічний клас SiblingAndParentInXpath {@ Тестpublic void testSiblingAndParentInXpath () {Драйвер WebDriver;Рядок driverPath = "C: \\ geckodriver.exe";System.setProperty ("webdriver.gecko.driver", driverPath);драйвер = новий FirefoxDriver ();driver.manage (). timeouts (). неявноWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Елемент пошуку в `` Популярному курсі '', який є побратимом управління `` SELENIUM ''. Тут спочатку ми знайдемо h2, текст якого - `` Кілька наших найпопулярніших курсів '', потім ми переходимо до його батьківського елемента, div ', всередині цього div ми знайдемо посилання, текст якого -' SELENIUM ', тоді нарешті ми знайдемо всі брати та елементи цього посилання (' SELENIUM ')СписокdateBox = driver.findElements (By.xpath ("// h2 [містить (текст (), 'Кілька наших найпопулярніших курсів')] / parent :: div // div [// a [текст () = 'SELENIUM']] / follow-sibling :: div [@ class = 'rt-grid-2 rt-omega'] "));// Роздрукувати всі елементи, які містять елемент елемента з іменем 'SELENIUM' у 'Популярному курсі'для (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.close ();}}
Результат буде таким:
Родоначальник у Selenium Webdriver
Родоначальник у Selenium Webdriver - це функція, яка використовується для пошуку предка певного члена на вказаному рівні. Рівень предка, що повертається, або рівень предка відносно рівня члена може бути явно вказаний. Він повертає кількість ієрархічних кроків від предка, знаходячи вказаного предка, якого бажає користувач.
Тепер припустимо, нам потрібно шукати всі елементи в розділі "Популярний курс" за допомогою предка якоря, текст якого "SELENIUM"
Тут наш запит xpath буде схожий
"//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega '] / following-sibling :: div"
Повний код
імпортувати java.util.List;імпортувати java.util.concurrent.TimeUnit;імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.Keys;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.WebElement;імпорт org.openqa.selenium.firefox.FirefoxDriver;імпорт org.testng.annotations.Test;публічний клас AncestorInXpath {@ Тестpublic void testAncestorInXpath () {Драйвер WebDriver = новий FirefoxDriver ();driver.manage (). timeouts (). неявноWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Пошук усіх елементів у розділі "Популярний курс"// за допомогою предка якоря, текст якого "SELENIUM"СписокdateBox = driver.findElements (By.xpath ("// div [.// a [text () = 'SELENIUM']] / предка :: div [@ class = 'rt-grid-2 rt- omega '] / follow-sibling :: div "));// Роздрукувати всі елементи, які містять елемент елемента з іменем "SELENIUM" у "Популярний курс"для (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.quit ();}}
Результат буде виглядати як-
Використання І та АБО
За допомогою AND та OR ви можете поставити 2 умови в наш вираз XPath.
- У випадку І обидві умови повинні бути істинними, тоді лише він знаходить елемент.
- У випадку АБО будь-яка з двох умов має бути істинною, тоді лише вона знаходить елемент.
Тут наш запит XPath буде схожий
Xpath = // * [@ type = 'submit' OR @ name = 'btnReset']
Xpath = // введення [@ type = 'submit' and @ name = 'btnLogin']
Тестові кроки:
- Перейдіть на сторінку http://demo.guru99.com/v1/
- У цьому розділі буде використано наведений вище демонстраційний сайт для пошуку елемента з різними функціями XPath.
Ви знайдете елемент, використовуючи AND і OR, батьківський, осі, що починаються, і XPath
І АБО Приклад
імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.WebElement;імпорт org.openqa.selenium.chrome.ChromeDriver;публічний клас AND_OR {public static void main (String [] args) {Драйвер WebDriver;WebElement w, x;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");драйвер = новий ChromeDriver ();// Запуск програмиdriver.get ("https://www.guru99.com/");// Пошук елемента за допомогою АБО у xpathw = driver.findElement (By.xpath ("// * [@ type = 'submit' OR @ name = 'btnReset']"));// Роздрукувати текст елементаSystem.out.println (w.getText ());// Пошук елемента за допомогою AND у xpathx = driver.findElement (By.xpath ("// введення [@ type = 'submit' and @ name = 'btnLogin']"));// Друк тексту шуканого елементаSystem.out.println (x.getText ());// Закрити браузерdriver.quit ();}}
Що таке батьківство в селені?
Parent in Selenium - це метод, який використовується для отримання батьківського вузла поточного вузла, вибраного на веб-сторінці. Це дуже корисно в ситуації, коли ви вибираєте елемент і потрібно отримати батьківський елемент за допомогою Xpath. Цей метод також використовується для отримання батьківського батька.
Тут наш запит XPath буде схожий
Xpath = // * [@ id = 'rt-feature'] // батьківський :: div
XPath за допомогою Parent
імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.WebElement;імпорт org.openqa.selenium.chrome.ChromeDriver;публічний клас Батько {public static void main (String [] args) {Драйвер WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");драйвер = новий ChromeDriver ();// Запуск програмиdriver.get ("https://www.guru99.com/");// Пошук елемента за допомогою PARENTw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // батьківський :: div"));// Друк тексту шуканого елементаSystem.out.println (w.getText ());// Закрити браузерdriver.quit ();}}
Починається з
За допомогою функції «Починається з» ви можете знайти елемент, атрибут якого динамічно змінюється під час оновлення або інших операцій, таких як клацання, надсилання тощо.
Тут наш запит XPath буде схожий
Xpath = // мітка [починається з (@ id, 'повідомлення')]
імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.WebElement;імпорт org.openqa.selenium.chrome.ChromeDriver;публічний клас StartsWith {public static void main (String [] args) {Драйвер WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");драйвер = новий ChromeDriver ();// Запуск програмиdriver.get ("https://www.guru99.com/");// Пошук елемента за допомогою start-withw = driver.findElement (By.xpath ("// мітка [починається з (@ id, 'повідомлення')]"));// Друк тексту шуканого елементаSystem.out.println (w.getText ());// Закрити браузерdriver.quit ();}}
Осі Xpath
Використовуючи осі XPath, ви можете знайти динамічні та дуже складні елементи на веб-сторінці. Осі XPath містять кілька методів пошуку елемента. Тут ми обговоримо кілька методів.
наступне : Ця функція поверне безпосередній елемент певного компонента.
Тут наш запит XPath буде схожий
Xpath = // * [@ type = 'text'] // наступне :: input
XPath, використовуючи наступне
імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.WebElement;імпорт org.openqa.selenium.chrome.ChromeDriver;публічний клас Підписка {public static void main (String [] args) {Драйвер WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");драйвер = новий ChromeDriver ();// Запуск програмиdriver.get ("https://www.guru99.com/");// Шукаємо елемент за допомогою наступного методуw = driver.findElement (By.xpath ("// * [@ type = 'text'] // наступне :: input"));// Друк тексту шуканого елементаSystem.out.println (w.getText ());// Закрити браузерdriver.quit ();}}
Попереднє: Ця функція повертає попередній елемент конкретного елемента.
Тут наш запит XPath буде схожий
Xpath = // * [@ type = 'submit'] // попереднє :: input
XPath за допомогою попереднього
імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.WebElement;імпорт org.openqa.selenium.chrome.ChromeDriver;публічний клас Попереднє {public static void main (String [] args) {Драйвер WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");драйвер = новий ChromeDriver ();// Запуск програмиdriver.get ("https://www.guru99.com/");// Пошук елемента за допомогою попереднього методуw = driver.findElement (By.xpath ("// * [@ type = 'submit'] // попереднє :: введення"));// Роздрукувати шуканий елементSystem.out.println (w.getText ());// Закрити браузерdriver.quit ();}}
г) Нащадок: Ця функція повертає нащадковий елемент конкретного елемента.
Тут наш запит XPath буде схожий
Xpath = // * [@ id = 'rt-feature'] // нащадок :: a
XPath з використанням нащадка
імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.WebElement;імпорт org.openqa.selenium.chrome.ChromeDriver;нащадок громадського класу {public static void main (String [] args) {Драйвер WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");драйвер = новий ChromeDriver ();// Запуск програмиdriver.get ("https://www.guru99.com/");// Пошук елемента за допомогою методу нащадкаw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // нащадок :: a"));// Роздрукувати шуканий елементSystem.out.println (w.getText ());// Закрити браузерdriver.quit ();}}
Резюме
- Бувають ситуації, коли звичайний XPath не можна використовувати для пошуку елемента. У такій ситуації нам потрібні різні функції із запиту xpath.
- Існують деякі важливі функції XPath, такі як XPath, батьківські елементи, предки, рідні брати тощо.
- За допомогою цих функцій ви можете створювати складні вирази XPath.