Навигация назад и вперед

В процессе тестирования веб-приложений важно взаимодействовать с различными элементами пользовательского интерфейса, включая кнопки, формы, ссылки и элементы навигации. Одним из основных сценариев взаимодействия является тестирование навигации, в том числе функций “Назад” и “Вперед” в браузере. В Playwright такие сценарии легко автоматизировать с помощью инструментов для работы с браузерной историей.

Основные методы навигации в Playwright

Playwright предоставляет несколько способов для манипуляций с навигацией, которые могут имитировать действия пользователя на уровне браузера. Среди них:

  • Навигация по URL — переход на конкретную страницу.
  • Навигация назад и вперед — переход по истории браузера.

Для взаимодействия с историей браузера используются методы, предоставляемые объектом 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’

Событие load срабатывает, когда страница полностью загружена после навигации. Это событие полезно для синхронизации тестов с моментом, когда страница готова к дальнейшему взаимодействию.

Пример использования:

page.on('load', () => {
  console.log('Страница загружена');
});

Событие ‘framenavigated’

Если тестируемая страница использует фреймы, можно отслеживать событие framenavigated, которое срабатывает при навигации внутри фрейма. Это может быть полезно при тестировании сложных веб-приложений с несколькими вложенными фреймами.

Пример использования:

page.on('framenavigated', frame => {
  console.log(`Фрейм с URL ${frame.url()} был навигирован`);
});

Работа с параметрами 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);

Важные особенности навигации

  1. Задержки между переходами. Иногда требуется задать задержку между переходами, чтобы страница успела полностью загрузиться или завершить анимации перед выполнением следующего действия. Для этого можно использовать метод waitForTimeout().

    Пример:

    await page.goBack();
    await page.waitForTimeout(1000); // Ожидание 1 секунду
  2. Ошибки навигации. В случае, если переход по истории невозможен (например, нет предыдущей страницы для метода goBack()), Playwright выбросит ошибку. Это можно обработать с помощью конструкций try-catch, чтобы не нарушать выполнение теста.

    Пример:

    try {
      await page.goBack();
    } catch (error) {
      console.error('Ошибка при переходе назад:', error);
    }
  3. Реакция на изменение URL. В некоторых случаях приложение может менять URL без полной перезагрузки страницы, например, с помощью AJAX или маршрутизации на клиенте. Для тестирования таких случаев можно использовать событие route для отслеживания запросов к серверу и их обработку.

Заключение

Тестирование навигации в Playwright позволяет симулировать поведение пользователя, переходя по страницам с помощью встроенных методов для навигации назад и вперед. Эти функции полезны при проверке правильности переходов, сохранности состояния страницы и корректности работы динамических элементов, таких как формы и всплывающие окна. Для эффективной автоматизации важно учитывать обработку событий, работу с параметрами URL и различные варианты навигации.