Protractor, будучи фреймворком для end-to-end тестирования Angular-приложений на JavaScript, поддерживает работу с приложениями, использующими HTTPS. Для корректного взаимодействия с защищёнными сайтами необходимо учитывать особенности сертификатов, настройки браузера и прокси.
Основной файл конфигурации Protractor —
protractor.conf.js — позволяет указать параметры,
необходимые для работы с HTTPS. Основные параметры:
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['specs/**/*.spec.js'],
capabilities: {
browserName: 'chrome',
chromeOptions: {
args: [
'--ignore-certificate-errors', // Игнорировать ошибки сертификата
'--allow-insecure-localhost', // Разрешить небезопасные localhost-сертификаты
]
}
},
framework: 'jasmine',
};
Ключевые моменты:
--ignore-certificate-errors позволяет тестам проходить
даже при наличии самоподписанных сертификатов. Это полезно для локальной
разработки, но не рекомендуется в продакшн-среде.--allow-insecure-localhost разрешает тестировать
локальные серверы с самоподписанными сертификатами без необходимости
устанавливать их в систему.Для тестирования HTTPS на локальных серверах часто используются самоподписанные сертификаты. Чтобы браузер не блокировал подключение:
Создать сертификат с помощью OpenSSL:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodesУказать путь к сертификату в настройках браузера, если
необходимо. Для Chrome это делается через флаг
--ignore-certificate-errors в
chromeOptions.
Angular-приложения могут использовать https:// в
API-запросах и в маршрутизации. При написании тестов необходимо
учитывать:
browser.get(), должны быть
полностью указаны с протоколом https://.browser.waitForAngularEnabled(true);
browser.get('https://localhost:4200');
HTTPS-соединения могут быть медленнее из-за проверки сертификатов и шифрования. Для стабильного выполнения тестов рекомендуется увеличить таймауты:
jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000; // 30 секунд
browser.manage().timeouts().pageLoadTimeout(30000);
Это предотвращает ошибки, связанные с медленным открытием защищённой страницы.
В средах с корпоративными прокси может возникнуть необходимость настроить Protractor на работу через них:
capabilities: {
browserName: 'chrome',
proxy: {
proxyType: 'manual',
httpProxy: 'http://proxy.example.com:8080',
sslProxy: 'http://proxy.example.com:8080'
},
}
Такой подход позволяет браузеру корректно проходить через прокси при работе с HTTPS.
Для тестирования защищённых соединений важно не только загрузить страницу, но и проверить статус сертификата и корректность подключения:
browser.get('https://localhost:4200').then(function() {
return browser.executeScript('return window.location.protocol;');
}).then(function(protocol) {
expect(protocol).toBe('https:');
});
Это гарантирует, что тест действительно работает по HTTPS, а не по HTTP с редиректом.
Работа с элементами не отличается от обычного тестирования, но нужно учитывать задержки из-за шифрования. Рекомендуется использовать методы ожидания:
const EC = protractor.ExpectedConditions;
const loginButton = element(by.id('login'));
browser.wait(EC.elementToBeClickable(loginButton), 10000);
loginButton.click();
При использовании HTTPS в CI/CD важно, чтобы агент сборки доверял сертификатам. Для этого можно:
--ignore-certificate-errors в
тестах.Для отладки HTTPS-соединений можно включить подробный лог:
capabilities: {
browserName: 'chrome',
loggingPrefs: {
browser: 'ALL',
performance: 'ALL',
},
chromeOptions: {
args: ['--enable-logging', '--v=1']
}
}
Это помогает отслеживать проблемы с сертификатами и редиректами.
Использование этих подходов обеспечивает стабильное и безопасное тестирование Angular-приложений через Protractor по HTTPS.