Работа с browser console

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

Основы работы с консолью

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

В Playwright можно слушать события консоли с помощью метода page.on('console'). Этот метод позволяет регистрировать обработчик событий, который будет срабатывать каждый раз, когда на странице появляется сообщение в консоли.

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

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

(async () => {
  const browser = await webkit.launch();
  const page = await browser.newPage();

  // Регистрация обработчика событий консоли
  page.on('console', (msg) => {
    console.log(`Консольное сообщение: ${msg.text()}`);
  });

  await page.goto('https://example.com');
  await browser.close();
})();

В этом примере вся информация, которая появляется в консоли страницы, будет выведена в консоль терминала.

Работа с типами сообщений

В консоли браузера могут быть различные типы сообщений. Playwright предоставляет доступ к этим сообщениям через объект msg, который передается в обработчик события. Каждый объект сообщения имеет метод type(), который позволяет получить тип сообщения.

Типы сообщений, которые могут быть выведены в консоль:

  • log: обычные сообщения (например, вывод через console.log).
  • info: информационные сообщения (например, вывод через console.info).
  • warn: предупреждения (например, вывод через console.warn).
  • error: ошибки (например, вывод через console.error).
  • debug: сообщения отладки (например, вывод через console.debug).

Пример обработки различных типов сообщений:

page.on('console', (msg) => {
  switch (msg.type()) {
    case 'log':
      console.log(`Обычное сообщение: ${msg.text()}`);
      break;
    case 'warn':
      console.warn(`Предупреждение: ${msg.text()}`);
      break;
    case 'error':
      console.error(`Ошибка: ${msg.text()}`);
      break;
    default:
      console.log(`Тип сообщения: ${msg.type()}, Текст: ${msg.text()}`);
  }
});

Доступ к дополнительной информации

Кроме текста сообщения, объект msg предоставляет доступ к другим полезным данным. Например, можно получить:

  • args() — аргументы, которые были переданы в консольное сообщение. Это массив объектов, представляющих аргументы, переданные в функцию консольного вывода (например, для console.log(a, b) будет возвращен массив, содержащий объекты, представляющие a и b).

    Пример:

    page.on('console', (msg) => {
      const args = msg.args();
      args.forEach((arg, index) => {
        console.log(`Аргумент ${index}: ${arg}`);
      });
    });
  • location() — местоположение (файл, строка и столбец), где было вызвано консольное сообщение.

    Пример:

    page.on('console', (msg) => {
      const location = msg.location();
      console.log(`Сообщение вызвано в файле: ${location.url}, строка: ${location.lineNumber}`);
    });

Управление логами консоли

Иногда нужно не просто прослушивать консольные сообщения, но и управлять их выводом. Например, в некоторых случаях необходимо скрывать определенные типы сообщений или фильтровать их.

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

Пример фильтрации сообщений:

page.on('console', (msg) => {
  if (msg.type() !== 'warn') {
    console.log(`Сообщение: ${msg.text()}`);
  }
});

Применение в тестах

Использование консольных сообщений может быть полезно для тестирования. Например, можно проверять, что на странице нет ошибок JavaScript после выполнения определенных действий.

Пример:

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

(async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage();

  // Обработчик консоли для ловли ошибок
  page.on('console', (msg) => {
    if (msg.type() === 'error') {
      throw new Error(`Ошибка в консоли: ${msg.text()}`);
    }
  });

  await page.goto('https://example.com');
  
  // Выполнение действий на странице, которые могут вызвать ошибку
  await page.click('#nonexistent-button'); // Пример вызова ошибки

  await browser.close();
})();

В этом примере при возникновении ошибки в консоли тест немедленно завершится с ошибкой, если на странице появится сообщение типа error.

Заключение

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