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) —
проверяет наличие элемента в течение заданного времени.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 режим особенно востребован в 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 — ограничивает количество параллельных
запусков.Protractor позволяет передавать параметры браузера в тестовые фреймворки:
framework: 'jasmine',
jasmineNodeOpts: {
defaultTimeoutInterval: 30000
}
Таймауты тестов должны быть синхронизированы с настройками браузера, иначе возможно прерывание теста до загрузки страницы или выполнения скрипта.
Гибкая конфигурация браузера в Protractor позволяет:
Эти возможности делают Protractor мощным инструментом для стабильного и предсказуемого автоматизированного тестирования веб-приложений.