Одной из важнейших особенностей работы с Playwright является возможность подписки на события страницы. Это позволяет тестировщикам и разработчикам эффективно отслеживать различные изменения и взаимодействия с веб-страницей, такие как загрузка контента, изменения DOM-дерева, ошибки в сети и другие критически важные моменты. В данном разделе рассматриваются основные принципы подписки на события, доступные методы и примеры их применения.
Тестирование веб-приложений невозможно без учета асинхронных процессов, таких как загрузка данных с сервера, обновление UI или взаимодействие с пользователем. Приложения часто изменяются в ответ на действия пользователя, и возможность подписки на события помогает эффективно реагировать на эти изменения. Например, важно знать, когда завершится загрузка страницы, когда будет получен ответ от API или когда произойдет изменение состояния элементов на странице.
Playwright предоставляет простой и мощный механизм подписки на события, что позволяет не только следить за происходящими процессами, но и реагировать на них в реальном времени.
page.on()Основной способ подписки на события страницы — использование метода
page.on(). Этот метод позволяет подписаться на различные
события, происходящие на странице, такие как:
alert,
prompt, confirm).Для того чтобы подписаться на событие загрузки страницы и дождаться его завершения, необходимо использовать следующий код:
const { webkit } = require('playwright');
(async () => {
const browser = await webkit.launch();
const page = await browser.newPage();
page.on('load', () => {
console.log('Страница успешно загружена');
});
await page.goto('https://example.com');
})();
В этом примере мы создаем страницу, подписываемся на событие
load и выводим сообщение в консоль, когда страница будет
загружена.
Иногда в тестировании важно отслеживать сетевые запросы и их ответы,
чтобы убедиться в корректности работы API. Для этого используется
событие response, которое срабатывает каждый раз, когда
приходит ответ от сервера.
const { webkit } = require('playwright');
(async () => {
const browser = await webkit.launch();
const page = await browser.newPage();
page.on('response', response => {
console.log(`Получен ответ от ${response.url()}: ${response.status()}`);
});
await page.goto('https://example.com');
})();
Здесь мы подписываемся на событие response и выводим
статус ответа от сервера для каждого запроса.
page.waitForEvent()Метод page.waitForEvent() позволяет ожидать
определенного события на странице. Это полезно, когда необходимо
подождать выполнения какого-либо действия, прежде чем продолжить
выполнение теста. В отличие от page.on(), который
подписывается на события в реальном времени, waitForEvent()
блокирует выполнение теста до тех пор, пока не произойдет ожидаемое
событие.
Если нужно дождаться, когда страница загрузится, перед тем как продолжить выполнение теста, можно использовать следующий код:
const { webkit } = require('playwright');
(async () => {
const browser = await webkit.launch();
const page = await browser.newPage();
// Ожидаем загрузки страницы
await page.waitForEvent('load');
console.log('Страница загружена, продолжение теста...');
})();
Метод waitForEvent полезен, когда важно, чтобы
определенное событие произошло перед продолжением теста, например, перед
нажатием на элемент или проверкой состояния UI.
Playwright позволяет добавлять фильтры при подписке на события, что
дает возможность отлавливать только те события, которые соответствуют
определенным условиям. Например, при подписке на событие
response можно фильтровать ответы по URL или статусу.
const { webkit } = require('playwright');
(async () => {
const browser = await webkit.launch();
const page = await browser.newPage();
page.on('response', response => {
if (response.status() === 200 && response.url().includes('api')) {
console.log(`Ответ от API: ${response.status()} от ${response.url()}`);
}
});
await page.goto('https://example.com');
})();
В этом примере мы подписались на событие response и
отфильтровали только те ответы, которые имеют статус 200 и содержат в
URL строку api.
В некоторых случаях необходимо прервать или изменить стандартное
поведение событий. Например, можно отменить отправку запроса с помощью
события request или модифицировать ответ с помощью события
response.
const { webkit } = require('playwright');
(async () => {
const browser = await webkit.launch();
const page = await browser.newPage();
page.on('request', request => {
if (request.url().includes('ads')) {
console.log('Запрос на рекламу отменен');
request.abort();
}
});
await page.goto('https://example.com');
})();
Этот код отменяет запросы на рекламу (содержащие строку
ads в URL), прерывая их выполнение.
Подписка на события в Playwright является мощным инструментом для тестирования динамических веб-приложений. С помощью различных типов событий можно эффективно отслеживать и реагировать на изменения на странице. Будь то загрузка страницы, получение ответов от сервера или вывод сообщений в консоль — Playwright предоставляет все необходимые средства для работы с асинхронными процессами в веб-тестах.