Вывод информации о браузере

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

Основные свойства и методы объекта browser

  • browser.getCurrentUrl() Возвращает текущий URL страницы в виде промиса. Используется для проверки переходов между страницами или для валидации текущего маршрута. Пример использования:
browser.getCurrentUrl().then(function(url) {
    console.log('Текущий URL:', url);
});
  • browser.getTitle() Позволяет получить заголовок страницы (<title>). Часто используется для проверок загрузки нужной страницы.
browser.getTitle().then(function(title) {
    console.log('Заголовок страницы:', title);
});
  • browser.getCurrentUrl() vs browser.getTitle() getCurrentUrl() возвращает полный URL, тогда как getTitle() возвращает только текст заголовка страницы. Оба метода возвращают промисы, поэтому их результаты следует обрабатывать через then или с использованием async/await.

Работа с размером окна и разрешением

  • browser.manage().window().getSize() Метод возвращает объект с текущей шириной и высотой окна:
browser.manage().window().getSize().then(function(size) {
    console.log('Ширина:', size.width);
    console.log('Высота:', size.height);
});
  • browser.manage().window().setSize(width, height) Позволяет программно изменять размеры окна браузера, что удобно при тестировании адаптивного дизайна.
browser.manage().window().setSize(1280, 800);
  • browser.manage().window().maximize() Максимизация окна до доступного разрешения экрана. Используется для того, чтобы избежать проблем с невидимыми элементами на маленьком экране.

Получение информации о браузере и платформе

  • browser.getCapabilities() Метод возвращает объект с набором возможностей браузера. Позволяет узнать тип браузера, версию, платформу и другие характеристики. Пример получения информации:
browser.getCapabilities().then(function(caps) {
    console.log('Браузер:', caps.get('browserName'));
    console.log('Версия:', caps.get('version') || caps.get('browserVersion'));
    console.log('Платформа:', caps.get('platform') || caps.get('platformName'));
});
  • Возможные ключи объекта caps зависят от используемого браузера и драйвера, но стандартными являются: browserName, version, platform, platformName, acceptSslCerts.

Использование async/await для упрощения кода

Современные версии Protractor поддерживают использование async/await, что делает код более читаемым и последовательным:

(async function() {
    const title = await browser.getTitle();
    console.log('Заголовок страницы:', title);

    const url = await browser.getCurrentUrl();
    console.log('Текущий URL:', url);

    const size = await browser.manage().window().getSize();
    console.log('Размер окна:', size.width, 'x', size.height);

    const caps = await browser.getCapabilities();
    console.log('Браузер:', caps.get('browserName'));
})();

Использование async/await устраняет необходимость в цепочках промисов и делает обработку информации о браузере интуитивно понятной.

Логирование и вывод информации

Для вывода данных о браузере можно использовать стандартный console.log, но в рамках автоматизированного тестирования часто применяется встроенный логгер Protractor или сторонние библиотеки логирования для структурированного вывода. Это особенно важно при работе с CI/CD, где результаты тестов должны быть читаемы и удобно анализируемы.

Особенности работы с разными браузерами

  • Информация, возвращаемая getCapabilities(), может различаться в зависимости от браузера. Например, Chrome и Firefox используют разные ключи для версии и платформы.
  • Размер окна и методы управления им могут вести себя по-разному при запуске в headless-режиме. В headless Chrome установка размеров окна критична, так как по умолчанию он использует минимальный размер 800x600.

Практические рекомендации

  1. Всегда оборачивать методы browser.getTitle() и browser.getCurrentUrl() в await или then, чтобы гарантировать получение актуальных данных.
  2. Использовать browser.getCapabilities() для определения браузера и платформы, что позволяет условно запускать тесты только для поддерживаемых конфигураций.
  3. Перед проверкой видимости элементов убедиться, что окно браузера развернуто до нужного размера.
  4. Для комплексного логирования состояния браузера можно создавать вспомогательные функции, объединяющие вывод URL, заголовка, размера окна и возможностей браузера.

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