Response API в Playwright предназначен для детального контроля и анализа сетевых ответов при тестировании веб-приложений. Она позволяет получать данные о статусе ответа, заголовках, теле, времени отклика и других параметрах HTTP-ответа. Такой функционал особенно полезен при тестировании REST API, GraphQL или динамически загружаемых ресурсов на страницах.
Перехват сетевых ответов осуществляется через объект
page. Основной метод —
page.on('response', callback), где callback
принимает объект типа Response.
page.on('response', async response => {
console.log('URL:', response.url());
console.log('Status:', response.status());
console.log('Headers:', response.headers());
});
Ключевые методы объекта Response:
response.url() — возвращает URL запроса, на который
пришёл ответ.response.status() — HTTP-статус код ответа (например,
200, 404, 500).response.ok() — булевое значение, true, если статус в
диапазоне 200–299.response.headers() — объект заголовков ответа.response.body() / response.text() /
response.json() — получение тела ответа в разных
форматах.Методы для работы с телом ответа являются асинхронными, поэтому
всегда используются с await.
const response = await page.waitForResponse('**/api/data');
const data = await response.json();
console.log(data);
Для точного контроля за асинхронными сетевыми событиями Playwright
предоставляет методы page.waitForResponse и
page.waitForRequest. Это особенно важно, когда нужно
дождаться конкретного запроса, чтобы проверить его результат.
const response = await page.waitForResponse(response =>
response.url().includes('/api/items') && response.status() === 200
);
const items = await response.json();
console.log(items.length);
Особенности фильтрации:
'**/endpoint')
или регулярные выражения.waitForResponse возвращает только первый
подходящий ответ, после чего выполнение продолжается.Проверка HTTP-статусов и заголовков — важный шаг для тестирования корректности API и безопасности приложения.
page.on('response', async response => {
if (!response.ok()) {
console.error(`Ошибка: ${response.status()} на URL ${response.url()}`);
}
const contentType = response.headers()['content-type'];
if (contentType && contentType.includes('application/json')) {
const jsonData = await response.json();
console.log('Данные JSON:', jsonData);
}
});
Рекомендации:
status() и ok() для быстрого
определения успешности запроса.response.json() вместо
response.text() для прямого получения объекта.В современных приложениях ответы часто приходят не сразу, а в потоках или после последовательных запросов. Playwright позволяет работать с такими сценариями:
const [response] = await Promise.all([
page.waitForResponse(resp => resp.url().includes('/api/stream')),
page.click('#loadButton')
]);
const data = await response.json();
console.log(data);
Метод Promise.all обеспечивает синхронизацию действия на
странице и перехвата сетевого ответа, что особенно полезно для
динамических элементов и SPA-приложений.
Playwright предоставляет возможность мокать ответы, что позволяет тестировать обработку ошибок и нестандартных данных:
await page.route('**/api/data', route => {
route.fulfill({
status: 500,
contentType: 'application/json',
body: JSON.stringify({ error: 'Internal Server Error' }),
});
});
await page.goto('https://example.com');
Применение моков:
route.fulfill({ ... , delay }).Для глубокого анализа тестов полезно логировать сетевые ответы и их параметры:
page.on('response', async response => {
const request = response.request();
console.log('Request Method:', request.method());
console.log('Request Post Data:', request.postData());
console.log('Response Status:', response.status());
});
Такой подход позволяет связывать запросы и ответы, отслеживать последовательность вызовов и находить узкие места в API.
Для работы с изображениями, PDF или другими бинарными данными
используется метод response.body():
const response = await page.waitForResponse('**/download/file.pdf');
const buffer = await response.body();
require('fs').writeFileSync('file.pdf', buffer);
Особенности:
response.body() возвращает Buffer, который
можно сохранять или анализировать.await) для
работы с телом ответа.route.fulfill для тестирования
нестандартных сценариев и ошибок сервера.Promise.all.Response API в Playwright обеспечивает полный контроль над сетевой активностью страницы, что делает его незаменимым инструментом для автоматизированного тестирования сложных веб-приложений.