Как отказаться от XPath/CSS локаторов в тестах |
20.07.2023 00:00 | ||||||||||||
Автор: Куликов Дмитрий На сайте hh.ru есть около 100 вакансий, где навык составления XPath важен для работодателя, также в интернетах полно материалов, вроде шпаргалок по составлению локаторов или ворк-шопов на ютубе. Как-то у меня спросили на собеседовании про то, какой из языков построения локаторов использовать лучше XPath vs CSS, и я ответил — лучше использовать тестовые аттрибуты, а если мы их используем то и использовать эти языки необязательно. Скорее всего такой ответ не устроил, но я ответил честно, т.к на предыдущем месте мы старались не использовать XPath для решения этой задачи. Что это за зверь XPath XPath (XML Path Language) — это язык путей, использующий синтаксис, отличный от XML, для обеспечения адресации различных частей XML-документа. Существует несколько стандартов данного языка, XPath 3.1 - опубликован в 2017 году (с поддержкой карт, массивов и JSON). Селекторы XPath обычно называются «xpaths», и один xpath указывает пункт назначения от корня до желаемой конечной точки. Операторы
Функции concat(), substring(), contains(), substring-before() и многое другое Как это используется в тестахВ тестах мы вынуждены взаимодействовать с элементами HTML-страницы, а для этого нам нужны селекторы, чтобы обращаться к кнопкам, формам ввода, и другим элементам веб-интерфейса. К примеру, у нас есть простой html-документ, и нам нужно обратиться к элементу а, находящемуся внутри div
XPath-selector
CSS-selector
В тестах можем обращаться к этому локатору так
Почему этим пользуемся и почему это не оченьПредположу что есть несколько причин, по которым этот подход еще используется:
Если причиной является отсутствие уникальных тестовых аттрибутов и мы строим локатор, исходя из условий, скорее всего мы создаём нестабильный локатор, в не зависимости от того, насколько правильно он составлен. Если мы завязались на название класса, то в любой момент он может измениться, например при пересборке веб-пака, а при изменении расположения или при оборачивании в новый tag - изменится путь и локатор будет невалидным. Для тестов нам нужен стабильный, уникальный локатор, для этого правильным решением будет использовать тестовый аттрибут. Преимущества использования тестовых аттрибутов
Из минусов — упрощается парсинг, если локатор доступен извне. Поддержка тестовых атрибутов популярными фреймворками
Если внутри компании не принято решение о кастомном названии для тестовых аттрибутов, то можно использовать В Selenium из коробки отсутствует поддержка тест-аттрибутов, но можно выкрутиться вот так, а в дальнейшем, можно поддержать тестовое название внутри проекта
Как расставить тестовые локаторыСамое простое решение — создать задачу на доработку фронтенда, и закинуть в беклог, а затем при планировании, взять её в спринт, согласно приоритету. Но, если есть свободное время и желание, можно самостоятельно локально поднять и поковырять фронтенд. Обратить внимание на компонент, если он существует. Вариант первый (и самый простой) — добавление локатора напрямую
А можно добавить data-testid в сам компонент и при использовании компонента передать значение
Итог
Спасибо за прочтение |