Метод goto и его опции

Метод goto в Puppeteer используется для навигации по веб-страницам, загружая указанный URL. Это один из ключевых методов в арсенале инструментов для тестирования, так как он позволяет автоматически переходить на нужные страницы и контролировать их поведение.

await page.goto(url, options);

Параметры:

  • url (обязательный) — строка, представляющая URL страницы, на которую нужно перейти.
  • options (необязательный) — объект, содержащий различные параметры, позволяющие настроить поведение перехода.

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

await page.goto(&

Этот код откроет страницу по адресу https://example.com. Однако, часто при тестировании требуется больше настроек для управления загрузкой и поведением страницы.

Параметры метода goto

Метод goto поддерживает несколько опций, которые могут быть полезны для настройки тестов.

  1. waitUntil

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

Опция может принимать следующие значения:

  • ‘load’ — ждем, пока загрузка страницы не завершится (событие load).
  • ‘domcontentloaded’ — ждем, пока DOM-дерево будет полностью загружено, без учета ресурсов (событие DOMContentLoaded).
  • ‘networkidle0’ — ждем, пока количество активных соединений с сетью не станет равным нулю.
  • ‘networkidle2’ — ждем, пока количество активных соединений с сетью не станет меньше или равно 2.

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

await page.goto('https://example.com', { waitUntil: 'domcontentloaded' });

Этот код подождет, пока DOM страницы не будет полностью загружен.

  1. timeout

Опция timeout задает максимальное время в миллисекундах, которое будет потрачено на загрузку страницы. Если страница не загрузится за это время, будет выброшено исключение.

Значение по умолчанию — 30 000 миллисекунд (30 секунд).

Пример:

await page.goto('https://example.com', { timeout: 5000 });

Этот код попытается загрузить страницу в течение 5 секунд. Если страница не загрузится за это время, возникнет ошибка.

  1. waitForSelector

Иногда необходимо дождаться появления конкретного элемента на странице перед тем, как продолжить выполнение теста. В таких случаях можно использовать опцию waitForSelector, которая позволяет указать CSS-селектор элемента, наличие которого на странице гарантирует, что страница загрузилась должным образом.

Пример:

await page.goto('https://example.com', { waitUntil: 'domcontentloaded' });
await page.waitForSelector('#main-content');

Этот код сначала ждет завершения загрузки DOM, а затем ожидает появления элемента с id main-content.

  1. referer

Опция referer позволяет установить заголовок Referer для запроса. Это может быть полезно в ситуациях, когда необходимо эмулировать переход со страницы с одного сайта на другой, чтобы избежать ошибок при запросах с недостающими заголовками.

Пример:

await page.goto('https://example.com', { referer: 'https://another-site.com' });

Этот код устанавливает заголовок Referer, сообщающий серверу, что пользователь перешел на страницу с https://another-site.com.

  1. userAgent

Опция userAgent позволяет задать строку User-Agent для браузера. Это полезно, если необходимо имитировать запрос с другого устройства или браузера.

Пример:

await page.goto('https://example.com', { userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' });

Этот код задает строку User-Agent для имитации запроса от браузера Chrome на Windows.

Ожидание страницы

При автоматизации тестов важно правильно управлять временем ожидания. Опция waitUntil помогает указать, когда нужно считать страницу загруженной. Однако в некоторых случаях необходимо более точно контролировать момент появления элементов на странице или другие события. В таких ситуациях можно использовать метод waitForSelector или другие ожидания в Puppeteer.

Использование метода goto в реальных тестах

Метод goto часто используется в тестах для эмуляции переходов между страницами, навигации по веб-сайтам, проверки работы редиректов и т. п. Например, можно протестировать редирект на странице:

await page.goto('https://example.com/redirect', { waitUntil: 'load' });
const currentUrl = page.url();
console.log(currentUrl); // Должен вывести новый URL после редиректа

Кроме того, использование goto помогает при тестировании загрузки страниц с динамическим контентом, например, для сайтов с приложениями на основе JavaScript. В таких случаях важно удостовериться, что страницы загружаются корректно после выполнения всех асинхронных операций.

Исключения и ошибки

При использовании метода goto могут возникать ошибки, связанные с длительной загрузкой страницы, недоступностью ресурса или нарушениями в сети. Чтобы избежать сбоев, важно правильно обрабатывать исключения:

try {
  await page.goto('https://example.com', { timeout: 10000, waitUntil: 'load' });
} catch (error) {
  console.error('Ошибка при загрузке страницы:', error);
}

Это позволяет продолжить выполнение теста, даже если одна из страниц не загрузилась в установленный лимит времени.

Заключение

Метод goto является основным инструментом для навигации по страницам в Puppeteer и предоставляет гибкие возможности для настройки процесса загрузки и проверки контента на сайте. Настройка времени ожидания, заголовков и других параметров позволяет создавать более точные и надежные тесты, имитируя реальные действия пользователей на веб-страницах.