В Playwright Assertions и ожидания играют ключевую роль при
тестировании веб-приложений. Они позволяют проверять корректность
состояния элементов на странице, наличие определённого текста,
атрибутов, видимости компонентов и других аспектов поведения интерфейса.
Основной механизм работы строится вокруг асинхронных ожиданий
(expect), которые интегрированы с возможностями Playwright
по автоматическому ожиданию элементов.
expectexpect — это встроенная функция Playwright,
предоставляющая мощные средства для проверки состояния элементов. Она
поддерживает как синхронные проверки, так и асинхронные ожидания с
таймаутом.
Пример базовой проверки текста элемента:
import { test, expect } from '@playwright/test';
test('Проверка текста кнопки', async ({ page }) => {
await page.goto('https://example.com');
const button = page.locator('button#submit');
await expect(button).toHaveText('Отправить');
});
В этом примере Playwright автоматически ожидает появления элемента и текста в течение стандартного таймаута (по умолчанию 5 секунд).
Playwright позволяет проверять, видим ли элемент, активен ли он, содержит ли определённые атрибуты или классы.
Варианты проверок:
await expect(element).toBeVisible(); // Элемент видим
await expect(element).toBeHidden(); // Элемент скрыт
await expect(element).toBeEnabled(); // Элемент активен (не disabled)
await expect(element).toBeDisabled(); // Элемент заблокирован
await expect(element).toHaveAttribute('href', '/home'); // Атрибут href равен /home
await expect(element).toHaveClass(/active/); // Класс содержит 'active'
Все эти методы автоматически повторяют проверку до достижения таймаута, что уменьшает необходимость ручного написания циклов ожидания.
Проверка текста, значений инпутов и других свойств является одной из
наиболее частых задач. toHaveText и
toHaveValue позволяют задавать точное совпадение или
регулярное выражение.
await expect(input).toHaveValue('admin'); // Точное совпадение
await expect(header).toHaveText(/Привет, .+/); // Совпадение по регулярному выражению
Playwright позволяет также проверять частичный текст с помощью
параметра useInnerText или strict: false.
Каждый метод expect принимает опциональный объект
конфигурации с таймаутом. Это позволяет адаптировать ожидания под
динамическое поведение страницы.
await expect(alert).toHaveText('Успешно', { timeout: 10000 }); // Ожидание до 10 секунд
Если условие не выполняется в течение указанного таймаута, тест завершится ошибкой.
Иногда необходимо проверять сразу несколько условий. Playwright
позволяет комбинировать проверки через цепочки промисов или несколько
expect подряд:
await expect(element).toBeVisible();
await expect(element).toHaveText('Готово');
await expect(element).toHaveClass(/success/);
Использование последовательных ожиданий гарантирует, что каждый шаг проверяется в момент своего выполнения.
Для проверки нескольких элементов на странице применяются методы
коллекций locator.all() или locator.nth():
const items = page.locator('ul#list li');
await expect(items).toHaveCount(5); // Проверка количества элементов
await expect(items.nth(0)).toHaveText('Первый'); // Проверка конкретного элемента
Метод toHaveCount автоматически ждёт появления заданного
количества элементов в DOM.
Assertions хорошо интегрируются с условными конструкциями для динамических проверок:
if (await element.isVisible()) {
await expect(element).toHaveText('Активен');
}
Это полезно для тестов, где элементы могут появляться или исчезать в зависимости от действий пользователя.
Playwright позволяет настраивать таймауты ожиданий как для отдельных проверок, так и глобально для всего теста:
test.setTimeout(20000); // Таймаут всего теста 20 секунд
await expect(element).toBeVisible({ timeout: 10000 }); // Локальный таймаут
Гибкое управление таймаутами повышает надёжность тестов на динамических страницах.
Для тестирования появления уведомлений, алертов или сообщений об ошибках используются методы:
await expect(page.locator('.error')).toHaveText('Неверный пароль');
await expect(page.locator('.notification')).toBeVisible();
Комбинация видимости и текста позволяет точно проверять пользовательский интерфейс и реакции системы на действия пользователя.
Playwright предоставляет расширенные возможности проверки:
await expect(element).toHaveCount(3); // Проверка количества элементов
await expect(element).not.toBeVisible(); // Элемент не видим
await expect(element).toHaveCSS('color', 'rgb(255, 0, 0)'); // Проверка CSS свойства
await expect(element).toHaveJSProperty('disabled', true); // Проверка JS свойства
Эти методы позволяют создавать точные и надёжные тесты, полностью контролируя состояние страницы.
Assertions в Playwright строятся вокруг автоматического
ожидания, что снимает необходимость ручного использования
waitForTimeout или сложных цепочек промисов. Это делает
тесты короткими, читаемыми и устойчивыми к изменениям
интерфейса, одновременно обеспечивая точное и надёжное проверочное
покрытие.