Тестирование HTTPS

Protractor, будучи фреймворком для end-to-end тестирования Angular-приложений на JavaScript, поддерживает работу с приложениями, использующими HTTPS. Для корректного взаимодействия с защищёнными сайтами необходимо учитывать особенности сертификатов, настройки браузера и прокси.

Конфигурация Protractor для 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 на локальных серверах часто используются самоподписанные сертификаты. Чтобы браузер не блокировал подключение:

  1. Создать сертификат с помощью OpenSSL:

    openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
  2. Указать путь к сертификату в настройках браузера, если необходимо. Для Chrome это делается через флаг --ignore-certificate-errors в chromeOptions.

Использование Protractor с HTTPS и Angular

Angular-приложения могут использовать https:// в API-запросах и в маршрутизации. При написании тестов необходимо учитывать:

  • Все URL, передаваемые в browser.get(), должны быть полностью указаны с протоколом https://.
  • Если приложение использует переадресацию с HTTP на HTTPS, следует учитывать время ожидания и возможные редиректы:
browser.waitForAngularEnabled(true);
browser.get('https://localhost:4200');

Настройка ожиданий и таймаутов

HTTPS-соединения могут быть медленнее из-за проверки сертификатов и шифрования. Для стабильного выполнения тестов рекомендуется увеличить таймауты:

jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000; // 30 секунд
browser.manage().timeouts().pageLoadTimeout(30000);

Это предотвращает ошибки, связанные с медленным открытием защищённой страницы.

Прокси и HTTPS

В средах с корпоративными прокси может возникнуть необходимость настроить Protractor на работу через них:

capabilities: {
  browserName: 'chrome',
  proxy: {
    proxyType: 'manual',
    httpProxy: 'http://proxy.example.com:8080',
    sslProxy: 'http://proxy.example.com:8080'
  },
}

Такой подход позволяет браузеру корректно проходить через прокси при работе с HTTPS.

Проверка состояния HTTPS

Для тестирования защищённых соединений важно не только загрузить страницу, но и проверить статус сертификата и корректность подключения:

browser.get('https://localhost:4200').then(function() {
  return browser.executeScript('return window.location.protocol;');
}).then(function(protocol) {
  expect(protocol).toBe('https:');
});

Это гарантирует, что тест действительно работает по HTTPS, а не по HTTP с редиректом.

Взаимодействие с элементами на HTTPS-страницах

Работа с элементами не отличается от обычного тестирования, но нужно учитывать задержки из-за шифрования. Рекомендуется использовать методы ожидания:

const EC = protractor.ExpectedConditions;
const loginButton = element(by.id('login'));

browser.wait(EC.elementToBeClickable(loginButton), 10000);
loginButton.click();

Интеграция с CI/CD

При использовании HTTPS в CI/CD важно, чтобы агент сборки доверял сертификатам. Для этого можно:

  • Установить сертификат в доверенные на уровне агента.
  • Использовать флаги --ignore-certificate-errors в тестах.
  • Настроить отдельный тестовый сервер с валидным сертификатом для интеграции.

Логирование и отладка HTTPS

Для отладки HTTPS-соединений можно включить подробный лог:

capabilities: {
  browserName: 'chrome',
  loggingPrefs: {
    browser: 'ALL',
    performance: 'ALL',
  },
  chromeOptions: {
    args: ['--enable-logging', '--v=1']
  }
}

Это помогает отслеживать проблемы с сертификатами и редиректами.

Ограничения и особенности

  • TLS 1.3 и современные шифры полностью поддерживаются Chrome и Firefox в Protractor.
  • В Edge и Safari могут возникать дополнительные ограничения при работе с самоподписанными сертификатами.
  • HTTPS может замедлять тесты при большом количестве API-запросов из-за установления защищённых соединений.

Использование этих подходов обеспечивает стабильное и безопасное тестирование Angular-приложений через Protractor по HTTPS.