Селекторы
Протокол WebDriver предоставляет несколько стратегий селекторов для запроса элементов. WebdriverIO упрощает их, чтобы выбор элементов оставался простым. Обратите внимание, что хотя команды для запроса элементов называются $
и $$
, они не имеют ничего общего с jQuery или движком селекторов Sizzle.
Хотя доступно так много различных селекторов, только некоторые из них обеспечивают надежный способ найти правильный элемент. Например, для следующей кнопки:
<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') или $('button=Submit') | ✅ Всегда | Лучший вариант. Отражает то, как пользователь взаимодействует со страницей. Рекомендуется использовать файлы переводов вашего фронтенда, чтобы ваши тесты никогда не падали при обновлении переводов |
CSS-селектор запроса
Если не указано иное, WebdriverIO будет запрашивать элементы, используя шаблон CSS-селектора, например:
loading...
Текст ссылки
Чтобы получить элемент якоря с определенным текстом в нем, запросите те кст, начинающийся со знака равенства (=
).
Например:
loading...
Вы можете запросить этот элемент, вызвав:
loading...
Частичный текст ссылки
Чтобы найти элемент якоря, видимый текст которого частично соответствует вашему поисковому значению,
запросите его, используя *=
перед строкой запроса (например, *=driver
).
Вы можете запросить элемент из примера выше, также вызвав:
loading...
Примечание: Вы не можете смешивать несколько стратегий селекторов в одном селекторе. Используйте несколько цепочек запросов элементов для достижения той же цели, например:
const elem = await $('header h1*=Welcome') // не работает!!!
// используйте вместо этого
const elem = await $('header').$('*=driver')
Элемент с определенным текстом
Та же техника может быть применена и к элементам. Кроме того, также возможно выполнять сопоставление без учета регистра, используя .=
или .*=
в запросе.
Например, вот запрос для заголовка уровня 1 с текстом "Welcome to my Page":
loading...
Вы можете запросить этот элемент, вызвав:
loading...
Или используя запрос частичного текста:
loading...
То же самое работает для имен id
и class
:
loading...
Вы можете запросить этот элемент, вызвав:
loading...
Примечание: Вы не можете смешивать несколько стратегий селекторов в одном селекторе. Используйте несколько цепочек запросов элементов для достижения той же цели, например:
const elem = await $('header h1*=Welcome') // не работает!!!
// используйте вместо этого
const elem = await $('header').$('h1*=Welcome')
Имя тега
Чтобы запросить элемент с определенным именем тега, используйте <tag>
или <tag />
.
loading...
Вы можете запросить этот элемент, вызвав:
loading...
Атрибут Name
Для запроса элементов с определенным атрибутом name можно использовать либо обычный селектор CSS3, либо предоставленную стратегию имени из JSONWireProtocol, передав что-то вроде [name="some-name"] в качестве параметра селектора:
loading...
loading...
Примечание: Эта стратегия селектора устарела и работает только в старых браузерах, которые работают по протоколу JSONWireProtocol, или при использовании Appium.
xPath
Также возможно запрашивать элементы через определенный xPath.
Селектор xPath имеет формат типа //body/div[6]/div[1]/span[1]
.
loading...
Вы можете запросить второй параграф, вызвав:
loading...
Вы можете использовать xPath также для перемещения вверх и вниз по дереву DOM:
loading...
Селектор доступного имени
Запрашивайте элементы по их доступному имени. Доступное имя — это то, что объявляет программа чтения с экрана, когда этот элемент получает фокус. Значение доступного имени может быть как визуальным содержимым, так и скрытыми текстовыми альтернативами.
Вы можете узнать больше об этом селекторе в нашем блоге о выпуске
Извлечение по aria-label
loading...
loading...
Извлечение по aria-labelledby
loading...