Playwright — это мощный фреймворк для автоматизации тестирования, который позволяет пользователям управлять веб-приложениями и проводить сквозное (end-to-end) тестирование. Он поддерживает множество браузеров и предоставляет удобные инструменты для взаимодействия с элементами на веб-страницах. В этой статье мы рассмотрим функциональность и реализацию селекторов и локаторов в Playwright.
Содержание
- Селекторы в Playwright
- Использование селекторов и локаторов в Playwright
- Полная реализация селекторов и локаторов в Playwright
- Заключение
Подпишитесь на наш ТЕЛЕГРАМ КАНАЛ ПО АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ
Селекторы в Playwright
Селекторы являются важным компонентом фреймворка Playwright. Они позволяют автоматизированным тестам взаимодействовать с веб-приложениями, например, проверять существование элемента на веб-странице, щелкать по доступным опциям и вводить данные. Playwright предлагает несколько типов селекторов и хороший набор методов для выполнения действий с выбранными элементами. Рассмотрим их подробнее.
1. CSS селекторы
CSS селекторы позволяют находить веб-элементы по их атрибутам, ID, классам и другим характеристикам. Они широко используются в тестировании.
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
// Находим элемент с помощью CSS-селектора
const element = await page.locator('h1');
// Взаимодействуем с элементом (например, кликаем)
await element.click();
await browser.close();
})();
2. XPath селекторы
XPath подходит для поиска элементов, у которых нет уникальных атрибутов или которые являются вложенными. В таких случаях XPath — это лучшее решение.
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
// Находим элемент с помощью XPath
const element = await page.locator('//h1');
// Взаимодействуем с элементом (например, кликаем)
await element.click();
await browser.close();
})();
3 . API локаторов
API локаторов предлагает упрощенный способ нахождения веб-элементов с использованием цепочечного интерфейса и выполнения действий с выбранными элементами. Они предоставляют высокоуровневый способ работы с элементами, отличаясь от традиционных методов выбора, таких как CSS и XPath.
const buttonLocator = page.locator('button');
await buttonLocator.click();
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
// Находим элемент по значению его атрибута
const element = await page.locator('[name="search"]');
// Взаимодействуем с элементом (например, вводим текст)
await element.type('Playwright');
await browser.close();
})();
4. Селекторы по тексту
Селекторы по тексту — это удобный способ находить элементы на веб-странице, основываясь на их видимом текстовом содержимом. Это особенно полезно для взаимодействия с кнопками, ссылками и другими элементами интерфейса, где текст играет ключевую роль.
const element = await page.locator('text=Click Here');
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
// Находим элемент по его текстовому содержимому
const element = await page.locator('text=Welcome');
// Взаимодействуем с элементом (например, кликаем)
await element.click();
await browser.close();
})();
5. Работа с теневым DOM (shadow DOM)
Playwright предлагает возможность находить и взаимодействовать с элементами, расположенными в теневом DOM. Теневой DOM — это технология, которая позволяет создавать инкапсулированные компоненты в веб-приложениях, обеспечивая изоляцию стилей и скриптов. Это помогает избежать конфликтов между различными частями приложения и улучшает его структуру.
Когда элементы находятся в теневом DOM, их может быть сложно найти с помощью стандартных селекторов, таких как CSS или XPath. Однако Playwright предоставляет специальный синтаксис, который позволяет легко взаимодействовать с этими элементами.
Чтобы найти элемент в теневом DOM, можно использовать специальный синтаксис, который позволяет обращаться к shadow-root. Например:
const shadowHost = await page.$('shadow-host-selector'); // Находим элемент-хост
const shadowRoot = await shadowHost.evaluateHandle(el => el.shadowRoot); // Получаем Shadow Root
const shadowElement = await shadowRoot.$('.shadow-element-selector'); // Находим элемент внутри Shadow DOM
6. Ожидание элементов
Playwright предлагает методы, которые позволяют ждать, пока элемент загрузится, станет видимым или выполнит другие условия перед тем, как его идентифицировать и выполнить действие.
await page.waitForSelector('button', { state: 'visible' });
7. Выбор опций в выпадающих списках
Playwright предоставляет методы для взаимодействия с меню опций в выпадающих списках.
await page.selectOption('select#myDropdown', 'Option 1');
8 . Селекторы для всплывающих окон и фреймов
Playwright предоставляет возможность взаимодействовать с элементами во всплывающих окнах и встроенных фреймах (iframe). Это позволяет пользователям легко выполнять действия с веб-элементами, которые находятся в отдельных контекстах, что особенно полезно для тестирования сложных интерфейсов.
const popup = await page.waitForPopup('https://example-popup.com');
const popupElement = await popup.$('div.popup-content');
Использование селекторов и локаторов в Playwright
Селекторы Playwright играют важную роль в выполнении задач автоматизации. С их помощью можно выполнять взаимодействие с элементами (выбор, клик, отправка веб-страниц и наведение курсора на элементы), проверку элементов (валидация видимости и наличия элемента на странице), извлечение данных (получение текста, файлов и другой информации из интерфейса для дальнейшей проверки) и ожидание, когда элементы станут доступны на экране.
Примечание редакции: вас также может заинтересовать статья «Быстрое и практическое введение в Playwright»
Что такое локаторы в Playwright?
Локаторы Playwright — это набор методов и API, которые позволяют выбирать элементы на веб-странице и взаимодействовать с ними. Они предоставляют более высокий уровень и более выразительный способ нахождения элементов по сравнению с традиционными селекторами, такими как CSS и XPath.
Типы локаторов Playwright
Playwright предлагает несколько типов локаторов для идентификации элементов и полей на веб-странице:
page.locator(). Используется для работы с несколькими элементами на веб-странице. Этот метод создает локатор, который позволяет находить элементы, после чего можно применять цепочку действий к набору этих элементов.locator.locator(). Для более точного выбора вы можете соединять методы локатора с уже существующими локаторами. Это позволяет уточнять поиск элементов, находящихся внутри других элементов.locator.locatorAll(). Этот метод используется для нахождения всех элементов, соответствующих заданному локатору.
Стратегии локаторов
Стратегии локаторов в Playwright помогают выбрать наиболее подходящий способ для нахождения и взаимодействия с элементами на веб-странице. Вот некоторые из наиболее популярных стратегий:
locator('text=Некоторый текст'). Поиск веб-элементов на основе видимого текста.locator('aria-label=Label'). Поиск веб-элементов на основе ARIA-метки. ARIA-метка (Accessible Rich Internet Applications) — это набор атрибутов, которые позволяют разработчикам улучшать доступность веб-приложений для пользователей с ограниченными возможностями.locator('aria-labelledby=ID'). Поиск веб-элементов на основе ID ARIA-метки.locator('css-селектор'). Подходит для выбора элементов на основе CSS-атрибутов. Локатор сочетается с CSS-селектором.locator('xpath-селектор'). Подходит для поиска сложных веб-элементов и выполнения сложных запросов. Локатор сочетается с XPath-селектором.
Пример реализации локатора
В этом примере код инициализирует браузер Chromium с помощью Playwright, открывает веб-страницу и ищет кнопку по тексту «Click Here». Давайте разберём его.
const { chromium } = require('playwright'); // Импортируем библиотеку Playwright
(async () => {
const browser = await chromium.launch(); // Запускаем браузер Chromium
const page = await browser.newPage(); // Открываем новую вкладку
await page.goto('https://example.com'); // Переходим на указанную веб-страницу
const locator = page.locator('text=Click Here'); // Находим элемент с текстом "Click Here"
await locator.click(); // Кликаем по найденному элементу
})();
Обновление элементов
Каждый раз, когда локатор используется для выполнения действия, он ищет актуальный элемент в DOM. В приведённом ниже коде элемент будет найден дважды: в первый раз перед наведением курсора, а второй — перед кликом. Это означает, что если DOM изменится между вызовами из-за перерисовки, будет использован новый элемент, соответствующий локатору.
Этот подход помогает избежать распространённых ошибок, связанных с устаревшими элементами, которые часто возникают в других инструментах и фреймворках автоматизации. Playwright автоматически управляет состоянием DOM, обеспечивая более стабильное и надёжное взаимодействие с элементами на странице.
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
const locator = page.locator('text=Click Here');
// Наведение курсора на элемент
await locator.hover();
// Клик по элементу
await locator.click();
})();
Полная реализация селекторов и локаторов в Playwright
const { chromium } = require('playwright');
const { expect } = require('@playwright/test');
(async () => {
// Запускаем браузер
const browser = await chromium.launch();
const context = await browser.newContext();
// Создаем страницу
const page = await context.newPage();
await page.goto('https://example.com');
// Используем локатор для нахождения элемента по CSS-селектору
const searchInput = page.locator('input[type="text"]');
// Вводим текст в поле ввода
await searchInput.type('Playwright');
// Используем локатор для нахождения элемента по текстовому содержимому
const welcomeMessage = page.locator('text=Welcome');
// Проверяем, что элемент с текстом видимый
expect(await welcomeMessage.isVisible()).toBeTruthy();
// Кликаем по элементу
await welcomeMessage.click();
// Используем локатор для нахождения элемента по XPath
const heading = page.locator('//h1');
// Проверяем, что элемент с XPath-селектором видимый
expect(await heading.isVisible()).toBeTruthy();
// Делаем скриншот
await page.screenshot({ path: 'example.png' });
// Закрываем браузер
await browser.close();
})();
В этом примере:
- Мы запускаем браузер Chromium (браузер Chrome) и создаем новый контекст и страницу.
- Используем локаторы (селекторы) для поиска элементов на странице с использованием CSS-селекторов, текстового содержимого и XPath.
- Выполняем действия, такие как ввод текста в поле, клик по элементу и создание скриншота.
- Используем утверждения из
@playwright/test(предполагая, что он установлен), чтобы проверить, видимы ли элементы. - В конце закрываем браузер.
Заключение
Селекторы и локаторы Playwright предлагают мощные и гибкие инструменты для взаимодействия с веб-элементами в процессе автоматизации и тестирования. Они обеспечивают высокую точность в различных браузерах и способны адаптироваться к разнообразным сценариям, что делает Playwright отличным выбором для автоматизации веб-приложений.
Перевод статьи «Playwright Selectors and Locators: Everything You Need to Know».

Пингбэк: Большой учебник по Playwright
Пингбэк: Как работать с текстовыми полями в Playwright?
Пингбэк: Локаторы в Playwright