xpath functions dynamic xpath selenium
Цей посібник пояснює використання функцій XPath для ідентифікації елементів на прикладах:
Перед автоматизацією будь-якого веб-сайту необхідно правильно визначити об'єкт, перш ніж ми зможемо виконати будь-яку операцію над ним. Як ми знаємо, найпростіший спосіб ідентифікувати елемент - це за допомогою таких атрибутів, як ідентифікатор, ім’я, посилання, клас або будь-який інший унікальний атрибут, доступний разом із тегом, де знаходиться елемент.
Це можливо лише тоді, коли ці атрибути присутні та / або є унікальними, щоб об'єкт був ідентифікований правильно.
=> Погляньте тут на керівництво для початківців селену.
Що ви дізнаєтесь:
Огляд функцій XPath
Давайте обговоримо сценарій, коли атрибути недоступні.
Постановка проблеми
Як ми ідентифікуємо елемент, якщо в тегу елемента недоступні локатори, такі як ID, Name, Class, Link тощо?
Це можна зрозуміти чітко на наведеному прикладі:
Увійдіть до Twitter
Як ви можете бачити на наведеному вище знімку екрана, у заголовку «Увійти в Twitter» немає атрибутів. Сказавши це, ми не можемо використовувати будь-який з локаторів, таких як ID, Class, Link або Name, щоб ідентифікувати цей елемент.
які програми можуть редагувати PDF-файли
Плагін Firepath інструменту Firefox створив наведений нижче XPath:
// * (@ id = ’page-container’) / div / div (1) / h1
Ми не рекомендуємо використовувати вищезазначений XPath як структуру сторінки або ідентифікатор, оскільки він може динамічно змінюватися. Якщо ми все-таки використаємо цей нестабільний XPath, нам, можливо, доведеться частіше міняти XPath, що вимагає більше часу для обслуговування. Це один випадок, коли ми не можемо використовувати загальний вираз XPath з локаторами, такими як id, клас, ім’я чи посилання.
Рішення
Визначення елемента за допомогою функцій XPath за текстом
Оскільки у нас доступний видимий текст «Увійти в Twitter», ми скористаємось наступним Функції XPath для однозначної ідентифікації елемента.
- містить () (За текстом)
- починається з () (За текстом)
- текст ()
Функції XPath, такі як contains (), start-with () та text (), якщо вони використовуються за допомогою тексту “Увійти до Twitter”, допоможуть нам правильно визначити елемент, і з ним можна буде виконувати подальші операції.
# 1) Містить () Метод:
Синтаксис: Щоб знайти веб-елемент «Увійти в Twitter», скористайтеся будь-яким із наведених нижче виразів XPath, які містять метод contains ().
За текстом
- // h1 (містить (text (), ‘Увійти в’))
- // h1 (містить (text (), ‘in to Twitter’))
Примітка: 1 відповідний вузол означає, що веб-елемент успішно ідентифікований.
З наведеного вище прикладу зрозуміло, що методу contains () не потрібен абсолютний (повний) текст для правильної ідентифікації елемента. Часткового тексту достатньо, щоб його правильно визначити. Однак вибраний частковий текст повинен бути унікальним. Користувач може легко ідентифікувати елемент, навіть якщо орієнтація сторінки змінена за допомогою методу contains ().
Зверніть увагу, що навіть якщо ви використовуєте абсолютний текст 'Увійти в Twitter' із методом contains (), елемент буде визначений правильно.
# 2) Метод запускається з ():
Синтаксис: Щоб знайти веб-елемент «Увійти в Twitter», використовуйте такі зразки виразів XPath, які мають метод start-with ().
За текстом
- // h1 (починається з (text (), ‘Увійти’))
- // h1 (починається з (text (), ‘Увійти в’))
З наведеного вище прикладу зрозуміло, що для функцій XPath start-with () потрібне принаймні перше слово («Журнал») видимого тексту для однозначної ідентифікації елемента. Це також працює над частковим текстом і не вдасться, якщо ми не включимо перше слово частково видимого тексту.
Зверніть увагу, що навіть якщо ви використовуєте абсолютний текст 'Увійти в Twitter' з методом start-with (), елемент буде визначений правильно.
Недійсний XPath для запуску з (): // h1 (починається з (text (), ‘in to Twitter’))
Примітка: Жодні відповідні вузли не вказують на те, що веб-елемент не ідентифікований.
# 3) Метод Text ():
Синтаксис: Щоб знайти веб-елемент «Увійти в Twitter», використовуйте такий вираз XPath, що має метод text ().
У цьому виразі ми використовуємо абсолютний текст, який присутній між початковим тегом. Якщо ми використовуємо функцію text () з частковим Xpath, як це робимо в contains () і start-with (), ми не зможемо знайти елемент.
Недійсний Xpath для тексту ():
Визначення елемента за допомогою функцій XPath за атрибутом
Ми використовуємо функції XPath (містить або починається з) з атрибутом, коли в тегу контейнера доступні деякі унікально визначені значення атрибутів. Доступ до атрибутів здійснюється за допомогою символу “@”.
Це можна зрозуміти з урахуванням даного приклад:
Увійдіть до Google
# 1) Містить () Метод:
Синтаксис: Для унікального визначення елемента кнопки «Мені пощастить» за допомогою функції XPath містить () за допомогою атрибута.
(i) За атрибутом значення:
- // введення (містить (@ значення, ‘Відчуття’))
- // введення (містить (@ значення, 'Lucky'))
З наведених зображень зрозуміло, що використання значення атрибута з методом “Відчуття” або “Пощастило” з методом contains () дозволить однозначно ідентифікувати елемент. Однак важливо зазначити, що навіть якщо ми використовуємо повний вміст атрибута Value, він буде правильно визначати елемент.
(ii) За атрибутом Name:
//input(contains(@name=’btnI’))
Неприпустимий регістр для функції XPath з атрибутом:
Нам слід бути дуже обережними при виборі атрибута, який буде використовуватися разом із методами contains () та start-with (). Якщо значення атрибута не є унікальним, ми не зможемо однозначно ідентифікувати елемент.
Припустимо, якщо ми беремо атрибут „type”, коли визначаємо кнопку „Мені пощастить”, XPath не буде працювати.
2 узгоджувальні вузли вказують на те, що елемент не був ідентифікований правильно. Тут значення атрибута type не є унікальним.
# 2) Метод запускається з ():
Метод start-with () з атрибутом дуже корисний, коли нам доводиться знаходити елементи, колишня частина атрибута залишається фіксованою, тоді як пізня частина продовжує змінюватися. Цей підхід дуже корисний, коли об'єкти динамічно змінюють значення його атрибутів. Це також можна використовувати, якщо ми хочемо захопити подібні елементи.
Йти до facebook Ввійти
Огляньте перше текстове поле «Ім'я» та друге текстове поле «Прізвище» форми для реєстрації.
Визначено перше текстове поле «Ім'я».
Визначено друге текстове поле “Прізвище”.
В обох текстових полях, визначених для реєстрації на Facebook, початкова частина атрибутів id залишається незмінною.
Ім'я id = “u_0_2”
Ідентифікатор прізвища = ’u_0_4”
Це сценарій, коли ми можемо використовувати атрибут start-with (), щоб отримати всі елементи під таким типом атрибута id. Зверніть увагу, що ми беремо ці два поля лише для ознайомлення. Однак на екрані може бути більше полів з ідентифікаторами, які починаються з 'u_0_'.
Починається з () (За ідентифікатором атрибута)
//input(starts-with(@id,”u_0_”))
Важлива примітка: Тут ми використовували подвійні лапки замість одинарних лапок. Але одинарні лапки також працюватимуть із методом start-with.
11 узгоджувальних вузлів вказують на те, що цей XPath визначив усі елементи, які ідентифікатори починаються з “u_0_”. Остання частина ідентифікатора (2 для імені, 4 для прізвища тощо) визначає, як ми однозначно ідентифікуємо елемент.
Ми можемо використовувати атрибут функції start-with, де нам потрібно зібрати подібний тип елементів у списку, і динамічно вибрати один з них, обминаючи аргумент у загальному методі, щоб однозначно ідентифікувати елемент.
Будь ласка, дотримуйтесь наведеного нижче прикладу, щоб скористатися функцією запуску з нашою користю.
Зразок коду:
/* Generic Method */ public void xpathLoc(String identifier){ //The below step identifies the element “First Name” uniquely when the argument is “2” WebElement E1=d1.findElement(By.xpath('//input(starts-with(@id,”u_0_”+identifier ))')); E1.sendKeys(“Test1”); /* This step enters the value of First Name as “Test 1” */ } /* Main Method */ public static void main(String() args) { xpathLoc(“2”); --- This step calls the xpathLoc() method to identify the first name. }
Примітка: Eclipse може не допускати використання подвійних лапок. Можливо, вам доведеться вдатися до іншого коду, щоб зробити динамічний XPath.
Зразок коду наведено для довідки. Ви можете покращити його, щоб він містився у всіх елементах та операціях, які ви хочете виконати, і значеннях, які ви хочете ввести (у випадку текстових полів), щоб зробити код більш універсальним.
Висновок
У цій статті пояснено, як ми можемо використовувати XPath Functions містить (), починається з () та text () з атрибутом та текстом для унікальної ідентифікації елементів у структурі HTML DOM.
Нижче наведено деякі спостереження, які ми можемо зробити для функцій XPath:
- Використовуйте метод “contains ()” у XPath, якщо ви знаєте частково константний видимий текст або атрибут.
- Скористайтеся методом “start-with ()” у XPath, якщо ви знаєте початковий частковий константний видимий текст або атрибут.
- Ви також можете використовувати метод contains () і start-with () з абсолютним текстом або атрибутом.
- Використовуйте метод “text ()” у XPath, якщо вам відомий абсолютно видимий текст.
- Ви не можете використовувати метод text () з частковим текстом.
- Ви не можете використовувати метод start-with (), якщо початковий текст не використовується в XPath або якщо початковий текст постійно змінюється.
У наступному підручнику ми дізнаємося, як використовувати XPath Axes with XPath Functions для подальшого покращення розташування елементів на доступній веб-сторінці.
=> Прочитайте навчальну серію Easy Selenium.
Рекомендована література
- Локатори селену: виявлення веб-елементів за допомогою XPath у селені (приклади)
- Обробка веб-таблиць, кадрів та динамічних елементів у сценарії селену - Підручник з селену No18
- Функції рядка Python
- Постпроцесор Xpath Extractor у JMeter
- Знайти елемент селену за допомогою підручника з тексту з прикладами
- Підручник з огірка селену: інтеграція огірка Java Selenium WebDriver
- Всебічний підручник XPath - мова шляху XML
- Вступ до Selenium WebDriver - Підручник з селену №8