Селектори
WebDriver протокол надає кілька типів селекторів для пошуку елемента. WebdriverIO спрощує їх, щоб зробити пошук елементів простішим. Зауважте, що попри те, що команди для пошуку елементів називаються $
та $$
, вони не мають нічого спільного з jQuery або Sizzle Selector Engine.
Зауважте, що не всі із великої кількості типів селекторів можуть забезпечити, надійний пошук потрібного вам елемента. Наприклад, маючи таку кнопку:
<button
id="main"
class="btn btn-large"
name="submission"
role="button"
data-testid="submit"
>
Submit
</button>
Ми рекомендуємо і не рекомендуємо наступні селектори:
Селектор | Використовувати | Роз'яснення |
---|---|---|
$('button') | 🚨 Ніколи | Найгірше – надто загальне, без контексту. |
$('.btn.btn-large') | 🚨 Ніколи | Поганий. Зв'язаний зі стилями. Дуже схильний до змін. |
$('#main') | ⚠️ Обережно | Краще. Але все ще зв'язаний зі стилями або слухачами подій JS. |
$(() => document.queryElement('button')) | ⚠️ Обережно | Ефективний, проте занадто складний для написання. |
$('button[name="submission"]') | ⚠️ Обережно | Зв'язаний із атрибутом name , який має семантику HTML. |
$('button[data-testid="submit"]') | ✅ Можна | Вимагає додаткових атрибутів, не пов'язаних із доступністю. |
$('aria/Submit') or $('button=Submit') | ✅ Завжди | Найкращий. Демонструє те, як користувач взаємодіє зі сторінкою. |
CSS селектори
Якщо не вказано інше, WebdriverIO шукатиме елементи за допомогою CSS селекторів, наприклад:
loading...
Текст посилання
Щоб отримати елемент посилання із певним текстом у ньому, вкажіть текст, починаючи зі знака рівності (=
).
Наприклад:
loading...
Ви можете знайти цей елемент, викликавши:
loading...
Частковий текст посилання
Щоб знайти елемент посилання, текст якого частково містить текст що ви шукаєте, використайте *=
перед вашим текстом (наприклад *=driver
).
Ви можете знайти елемент із прикладу вище, викликавши:
loading...
Примітка: Ви не можете поєднувати кілька типів пошуку в одному селекторі. Використовуйте кілька послідовних пошуків елементів для досягнення цієї мети, наприклад:
const elem = await $('header h1*=Welcome') // doesn't work!!!
// use instead
const elem = await $('header').$('*=driver')
Елемент з певним текстом
Цю ж техніку можна застосувати і до елементів.
Наприклад, ось запит для заголовка рівня 1 із текстом "Welcome to my Page":
loading...
Ви можете знайти цей елемент, викликавши:
loading...
Або використовуючи пошук за частковим збігом тексту:
loading...
Те саме працює для атрибутів id
та class
:
loading...
Ви можете знайти цей елемент, викликавши:
loading...
Примітка: Ви не можете поєднувати кілька типів пошуку в одному селекторі. Використовуйте кілька послідовних пошуків елементів для досягнення цієї мети, наприклад:
const elem = await $('header h1*=Welcome') // doesn't work!!!
// use instead
const elem = await $('header').$('h1*=Welcome')
Назва тегу
Щоб знайти елемент із певною назвою тегу, використовуйте <tag>
або <tag />
.
loading...
Ви можете знайти цей елемент, викликавши:
loading...
Атрибут name
Для запиту елементів із певним атрибутом name ви можете використовувати звичайний CSS селектор або спеціальний тип пошуку за цим атрибутом, що реалізований у JSONWire протоколі, вказавши щось на зразок [name="some-name"]
у своєму селекторі:
loading...
loading...
Примітка: Цей тип пошуку застарів та працює лише в старих браузерах, які працюють із JSONWire протоколом або з Appium.
xPath
Отримати доступ до елемента можна також через xPath.
Селектор xPath має такий формат: //body/div[6]/div[1]/span[1]
.
loading...
Ви можете знайти другий абзац, викликавши:
loading...
Ви також можете використовувати xPath для переходу вгору та вниз DOM деревом:
loading...
Ім'я доступності
Шукайте елементи за їхніми іменами доступності. Ім'я доступності – це те, що озвучується програмою зчитування з екрана, коли цей елемент отримує фокус. Значенням імені доступності може бути як візуальний вміст, так і прихований текст.
Ви можете прочитати більше про цей селектор у нашому блозі