Переход по URL

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

Для начала работы с переходом по URL в Playwright необходимо создать экземпляр браузера, открыть страницу и выполнить переход. Операция перехода по URL выполняется с помощью метода page.goto(url). Этот метод ожидает строку с URL и выполняет переход на указанную страницу.

Пример кода для перехода по URL:

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  await browser.close();
})();

Ожидание загрузки страницы

Когда тестируемый веб-сайт загружается, необходимо учитывать время на загрузку ресурсов и выполнение JavaScript-кода. Метод page.goto(url) по умолчанию ожидает завершения загрузки страницы. Однако можно настроить поведение с помощью параметров метода, чтобы контролировать, какие события должны завершиться до того, как тест будет продолжен.

Метод goto имеет несколько опций, которые могут помочь в таких случаях:

  • waitUntil — позволяет задать, когда переход по URL считается завершённым:

    • load (по умолчанию) — ожидает, пока страница не будет полностью загружена.
    • domcontentloaded — ожидает, пока DOM-дерево страницы будет полностью построено.
    • networkidle — ожидает, пока не будет активного сетевого трафика в течение заданного времени.

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

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

Параметры перехода по URL

Метод goto также принимает другие параметры, такие как:

  • timeout — максимальное время ожидания, по истечении которого будет выброшено исключение. По умолчанию это значение составляет 30 секунд.
  • referer — заголовок Referer, который может быть использован для подмены исходного источника перехода.
  • headers — дополнительные HTTP-заголовки, которые могут быть переданы вместе с запросом.

Пример с дополнительными параметрами:

await page.goto('https://example.com', {
  timeout: 5000,
  referer: 'https://another-example.com',
  headers: {
    'X-Custom-Header': 'CustomValue'
  }
});

Ожидание конкретных элементов

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

Пример:

await page.goto('https://example.com');
await page.waitForSelector('.main-content');

Здесь тест будет ожидать появления элемента с классом .main-content на странице.

Переход с сохранением состояния

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

Для этого можно использовать методы context.storageState() и context.addCookies() для сохранения состояния или сохранённых cookies.

Пример сохранения состояния:

const storage = await context.storageState();
await page.goto('https://example.com');

Переход с учетом настроек браузера

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

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

const browser = await chromium.launch({
  proxy: { server: 'http://myproxy.com' }
});
const page = await browser.newPage();
await page.goto('https://example.com');

Работа с редиректами

Редиректы — важный аспект при тестировании веб-приложений. Метод goto автоматически обрабатывает редиректы, следуя за ними. Однако можно настроить, как должны обрабатываться редиректы, с помощью параметра maxRedirects.

Пример:

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

Этот код ограничивает количество редиректов, которые будут выполнены при переходе.

Обработка ошибок при переходе

При переходе по URL могут возникать ошибки, такие как 404 (страница не найдена) или 500 (ошибка на сервере). Чтобы корректно обработать такие ошибки, можно использовать конструкцию try...catch.

Пример обработки ошибки при переходе:

try {
  await page.goto('https://example.com');
} catch (error) {
  console.log('Ошибка при переходе по URL:', error);
}

Этот подход позволяет отлавливать исключения и адаптировать тесты для работы с нестабильными или ошибочными страницами.

Использование локальных URL

Если необходимо протестировать приложение на локальном сервере или локальных файлах, можно использовать локальные пути вместо общедоступных URL. Playwright поддерживает работу с файлами через file://.

Пример перехода по локальному файлу:

await page.goto('file:///path/to/your/local/file.html');

Переход через интерфейс страницы

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

Пример перехода по ссылке:

await page.click('a[href="https://example.com"]');

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

Заключение

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