Веб-драйверы и библиотеки тестирования, такие как WebdriverIO, активно используются для автоматизации тестирования интерфейсов приложений. Эффективность автоматических тестов напрямую зависит от того, насколько правильно и точно выбран селектор для элементов на странице. Неправильно выбранный селектор может привести к нестабильности тестов и затруднениям в их поддержке. В этой главе рассматриваются лучшие практики выбора селекторов, их типы и методы использования в WebdriverIO.
Для поиска элементов на веб-странице WebdriverIO предоставляет различные способы выбора элементов. Основные типы селекторов включают:
Каждый из этих типов имеет свои особенности и случаи применения, и важно понимать, какой из них выбрать для каждой конкретной ситуации.
CSS-селекторы являются одними из самых быстрых и популярных для
поиска элементов. Они используют атрибуты HTML, такие как
id, class, name, а также
псевдоклассы и псевдоэлементы.
Пример CSS-селектора:
const element = $('#button-id');
Преимущества:
Недостатки:
Чтобы правильно использовать CSS-селекторы, следует избегать
применения слишком общих или часто повторяющихся атрибутов, таких как
class или name, если они используются для
нескольких элементов на странице.
XPath-селекторы основаны на языке запросов для XML-документов, и они позволяют находить элементы не только по их атрибутам, но и по отношению к другим элементам на странице.
Пример XPath-селектора:
const element = $('//button[@id="button-id"]');
Преимущества:
Недостатки:
XPath особенно полезен, когда необходимо найти элементы, основываясь на их контексте или сложной структуре DOM.
Текстовые селекторы позволяют находить элементы по тексту, который
содержится внутри них. В WebdriverIO для этого можно использовать метод
.getText().
Пример текстового селектора:
const element = $('=Текст на кнопке');
Преимущества:
Недостатки:
Текстовые селекторы полезны, когда интерфейс содержит кнопки, ссылки или другие элементы, которые имеют понятные и уникальные надписи.
Для поиска элементов можно также использовать их свойства. Это может быть полезно, если нужно взаимодействовать с элементами, которые не имеют уникальных классов или идентификаторов.
Пример:
const element = $('input[name="email"]');
Преимущества:
name, type, value.Недостатки:
При выборе атрибута важно убедиться, что его значение уникально и стабильно для всех страниц и состояний веб-приложения.
Правильный селектор должен быть уникальным и стабильным, чтобы тесты
не ломались при изменении других элементов на странице. Лучший способ
достичь этого — использовать уникальные атрибуты, такие как
id или уникальные data-* атрибуты. Если
атрибуты, такие как class, используются для нескольких
элементов, это может привести к нестабильности тестов.
Пример использования уникального атрибута:
const element = $('[data-testid="unique-element"]');
Селекторы должны быть как можно более независимыми от изменений внешнего контента, таких как текст или стиль. Например, лучше избегать использования селекторов, основанных на тексте, если этот текст может измениться.
Пример:
const element = $('.login-button'); // Хорошо, если класс стабильный
В некоторых случаях элементы можно найти с помощью относительных селекторов, таких как XPath. Они позволяют находить элементы в контексте других элементов.
Пример использования XPath:
const element = $('//div[@class="form"]/button[text()="Submit"]');
Это полезно, когда элементы имеют сложную структуру или не имеют уникальных атрибутов.
Использование ID Применение id —
один из самых быстрых методов, так как браузеры оптимизируют работу с
ними. Если возможно, используйте атрибут id для выбора
элементов.
Сложные CSS-селекторы Использование длинных или сложных CSS-селекторов может замедлить выполнение тестов, так как браузер должен обработать множество атрибутов и псевдоклассов. Лучше избегать чрезмерно длинных цепочек селекторов.
Избегайте использования * Селекторы
типа * для поиска всех элементов на странице или в
контейнере являются очень затратными по времени и могут существенно
замедлить выполнение тестов.
Ограничение поиска Чтобы улучшить производительность, можно ограничить область поиска элементов. Например, сначала получить родительский элемент, а потом искать в нем дочерние элементы.
При разработке тестов важно регулярно проверять правильность выбора селекторов. Для этого можно использовать инструменты разработчика в браузере (например, Chrome DevTools), чтобы убедиться в уникальности и правильности выбранных селекторов.
Пример проверки:
const element = $('#button-id');
console.log(element.isDisplayed());
Для отладки WebdriverIO поддерживает различные методы, такие как
debug() и pause(), чтобы приостановить
выполнение тестов и проверить состояние элементов на странице.
id или data-*.data-*
атрибуты или уникальные классы.* или сложные XPath-выражения, если есть более
быстрые и стабильные альтернативы.Правильный выбор селектора — ключ к стабильным и быстрым тестам.