Puppeteer предоставляет удобные методы для взаимодействия с браузером и
управления его состоянием, включая манипуляции с историей браузера. Три
ключевых метода, которые используются для навигации по истории страницы,
— это goBack, goForward и reload.
Они позволяют моделировать действия пользователя, такие как переход
назад, вперед и обновление страницы.
goBack()
Метод goBack() позволяет вернуться на одну страницу назад в
истории браузера, имитируя действие пользователя, который нажал кнопку
«Назад». Этот метод полезен при тестировании сценариев, где необходимо
проверить поведение сайта после перехода на предыдущую страницу.
Пример использования goBack():
const puppeteer = require(&
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Открытие первой страницы
await page.goto('https://example.com');
// Переход на другую страницу
await page.goto('https://example.org');
// Возвращаемся на предыдущую страницу
await page.goBack();
// Проверяем, что вернулись на правильную страницу
console.log(await page.url()); // Должен быть 'https://example.com'
await browser.close();
})();
Метод возвращает Promise, который разрешается, когда страница успешно
загружена после возвращения назад. Важно отметить, что если в истории
нет предыдущей страницы, метод goBack() не выполнит никаких
действий.
goForward()
Метод goForward() выполняет аналогичную операцию, но в
противоположном направлении — он возвращает пользователя на следующую
страницу в истории браузера. Это поведение имитирует действие нажатия на
кнопку «Вперед».
Пример использования goForward():
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Открытие первой страницы
await page.goto('https://example.com');
// Переход на другую страницу
await page.goto('https://example.org');
// Возвращаемся назад
await page.goBack();
// Переходим вперед
await page.goForward();
// Проверяем, что вернулись на вторую страницу
console.log(await page.url()); // Должен быть 'https://example.org'
await browser.close();
})();
Метод goForward() работает аналогично методу
goBack(), но выполняет переход в противоположную сторону,
возвращая страницу в том случае, если после перехода назад существует
страница впереди.
reload()
Метод reload() используется для перезагрузки текущей
страницы. Это полезно для тестирования функциональности обновления
контента на странице, когда необходимо убедиться, что обновление
происходит корректно, или для очистки состояния страницы и повторного её
запуска.
Пример использования reload():
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Открытие страницы
await page.goto('https://example.com');
// Перезагружаем страницу
await page.reload();
// Проверяем, что URL не изменился
console.log(await page.url()); // Должен быть 'https://example.com'
await browser.close();
})();
Метод reload() возвращает Promise, который разрешается,
когда страница перезагружается. Важным аспектом является то, что метод
также может принимать объект настроек, позволяющий контролировать
поведение перезагрузки (например, можно отключить кеширование).
await page.reload({ waitUntil: 'networkidle0' });
Здесь используется параметр waitUntil, который определяет
условие, при котором метод reload() завершится. Возможные
значения для waitUntil:
load — страница считается загруженной, когда завершена
загрузка всех ресурсов.
domcontentloaded — страница считается загруженной, когда
загружен DOM.
networkidle0 — страница считается загруженной, когда сеть
остается неактивной в течение хотя бы 500 мс.
networkidle2 — страница считается загруженной, когда сеть
неактивна в течение хотя бы 500 мс после загрузки хотя бы двух запросов.
Асинхронность: Все три метода — goBack(),
goForward(), и reload() — являются
асинхронными. Они возвращают Promise, что означает необходимость
использования await для ожидания завершения операций перед
продолжением работы.
Обработка ошибок: При выполнении этих методов важно
проверять, что переход или перезагрузка завершились успешно. Например,
если в истории браузера нет предыдущей страницы, метод
goBack() не выполнит действий, и необходимо предусмотреть
логику для обработки таких ситуаций.
Влияние на тестирование: Использование этих методов помогает в тестировании переходов между страницами, сценариев навигации, а также проверке реакции веб-страницы на обновления. Например, можно протестировать, как изменяются данные на странице после её перезагрузки или как восстанавливается состояние при возвращении на предыдущую страницу.
Поведение с кешированием: При использовании метода
reload() важно учитывать настройки кеширования. По
умолчанию браузер может использовать кешированные данные, что влияет на
точность тестов. Для избежания этого можно использовать параметры
reload({ ignoreCache: true }), чтобы игнорировать кеш.
Эти методы являются важными инструментами в арсенале тестировщика, так как позволяют более точно моделировать поведение пользователя и проверять корректность работы сайта в условиях навигации по истории.