Параметры браузера и возможности

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

Определение браузера

В Protractor браузер задается через объект capabilities или multiCapabilities в конфигурационном файле protractor.conf.js. Основные параметры:

capabilities: {
    browserName: 'chrome', // Браузеры: 'chrome', 'firefox', 'edge', 'safari'
    chromeOptions: {
        args: ['--headless', '--disable-gpu', '--window-size=1920,1080']
    },
    acceptInsecureCerts: true // Разрешение на работу с небезопасными сертификатами
}
  • browserName — указывает на тип браузера, который будет использоваться.
  • chromeOptions — позволяет передавать аргументы в Chrome, включая режим без GUI (headless), отключение GPU и установку размеров окна.
  • acceptInsecureCerts — критически важен для тестирования приложений с самоподписанными SSL-сертификатами.

Использование multiCapabilities позволяет запускать тесты параллельно на нескольких браузерах:

multiCapabilities: [
    { browserName: 'chrome' },
    { browserName: 'firefox' }
]

Настройка окна браузера

Размер окна и позиция браузера могут напрямую влиять на результаты тестов, особенно при работе с адаптивным дизайном. Protractor предоставляет методы для управления этим через глобальный объект browser:

browser.driver.manage().window().setSize(1280, 800);
browser.driver.manage().window().maximize();
browser.driver.manage().window().minimize();
  • setSize(width, height) — устанавливает точные размеры окна.
  • maximize() — разворачивает окно на весь экран.
  • minimize() — сворачивает окно, что иногда полезно для ускорения headless-тестов.

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

Protractor поддерживает различные типы таймаутов для синхронизации тестов с веб-приложением:

browser.manage().timeouts().implicitlyWait(5000); // Неявное ожидание элементов
browser.manage().timeouts().pageLoadTimeout(10000); // Ожидание загрузки страницы
browser.manage().timeouts().setScriptTimeout(5000); // Ожидание выполнения асинхронного скрипта
  • Неявное ожидание (implicitlyWait) — проверяет наличие элемента в течение заданного времени.
  • Page load timeout — ограничивает время загрузки страницы.
  • Script timeout — используется для асинхронных операций, например, выполнения скриптов через executeAsyncScript.

Работа с прокси и профилями

Для сложных сценариев тестирования часто необходимо использовать кастомные профили браузера или прокси-серверы. В Chrome это реализуется через chromeOptions:

chromeOptions: {
    args: [
        '--proxy-server=http://127.0.0.1:8080',
        '--user-data-dir=/tmp/custom-profile'
    ]
}
  • --proxy-server — указывает адрес прокси.
  • --user-data-dir — позволяет использовать отдельный профиль, что полезно для сохранения кук и настроек между сессиями.

Для Firefox аналогичные возможности предоставляются через moz:firefoxOptions:

'moz:firefoxOptions': {
    args: ['-headless'],
    prefs: {
        'network.proxy.type': 1,
        'network.proxy.http': '127.0.0.1',
        'network.proxy.http_port': 8080
    }
}

Управление загрузкой файлов

Автоматическая работа с файлами требует корректной настройки браузера. Для Chrome можно использовать:

chromeOptions: {
    prefs: {
        'download.default_directory': '/tmp/downloads',
        'download.prompt_for_download': false,
        'safebrowsing.enabled': true
    }
}
  • download.default_directory — директория загрузки файлов.
  • download.prompt_for_download — отключает диалог сохранения.
  • safebrowsing.enabled — разрешает загрузку безопасных файлов без подтверждений.

Настройки для headless режима

Headless режим особенно востребован в CI/CD пайплайнах. Основные настройки:

args: [
    '--headless',
    '--disable-gpu',
    '--no-sandbox',
    '--disable-dev-shm-usage',
    '--window-size=1920,1080'
]
  • --no-sandbox и --disable-dev-shm-usage — обязательны для стабильного запуска в Docker-контейнерах и Linux-средах.
  • --window-size — гарантирует корректное отображение элементов при тестировании адаптивного интерфейса.

Особенности параллельного запуска

При использовании multiCapabilities или shardTestFiles: true необходимо учитывать изоляцию браузерных сессий:

capabilities: {
    browserName: 'chrome',
    shardTestFiles: true,
    maxInstances: 3
}
  • shardTestFiles — делит тесты между экземплярами браузера.
  • maxInstances — ограничивает количество параллельных запусков.

Интеграция с Jasmine и Mocha

Protractor позволяет передавать параметры браузера в тестовые фреймворки:

framework: 'jasmine',
jasmineNodeOpts: {
    defaultTimeoutInterval: 30000
}

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

Выводы о настройке браузера

Гибкая конфигурация браузера в Protractor позволяет:

  • Проводить тестирование в разных средах.
  • Управлять адаптивностью и разрешением экрана.
  • Настраивать прокси, профили и скачивание файлов.
  • Использовать headless режим для CI/CD.
  • Оптимизировать параллельный запуск тестов.

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