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

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


Работа с объектом browser

В Protractor объект browser представляет активный браузерный сеанс. Через него осуществляется управление навигацией, выполнение скриптов и получение информации о текущем окружении.

Основные методы для получения информации:

  • browser.getCurrentUrl(): возвращает текущий URL в браузере. Пример использования:

    browser.getCurrentUrl().then(function(url) {
        console.log('Текущий URL:', url);
    });
  • browser.getTitle(): получает заголовок текущей страницы. Полезно для проверки корректной загрузки страниц.

    const title = await browser.getTitle();
    console.log('Заголовок страницы:', title);
  • browser.getPageSource(): возвращает HTML-код текущей страницы. Может использоваться для детального анализа DOM или отладки.


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

Для тестов, которые должны учитывать особенности браузеров, важно уметь получать информацию о браузере и операционной системе. В Protractor доступ к этим данным реализован через объект browser.getCapabilities().

Пример:

const capabilities = await browser.getCapabilities();
console.log('Имя браузера:', capabilities.get('browserName'));
console.log('Версия браузера:', capabilities.get('version') || capabilities.get('browserVersion'));
console.log('Платформа:', capabilities.get('platform') || capabilities.get('platformName'));

Ключевые возможности:

  • browserName — имя браузера (например, chrome, firefox).
  • version или browserVersion — версия браузера.
  • platform или platformName — операционная система.
  • Дополнительные свойства могут включать поддержку мобильных платформ или специфические настройки WebDriver.

Проверка поддержки функций браузера

Иногда тесты должны выполняться только при наличии определённых возможностей браузера (например, поддержка JavaScript или определённых API). Для этого можно использовать комбинацию browser.executeScript и проверку существования свойств объекта window:

const supportsFetch = await browser.executeScript('return typeof window.fetch === "function";');
console.log('Поддержка fetch API:', supportsFetch);

Также возможно определять поддержку CSS-свойств или других веб-API через аналогичные проверки.


Получение состояния окна браузера

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

  • Получение размеров окна:
const size = await browser.manage().window().getSize();
console.log('Ширина окна:', size.width);
console.log('Высота окна:', size.height);
  • Получение позиции окна на экране:
const position = await browser.manage().window().getPosition();
console.log('Позиция окна X:', position.x);
console.log('Позиция окна Y:', position.y);
  • Изменение размеров окна:
await browser.manage().window().setSize(1280, 720);
  • Перемещение окна на экран:
await browser.manage().window().setPosition(100, 50);

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


Логирование и отладка браузера

Для комплексного анализа поведения приложения полезно собирать логи браузера. Protractor поддерживает получение различных типов логов через browser.manage().logs():

const logs = await browser.manage().logs().get('browser');
logs.forEach(entry => {
    console.log(`[${entry.level.name}] ${entry.message}`);
});

Типы логов могут включать:

  • browser — ошибки и предупреждения JS.
  • driver — внутренние сообщения WebDriver.
  • performance — данные о производительности.

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

Protractor позволяет работать с несколькими окнами браузера. Получение информации о текущем окне и переключение между ними:

const handles = await browser.getAllWindowHandles();
console.log('Все окна:', handles);

await browser.switchTo().window(handles[1]);
console.log('Переключились на второе окно');

Методы:

  • getAllWindowHandles() — возвращает массив идентификаторов всех открытых окон.
  • switchTo().window(handle) — переключение на конкретное окно.
  • getWindowHandle() — возвращает идентификатор текущего окна.

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


Асинхронность и ожидание данных

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

async function printBrowserInfo() {
    const url = await browser.getCurrentUrl();
    const title = await browser.getTitle();
    const capabilities = await browser.getCapabilities();
    
    console.log(`URL: ${url}, Title: ${title}, Browser: ${capabilities.get('browserName')}`);
}

await printBrowserInfo();

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


Заключение по ключевым аспектам работы с браузером

  • Использование browser.getCapabilities() позволяет адаптировать тесты под конкретный браузер и платформу.
  • Методы getCurrentUrl(), getTitle(), getPageSource() дают полный контроль над проверкой состояния страницы.
  • Работа с окнами и размерами браузера обеспечивает поддержку различных сценариев пользовательского интерфейса.
  • Логирование и выполнение скриптов через executeScript помогают проверять функциональность и отлаживать ошибки.

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