Playwright предоставляет мощные средства для контроля и анализа сетевых запросов через Route и Request API. Они позволяют перехватывать, модифицировать и проверять HTTP-запросы и ответы, что критически важно для тестирования сложных веб-приложений, работы с API и эмуляции различных условий сети.
page.routeМетод page.route(url, handler) позволяет перехватывать
все запросы, соответствующие определённому URL или шаблону, и
обрабатывать их кастомным образом. Основные параметры:
url — строка, регулярное выражение или функция, которая
возвращает true для нужных URL.handler — функция, принимающая объект
route и объект request.Пример:
await page.route('**/api/users', async (route, request) => {
console.log('Перехваченный запрос:', request.url());
await route.continue(); // продолжает запрос без изменений
});
Ключевые методы объекта route:
route.continue([overrides]) — продолжает запрос,
позволяя изменить его метод, заголовки или тело.route.fulfill(response) — завершает запрос с
пользовательским ответом.route.abort([errorCode]) — прерывает запрос, можно
эмулировать сетевую ошибку.Пример модификации запроса:
await page.route('**/api/login', async (route) => {
await route.continue({
headers: {
'Authorization': 'Bearer тестовый_токен'
}
});
});
Пример подмены ответа:
await page.route('**/api/users', async (route) => {
await route.fulfill({
status: 200,
contentType: 'application/json',
body: JSON.stringify([{id: 1, name: 'Test User'}])
});
});
request и response для анализа сетевых
операцийОбъект Request предоставляет доступ к информации о каждом сетевом запросе:
request.url() — URL запроса.request.method() — HTTP-метод.request.postData() — тело запроса для POST/PUT.request.headers() — заголовки запроса.request.isNavigationRequest() — является ли запрос
навигационным.Пример логирования всех запросов страницы:
page.on('request', request => {
console.log('Запрос:', request.method(), request.url());
});
Объект Response позволяет анализировать ответы сервера:
response.status() — код состояния.response.headers() — заголовки ответа.response.body() — тело ответа в виде
Buffer.response.text() и response.json() —
удобные методы для получения данных в текстовом или JSON формате.Пример проверки ответа API:
page.on('response', async response => {
if (response.url().includes('/api/users')) {
console.log('Статус:', response.status());
const data = await response.json();
console.log('Данные пользователей:', data);
}
});
Playwright поддерживает подстановочные шаблоны и регулярные выражения для точной фильтрации запросов:
"**/api/**" — любой путь, содержащий
/api/./.*\.css/ — все CSS-файлы.(url) => url.includes('/login') —
динамическая фильтрация.Пример с регулярным выражением:
await page.route(/.*\.png/, route => route.abort('failed'));
Это позволяет эмулировать ошибки загрузки ресурсов для тестирования поведения страницы.
Методы route.fulfill и route.continue могут
быть асинхронными. Это открывает возможности для:
Пример с задержкой:
await page.route('**/api/data', async (route) => {
await new Promise(resolve => setTimeout(resolve, 1000));
await route.continue();
});
page.waitForResponse и
page.waitForRequestДля тестов, где важно дождаться конкретного запроса или ответа, используются:
page.waitForRequest(urlOrPredicate, options) — ожидает
запрос, соответствующий условию.page.waitForResponse(urlOrPredicate, options) — ожидает
ответ сервера.Пример:
const response = await page.waitForResponse(response =>
response.url().includes('/api/users') && response.status() === 200
);
const data = await response.json();
console.log(data);
Тестирование API без реального сервера Перехват запросов и возврат фейковых данных ускоряет тесты и делает их изолированными.
Проверка заголовков и авторизации Модификация запросов позволяет тестировать поведение сервиса при разных токенах или параметрах.
Эмуляция ошибок сети route.abort()
помогает проверить, корректно ли приложение обрабатывает ошибки
сети.
Загрузка медленных ресурсов Добавление задержек позволяет проверить UX при медленных соединениях.
route действует только
однократно, поэтому для многократного перехвата нужно
использовать page.route с постоянным шаблоном.Эффективное использование Route и Request API позволяет создавать стабильные, изолированные и точные тесты, контролируя сетевое взаимодействие на уровне браузера, что делает Playwright одним из самых гибких инструментов для автоматизированного тестирования.