XPath (XML Path Language) — это язык запросов, который используется для выборки данных из документов XML и HTML. В контексте тестирования веб-приложений с использованием Playwright XPath является мощным инструментом для поиска элементов на веб-странице. Несмотря на то, что Playwright изначально ориентирован на использование CSS-селекторов, XPath может быть полезен в тех случаях, когда CSS-селекторы не дают должной гибкости или когда необходимо найти элемент, используя сложные критерии.
XPath представляет собой путь для навигации по элементам в структуре документа, позволяя искать элементы на основе их тегов, атрибутов, текстового содержимого и других характеристик. В XPath используется структура, напоминающая дерево, где каждый узел является элементом или атрибутом.
Основные концепции XPath:
XPath запросы могут быть довольно сложными и включать в себя различные операторы и функции. Основные конструкции:
// — выборка всех элементов на уровне документа
(например, //div найдет все элементы
<div>)./ — выборка элементов на текущем уровне (например,
/html/body/div).@ — выборка атрибутов (например,
//a[@href='https://example.com']).text() — выборка текста внутри элемента (например,
//p[text()='Пример текста']).[n] — индексирование (например,
(//button)[1] выберет первый элемент
<button>).Playwright поддерживает XPath запросы для поиска элементов. В отличие
от CSS-селекторов, где используется метод page.$(selector),
XPath используется через методы page.$x(xpath) и
page.locator(xpath).
Для поиска элемента с использованием XPath в Playwright можно
использовать метод locator с передачей XPath строки:
const element = page.locator('//button[text()="Отправить"]');
Этот запрос находит кнопку с текстом “Отправить”. Метод
locator возвращает объект, который позволяет
взаимодействовать с элементом, например, кликать по нему или извлекать
его текст.
Альтернативно, можно использовать метод page.$x():
const [element] = await page.$x('//button[text()="Отправить"]');
await element.click();
Здесь метод page.$x() возвращает массив элементов, и для
взаимодействия с первым найденным элементом нужно использовать индекс
массива.
XPath позволяет искать элементы по аттрибутам, что бывает полезно,
если у элемента нет уникального текста или других отличительных
признаков. Например, для поиска ссылки с определенным href
можно использовать следующий запрос:
const link = page.locator('//a[@href="https://example.com"]');
Если аттрибут должен соответствовать определенному регулярному
выражению, можно использовать функцию contains():
const link = page.locator('//a[contains(@href, "example")]');
Это найдет все ссылки, в аттрибуте href которых
присутствует слово “example”.
XPath поддерживает множество функций, которые делают запросы более гибкими и мощными. Например:
contains() — проверяет, содержится ли подстрока в
значении аттрибута или текста.starts-with() — проверяет, начинается ли строка с
определенной подстроки.text() — используется для поиска по тексту.Пример использования функции contains():
const button = page.locator('//button[contains(text(), "Отправить")]');
Этот запрос найдет кнопку, текст которой содержит слово “Отправить”.
XPath может быть полезен в нескольких случаях:
id, class,
href и другие.Однако важно помнить, что XPath может быть менее производительным по сравнению с CSS-селекторами, особенно если структура страницы сложная. Поэтому в большинстве случаев рекомендуется использовать CSS-селекторы, но XPath является ценным инструментом в арсенале тестировщика.
Для более сложных случаев XPath позволяет комбинировать условия
поиска. Например, чтобы найти все элементы <div>,
которые являются дочерними для элемента с классом
.container, и которые содержат текст, начинающийся с
“Тест”, можно использовать следующий запрос:
const divs = page.locator('//div[contains(@class, "container")]//div[starts-with(text(), "Тест")]');
Этот запрос сначала находит все <div>, которые
являются потомками элемента с классом .container, а затем
выбирает те, текст которых начинается с “Тест”.
XPath является мощным инструментом для поиска и взаимодействия с элементами на веб-странице, предоставляя разработчикам гибкие и точные средства для тестирования веб-приложений. В Playwright использование XPath может быть полезным в тех случаях, когда стандартные CSS-селекторы не дают нужной точности.