Protractor — это инструмент для энд-ту-энд тестирования приложений на Angular и других веб-приложений. Одной из важных задач при автоматизации является корректная работа с HTTPS-сайтами, особенно если они используют самоподписанные сертификаты или сертификаты корпоративного удостоверяющего центра. В этой статье рассматриваются методы управления сертификатами в Protractor на уровне конфигурации и кода тестов.
В реальных проектах часто встречаются тестовые окружения с самоподписанными сертификатами, которые браузеры по умолчанию блокируют. Для обхода этой проверки используется настройка WebDriver:
exports.config = {
capabilities: {
browserName: 'chrome',
chromeOptions: {
args: ['--ignore-certificate-errors']
}
}
};
Ключевой момент — использование флага
--ignore-certificate-errors, который позволяет Chrome
продолжить работу, не выдавая предупреждений. Для Firefox применяется
аналогичная настройка:
exports.config = {
capabilities: {
browserName: 'firefox',
'moz:firefoxOptions': {
args: ['-ignore-certificate-errors']
}
}
};
Игнорирование ошибок сертификатов подходит только для тестовой среды и не должно применяться в продакшн-тестах.
Некоторые приложения требуют аутентификацию через клиентский сертификат (mutual TLS). Protractor позволяет передавать такие сертификаты через ChromeOptions или Firefox Profile:
const path = require('path');
exports.config = {
capabilities: {
browserName: 'chrome',
chromeOptions: {
args: [
`--client-certificate-file=${path.resolve(__dirname, 'certs/client.p12')}`,
'--client-certificate-password=yourpassword'
]
}
}
};
В Firefox клиентский сертификат подключается через профиль:
const firefox = require('selenium-webdriver/firefox');
const profile = new firefox.Profile();
profile.setPreference('security.default_personal_cert', 'Select Automatically');
exports.config = {
capabilities: {
browserName: 'firefox',
'moz:firefoxOptions': {
profile: profile
}
}
};
Важно: Пароль к сертификату передается в коде либо через переменные окружения для безопасности.
Иногда необходимо более тонкое управление SSL-соединением. WebDriver
позволяет настраивать свои возможности через
acceptInsecureCerts:
exports.config = {
capabilities: {
browserName: 'chrome',
acceptInsecureCerts: true
}
};
Параметр acceptInsecureCerts действует на уровне
протокола WebDriver и работает с любыми браузерами, поддерживающими эту
опцию. Это более универсальный способ, чем использование флагов через
chromeOptions или профиль Firefox.
Даже при использовании acceptInsecureCerts иногда
браузеры показывают страницу предупреждения (например, Chrome “Your
connection is not private”). Для автоматизации тестов можно применять
следующий подход:
browser.ignoreSynchronization = true; // для не-Angular страниц
browser.get('https://example.com');
browser.switchTo().alert().accept(); // обработка всплывающих предупреждений
Этот метод позволяет продолжать выполнение тестов после появления предупреждений, не прерывая сценарий.
Для более сложных сценариев корпоративного тестирования часто
используют импорт сертификатов в системное хранилище. Например, на
Windows сертификат можно добавить через MMC, на Linux — через
update-ca-certificates. После этого браузеры автоматически
доверяют сертификату, и тесты запускаются без дополнительных настроек в
Protractor.
При автоматическом прогоне тестов в CI/CD важно, чтобы тестовый сервер корректно принимал самоподписанные сертификаты. Один из подходов:
--ignore-certificate-errors и
acceptInsecureCerts: true для надежного обхода
предупреждений.Такой подход гарантирует стабильное выполнение тестов в автоматизированной среде без ручного вмешательства.
Эти практики позволяют обеспечить корректное тестирование HTTPS-приложений в Protractor с минимальными рисками и максимальной надежностью.