Одним из самых важных аспектов тестирования пользовательского интерфейса (UI) с использованием таких инструментов, как Selenium, является выбор надежных локаторов для веб-элементов. XPath — мощный и гибкий способ поиска элементов, но при неосторожном использовании он может приводить к ошибкам. Следование лучшим практикам при написании XPath-выражений позволяет сделать ваши тесты стабильными, удобными для сопровождения и эффективными.
Друзья, поддержите нас вступлением в наш телеграм канал QaRocks. Там много туториалов, задач по автоматизации и книг по QA.
1. Предпочитайте относительный XPath абсолютному
Абсолютный XPath начинается от корня документа (/html/body/
) и следует по прямому пути к целевому элементу. Если структура страницы изменится хотя бы немного (например, добавится новый <div>
), ваш тест перестанет работать, так как весь путь нарушится.
2. Используйте уникальные атрибуты для поиска элементов
Уникальные атрибуты, такие как id
или name
, реже меняются и обеспечивают однозначное определение элемента. Если у элемента есть атрибут id
или name
, всегда предпочтительнее использовать его вместо сложных XPath-выражений.
3. Избегайте использования позиционной индексации (например, [1], [2] и т. д.)
Индексация основывается на позиции элементов внутри их родительского контейнера, а она легко может измениться. Например, добавление нового элемента в DOM может изменить позиции существующих элементов и привести к сбоям в тестах.
4. Осторожно используйте contains()
Функция contains()
дает больше гибкости, но может сделать ваш локатор менее надежным. Лучше искать элементы с использованием точного совпадения уникальных атрибутов. Кроме того, contains()
может замедлять производительность, если нужно обработать большой DOM.
5. Используйте normalize-space() для обработки пробелов
Функция normalize-space()
позволяет игнорировать лишние пробелы в тексте, что делает XPath более гибким при поиске элементов.
6. Учитывайте производительность: используйте CSS-селекторы, если это возможно
XPath универсален, но он обычно работает медленнее, чем CSS-селекторы, особенно при большом и сложном DOM. Если элемент можно найти с помощью CSS-селектора, это будет более производительно.
7. Будьте осторожны с динамическими атрибутами
Некоторые сайты используют динамические атрибуты, такие как случайно сгенерированные id
или class
, которые меняются при каждом обновлении страницы. Старайтесь не полагаться на такие атрибуты при написании XPath.
Пример динамического атрибута: //input[@id='random12345']
8. Комбинируйте несколько атрибутов для точности
Иногда ни один атрибут сам по себе не является уникальным для идентификации элемента. В таких случаях можно комбинировать несколько атрибутов, чтобы сделать локатор более точным.
Например:
//button[@class='submit-btn' and @data-action='submit' and @type='submit']
Кроме того, можно искать стабильные атрибуты или родительские элементы со статическими свойствами и использовать от них относительный путь.
9. Осторожно используйте функцию text()
Функция text()
полезна для поиска элементов с определенным текстом, но будьте осторожны, так как текст может часто меняться.
Пример удачного использования (если текст маловероятно изменится):
//div[text()='Пример текста']
10. Избегайте ненужного использования осей XPath
Оси XPath — это специальные ключевые слова, которые позволяют перемещаться по дереву DOM относительно выбранного элемента. Оси following-sibling
, preceding
, ancestor
и другие, могут делать ваши локаторы сложными и замедлять их работу. Используйте их только при необходимости.
11. Делайте XPath максимально короткими и простыми
Короткие и простые XPath-выражения обычно быстрее и легче поддерживать.
12. Документируйте сложные XPath
Если вам необходимо использовать сложное XPath-выражение, добавьте комментарий, объясняющий, почему оно необходимо и какой элемент оно находит. Это облегчит дальнейшее сопровождение.
Следуя этим лучшим практикам, ваши скрипты для автоматизации UI будут более надежными, простыми для сопровождения и устойчивыми к изменениям в структуре DOM.
Перевод статьи «Best Practices for Selecting XPath Locators in UI Automation».