Селекторы играют ключевую роль в автоматизированном тестировании с помощью Playwright. Они определяют, как тест находит элементы на странице для взаимодействия: кликов, ввода текста, проверки состояния. Неправильный выбор селекторов приводит к нестабильным тестам, медленной работе и ложным падениям.
Playwright поддерживает несколько типов селекторов:
await page.click('button.submit');
await page.click('//div[@class="menu"]//a[text()="Контакты"]');
await page.click('text=Войти');
await page.getByRole('button', { name: 'Сохранить' }).click();
await page.click('[data-testid="login-button"]');
Селекторы слишком хрупкие Частая ошибка —
привязка к внешнему виду страницы или классов CSS, которые часто
меняются. Например,
'.header > ul > li:first-child > a' ломается при
любом изменении структуры. Решение — использовать более устойчивые
селекторы, такие как data-testid или селекторы по
роли.
Неправильный приоритет поиска Playwright ищет элементы слева направо. Если селектор слишком общий, тест может взаимодействовать не с тем элементом. Например:
await page.click('button'); // если на странице несколько кнопок
Лучше уточнять селектор, комбинируя класс, текст и роль:
await page.getByRole('button', { name: 'Отправить' }).click();
await page.waitForSelector('text=Загрузка завершена');
await page.click('text=Загрузка завершена');
Playwright также поддерживает автоматическое ожидание через
getByRole и getByText, что уменьшает
вероятность ошибок.
await page.locator('text=Подробнее').nth(1).click();
const row = page.locator('table tr', { hasText: 'Иванов' });
await row.getByRole('button', { name: 'Редактировать' }).click();
Это предотвращает клики по неправильным элементам при изменении порядка строк.
locator().first(),
locator().nth(n), locator().last() помогают
уточнять выбор.locator().evaluate() позволяет проверить текст
или атрибут элемента перед взаимодействием.// По data-testid
await page.click('[data-testid="submit-button"]');
// По роли и имени
await page.getByRole('button', { name: 'Сохранить' }).click();
// Динамическая таблица
const row = page.locator('table tr', { hasText: 'Петров' });
await row.getByRole('button', { name: 'Удалить' }).click();
Выбор правильного селектора — основа стабильного тестирования. Правильные подходы минимизируют ломку тестов при изменениях интерфейса и ускоряют диагностику ошибок.