xpath axes dynamic xpath selenium webdriver
Цей посібник пояснює осі XPath для динамічного XPath у Selenium WebDriver за допомогою різних використовуваних осей XPath, приклади та пояснення структури:
У попередньому підручнику ми дізналися про функції XPath та його значення в ідентифікації елемента. Однак коли кілька елементів мають занадто схожу орієнтацію та номенклатуру, стає неможливо ідентифікувати елемент однозначно.
=> Ознайомтесь з Ідеальним навчальним посібником із селену тут.
Що ви дізнаєтесь:
Розуміння осей XPath
Давайте розберемось у згаданому сценарії на прикладі.
Подумайте про сценарій, коли використовуються два посилання з текстом “Редагувати”. У таких випадках стає доречним зрозуміти вузлову структуру HTML.
Будь ласка, скопіюйте наведений нижче код у блокнот і збережіть його як файл .htm.
Edit Edit
Інтерфейс користувача буде виглядати так, як показано нижче:
Постановка проблеми
Q # 1) Що робити, коли навіть функції XPath не можуть ідентифікувати елемент?
Відповідь: У такому випадку ми використовуємо осі XPath разом із функціями XPath.
Друга частина цієї статті стосується того, як ми можемо використовувати ієрархічний формат HTML для ідентифікації елемента. Ми почнемо з отримання невеликої інформації про осі XPath.
Q # 2) Що таке осі XPath?
Відповідь: Осі XPath визначають набір вузлів щодо поточного (контекстного) вузла. Він використовується для пошуку вузла, який є відносно вузла в цьому дереві.
Q # 3) Що таке контекстний вузол?
Відповідь: Контекстний вузол можна визначити як вузол, який зараз переглядає процесор XPath.
Різні осі XPath, що використовуються при тестуванні селену
Існує тринадцять різних осей, перелічених нижче. Однак ми не збираємось використовувати їх усі під час тестування селену.
- предок : Ця вісь вказує на всіх предків щодо контекстного вузла, що також сягає до кореневого вузла.
- предок-або-я: Цей вказує на контекстний вузол та всіх предків відносно контекстного вузла та включає кореневий вузол.
- атрибут: Це вказує на атрибути контекстного вузла. Він може бути представлений символом “@”.
- дитина: Це вказує на потомки контекстного вузла.
- вниз: Це вказує на дітей, онуків та їх дітей (якщо такі є) контекстного вузла. Це НЕ вказує на атрибут та простір імен.
- нащадок або я: Це вказує на контекстний вузол і на дітей, і на онуків та їх дітей (якщо такі є) на контекстному вузлі. Це НЕ вказує на атрибут та простір імен.
- наступне: Це вказує на всі вузли, що з’являються після контекстний вузол у структурі HTML DOM. Це НЕ вказує на нащадок, атрибут та простір імен.
- наступні брати та сестри: Цей вказує на всі вузли братів або сестер (той самий батьківський, що і контекстний вузол) з'являються після вузла контексту в структурі HTML DOM. Це НЕ вказує на нащадок, атрибут та простір імен.
- простір імен: Це вказує на всі вузли простору імен контекстного вузла.
- батько: Це вказує на батьківський вузол контексту.
- попередні: Це вказує на всі вузли, що з’являються раніше контекстний вузол у структурі HTML DOM. Це НЕ вказує на нащадок, атрибут та простір імен.
- попередній брат: Цей вказує на всі вузли братів або сестер (той самий батьківський, що і контекстний вузол), що з’являються раніше контекстний вузол у структурі HTML DOM. Це НЕ вказує на нащадок, атрибут та простір імен.
- Я: Цей вказує на контекстний вузол.
Будова осей XPath
Розглянемо наведену нижче ієрархію, щоб зрозуміти, як працюють осі XPath.
Нижче наведено простий HTML-код для наведеного вище прикладу. Скопіюйте, вставте наведений нижче код у редактор блокнота та збережіть його як файл .html.
Animal
Vertebrate
Fish
Mammal
Herbivore
Carnivore
Lion
Tiger
Other
Invertebrate
Insect
Crustacean
Сторінка буде виглядати нижче. Наша місія полягає у використанні осей XPath для унікального пошуку елементів. Спробуємо визначити елементи, які позначені на діаграмі вище. Контекстним вузлом є “Ссавці”
# 1) Предк
Щоденник: Для ідентифікації елемента-предка з контекстного вузла.
XPath # 1: // div (@ class = ’Ссавці’) / predak :: div
XPath “// div (@ class =’ Mammal ’) / ancestor :: div” видає два відповідні вузли:
- Хребетні, оскільки вони є батьками «Ссавців», отже, їх також вважають прабатьками.
- Тварина, як батько батьків 'Ссавців', отже, її вважають предком.
Тепер нам потрібно лише визначити один елемент, який є класом “Тварина”. Ми можемо використовувати XPath, як зазначено нижче.
XPath#2: //div(@class='Mammal')/ancestor::div(@class='Animal')
Якщо ви хочете отримати текст “Тварина”, нижче можна використовувати XPath.
# 2) Предки або я
Щоденник: Для ідентифікації вузла контексту та елемента-предка з вузла контексту.
XPath # 1: // div (@ class = ’Ссавці’) / predak-or-self :: div
Вищевказаний XPath # 1 видає три відповідні вузли:
- Тварина (Предк)
- Хребетні
- Ссавці (самостійно)
# 3) Дитина
Щоденник: Визначити дочірній елемент контекстного вузла «Ссавці».
XPath # 1: // div (@ class = ’Ссавці’) / дитина :: div
XPath # 1 допомагає ідентифікувати всіх дочірніх елементів контекстного вузла «Ссавці». Якщо ви хочете отримати конкретний дочірній елемент, використовуйте XPath # 2.
XPath # 2: // div (@ class = ’Ссавці’) / дитина :: div (@ class = ’Травоїд’) / h5
# 4) Нащадок
Щоденник: Визначити дітей та онуків контекстного вузла (наприклад: „Тварина“).
XPath # 1: // div (@ class = ’Animal’) / нащадок :: div
Оскільки Animal є головним членом ієрархії, усі дочірні та нащадкові елементи отримують виділення. Ми також можемо змінити контекстний вузол для нашого посилання та використовувати будь-який потрібний елемент як вузол.
# 5) Нащадок або сам
Щоденник: Знайти саму стихію та її нащадків.
XPath1: // div (@ class = ’Animal’) / нащадок-або-сам :: div
Єдина відмінність між нащадком і нащадком або собою є те, що він виділяє себе на додаток до виділення нащадків.
# 6) Слідом
Щоденник: Щоб знайти всі вузли, що слідують за вузлом контексту. Тут контекстним вузлом є div, який містить елемент Ссавець.
XPath: // div (@ class = ’Ссавці’) / наступні :: div
У наступних осях виділяються всі вузли, що слідують за контекстним вузлом, будь то дочірній або нащадковий.
заміна потокового фільму сайту для фільму 4k
# 7) Наступний брат чи сестра
Щоденник: Щоб знайти всі вузли після вузла контексту, що мають однакові батьківські дані, і є братом або сестрою вузла контексту.
XPath: // div (@ class = ’Ссавці’) / follow-sibling :: div
Основна відмінність між наступним та наступним братом полягає в тому, що наступний брат приймає всі вузли братів або сестер після контексту, але також буде мати спільний доступ до одного батька.
# 8) Попередня
Щоденник: Він приймає всі вузли, що стоять перед вузлом контексту. Це може бути батьківський вузол чи вузол бабусь і дідусів.
Тут контекстним вузлом є Безхребетний, а виділені рядки на зображенні вище - це всі вузли, які передують вузлу Безхребетних.
# 9) Попередній рідний брат
Щоденник: Щоб знайти брата або сестру, які мають той самий батько, що і вузол контексту, і який стоїть перед вузлом контексту.
Оскільки контекстним вузлом є Безхребетне, виділений єдиний елемент - Хребетний, оскільки ці двоє є братами та сестрами та мають одного батьківського «Тварину».
# 10) Батько
Щоденник: Щоб знайти батьківський елемент контекстного вузла. Якщо сам контекстний вузол є предком, він не матиме батьківського вузла і не буде отримувати відповідних вузлів.
Контекстний вузол №1: Ссавці
XPath: // div (@ class = ’Ссавці’) / батьків :: div
Оскільки контекстним вузлом є Ссавці, елемент із Хребетними виділяється, оскільки він є батьківським для Ссавців.
Контекстний вузол No2: Тварина
XPath: // div (@ class = ’Animal’) / parent :: div
Оскільки сам вузол тварини є родоначальником, він не буде виділяти жодні вузли, а значить, не було знайдено відповідних вузлів.
# 11) Я
Щоденник: Для пошуку вузла контексту використовується self.
Контекстний вузол: Ссавці
XPath: // div (@ class = ’Ссавці’) / self :: div
Як ми бачимо вище, об’єкт ссавців ідентифікований однозначно. Ми також можемо вибрати текст «Ссавці, використовуючи XPath нижче.
XPath: // div (@ class = ’Ссавці’) / self :: div / h4
Використання попередньої та наступної осей
Припустимо, ви знаєте, що ваш цільовий елемент - це скільки тегів вперед або назад від контекстного вузла, ви можете безпосередньо виділити цей елемент, а не всі елементи.
Приклад: попереднє (з індексом)
Припустимо, що наш контекстний вузол - «Інший», і ми хочемо досягти елемента «Ссавець», для цього ми використаємо наведений нижче підхід.
Перший крок: Просто використовуйте попереднє, не вказуючи значення індексу.
XPath: // div (@ class = ’Other’) / preceding: div
Це дає нам 6 відповідних вузлів, і ми хочемо лише один цільовий вузол “Ссавець”.
Другий крок: Надайте значення індексу (5) елементу div (шляхом відліку вгору від контекстного вузла).
XPath: // div (@ class = ’Інше’) / попереднє :: div (5)
Таким чином, елемент «Ссавці» був ідентифікований успішно.
Приклад: наступний (з індексом)
Припустимо, що наш контекстний вузол - «Ссавці», і ми хочемо досягти елемента «Ракоподібні», для цього скористаємось наведеним нижче підходом.
Перший крок: Просто використовуйте наступне, не вказуючи значення індексу.
XPath: // div (@ class = ’Ссавці’) / наступні :: div
Це дає нам 4 відповідних вузла, і ми хочемо лише один цільовий вузол “Ракоподібні”
Другий крок: Дайте значення індексу (4) елементу div (відлічіть від контекстного вузла).
XPath: // div (@ class = ’Інше’) / наступне :: div (4)
Таким чином елемент «Ракоподібні» був успішно ідентифікований.
Вищевказаний сценарій також можна створити за допомогою попередній-брат і брати-сестри застосовуючи вищезазначений підхід.
Висновок
Ідентифікація об’єкта є найважливішим кроком в автоматизації будь-якого веб-сайту. Якщо ви можете набути навички точного вивчення об’єкта, 50% вашої автоматизації виконано. Хоча доступні локатори для ідентифікації елемента, є деякі випадки, коли навіть локатори не можуть ідентифікувати об'єкт. У таких випадках ми повинні застосовувати різні підходи.
Тут ми використовували функції XPath та осі XPath для унікальної ідентифікації елемента.
Завершуємо цю статтю, записавши кілька моментів, які слід пам’ятати:
- Не слід застосовувати осі 'предка' на контекстному вузлі, який сам по собі є попередником.
- Не слід застосовувати 'батьківські' осі на контекстному вузлі, який сам по собі є попередником.
- Не слід застосовувати 'дочірні' осі на контекстному вузлі самого контекстного вузла, який є нащадком.
- Не слід застосовувати осі 'нащадок' на контекстному вузлі, сам контекстний вузол є родоначальником.
- Не слід застосовувати 'наступні' осі на контекстному вузлі, це останній вузол у структурі документа HTML.
- Не слід застосовувати „попередні” осі на контекстному вузлі, це перший вузол у структурі документа HTML.
Щасливого навчання !!!
=> Завітайте сюди, щоб ознайомитись із ексклюзивними навчальними посібниками із селену.
Рекомендована література
- Функції XPath для динамічного XPath в селені
- Підручник з огірка селену: інтеграція огірка Java Selenium WebDriver
- Локатори селену: виявлення веб-елементів за допомогою XPath у селені (приклади)
- Вступ до Selenium WebDriver - Підручник з селену №8
- Підручник із селену ChromeDriver: Тести веб-драйверів на селен у Chrome
- Впровадження нашого першого сценарію WebDriver - Підручник № 10 для Selenium WebDriver
- 30+ найкращих підручників із селену: вивчіть селен на реальних прикладах
- Обробка веб-таблиць, кадрів та динамічних елементів у сценарії селену - Підручник з селену No18