В процессе тестирования веб-приложений важно взаимодействовать с различными элементами пользовательского интерфейса, включая кнопки, формы, ссылки и элементы навигации. Одним из основных сценариев взаимодействия является тестирование навигации, в том числе функций “Назад” и “Вперед” в браузере. В Playwright такие сценарии легко автоматизировать с помощью инструментов для работы с браузерной историей.
Playwright предоставляет несколько способов для манипуляций с навигацией, которые могут имитировать действия пользователя на уровне браузера. Среди них:
Для взаимодействия с историей браузера используются методы,
предоставляемые объектом page, который представляет собой
страницу браузера.
Чтобы имитировать действие нажатия кнопки “Назад”, используется метод
goBack(). Он позволяет перейти к предыдущей странице в
истории браузера. Этот метод полезен, когда нужно проверить, как
приложение ведет себя при возврате на предыдущую страницу, например, при
тестировании всплывающих окон, диалогов или других динамических
элементов.
Пример использования:
await page.goBack();
Метод goBack() также принимает объект с параметрами,
которые могут быть полезны для настройки поведения навигации. Одним из
таких параметров является timeout, который позволяет задать
максимальное время ожидания завершения перехода.
await page.goBack({ timeout: 5000 });
Если на предыдущей странице есть элементы, которые требуют динамической загрузки или асинхронных операций, то важно использовать явные ожидания, чтобы гарантировать, что все элементы страницы загружены и готовы к взаимодействию.
Аналогично методу goBack(), для навигации вперед
используется метод goForward(). Этот метод имитирует
нажатие кнопки “Вперед” в браузере и позволяет перейти на следующую
страницу в истории.
Пример использования:
await page.goForward();
Как и в случае с методом goBack(), метод
goForward() также поддерживает параметры конфигурации,
такие как timeout, для настройки поведения перехода.
await page.goForward({ timeout: 5000 });
При тестировании навигации важно учитывать, что переходы по истории браузера могут вызывать различные события на странице. В Playwright можно отслеживать эти события с помощью обработчиков.
Событие load срабатывает, когда страница полностью
загружена после навигации. Это событие полезно для синхронизации тестов
с моментом, когда страница готова к дальнейшему взаимодействию.
Пример использования:
page.on('load', () => {
console.log('Страница загружена');
});
Если тестируемая страница использует фреймы, можно отслеживать
событие framenavigated, которое срабатывает при навигации
внутри фрейма. Это может быть полезно при тестировании сложных
веб-приложений с несколькими вложенными фреймами.
Пример использования:
page.on('framenavigated', frame => {
console.log(`Фрейм с URL ${frame.url()} был навигирован`);
});
В процессе навигации часто возникает необходимость работать с параметрами URL. Например, необходимо проверить, как приложение реагирует на различные параметры в адресной строке.
Playwright предоставляет доступ к текущему URL с помощью метода
url(). Это позволяет получить и проанализировать текущий
адрес, а также извлечь параметры из URL для дальнейших проверок.
Пример получения URL:
const currentUrl = page.url();
console.log('Текущий URL:', currentUrl);
Если нужно проверить определенные параметры, можно использовать регулярные выражения или функции для парсинга строки запроса.
Пример извлечения параметров:
const url = new URL(page.url());
const paramValue = url.searchParams.get('id');
console.log('Параметр id:', paramValue);
Задержки между переходами. Иногда требуется
задать задержку между переходами, чтобы страница успела полностью
загрузиться или завершить анимации перед выполнением следующего
действия. Для этого можно использовать метод
waitForTimeout().
Пример:
await page.goBack();
await page.waitForTimeout(1000); // Ожидание 1 секундуОшибки навигации. В случае, если переход по
истории невозможен (например, нет предыдущей страницы для метода
goBack()), Playwright выбросит ошибку. Это можно обработать
с помощью конструкций try-catch, чтобы не нарушать выполнение теста.
Пример:
try {
await page.goBack();
} catch (error) {
console.error('Ошибка при переходе назад:', error);
}Реакция на изменение URL. В некоторых случаях
приложение может менять URL без полной перезагрузки страницы, например,
с помощью AJAX или маршрутизации на клиенте. Для тестирования таких
случаев можно использовать событие route для отслеживания
запросов к серверу и их обработку.
Тестирование навигации в Playwright позволяет симулировать поведение пользователя, переходя по страницам с помощью встроенных методов для навигации назад и вперед. Эти функции полезны при проверке правильности переходов, сохранности состояния страницы и корректности работы динамических элементов, таких как формы и всплывающие окна. Для эффективной автоматизации важно учитывать обработку событий, работу с параметрами URL и различные варианты навигации.