При тестировании веб-приложений, использующих самоподписанные сертификаты, возникают определённые сложности, связанные с безопасностью и доверительными механизмами. В процессе тестирования необходимо убедиться, что WebdriverIO корректно взаимодействует с такими сертификатами, не блокируя выполнение тестов. В этой статье рассматриваются ключевые моменты работы с самоподписанными сертификатами при использовании WebdriverIO для тестирования.
Самоподписанный сертификат — это сертификат, который не был выдан доверенным центром сертификации (CA). Браузеры и другие клиентские приложения обычно не доверяют таким сертификатам по умолчанию, что приводит к ошибкам, например, предупреждениям о безопасности.
При автоматизированном тестировании с использованием WebdriverIO браузер будет блокировать доступ к страницам с самоподписанными сертификатами, так как они считаются небезопасными. Чтобы успешно провести тестирование таких страниц, необходимо настроить WebdriverIO так, чтобы он игнорировал предупреждения о безопасности, связанные с сертификатами.
В WebdriverIO можно настроить драйвер браузера так, чтобы он принимал
самоподписанные сертификаты или игнорировал предупреждения безопасности.
Для этого используется параметр acceptInsecureCerts в
настройках WebdriverIO.
Для браузера Chrome можно настроить параметр
acceptInsecureCerts в конфигурации WebdriverIO. Этот
параметр сообщает браузеру игнорировать ошибки, связанные с
SSL-сертификатами, включая самоподписанные сертификаты.
Пример конфигурации для WebdriverIO с Chrome:
exports.config = {
capabilities: [
{
browserName: 'chrome',
'goog:chromeOptions': {
args: [
'--headless', // Режим без интерфейса (по желанию)
'--disable-gpu',
'--no-sandbox',
],
},
acceptInsecureCerts: true, // Игнорировать самоподписанные сертификаты
},
],
};
Для Firefox настройка аналогична, только с использованием
FirefoxOptions. В случае с Firefox необходимо установить флаг
acceptInsecureCerts в значение true, чтобы
браузер принимал самоподписанные сертификаты.
Пример конфигурации для WebdriverIO с Firefox:
exports.config = {
capabilities: [
{
browserName: 'firefox',
'moz:firefoxOptions': {
args: [
'--headless', // Режим без интерфейса
],
},
acceptInsecureCerts: true, // Игнорировать самоподписанные сертификаты
},
],
};
Если необходимо работать с конкретным самоподписанным сертификатом, можно вручную установить его в доверенные сертификаты браузера. Это полезно, если вы хотите, чтобы сертификат был валидным, но всё ещё работаете в условиях тестирования. Процесс установки зависит от используемой операционной системы и браузера.
Для Chrome процесс установки сертификата следующий:
Для Firefox процесс аналогичен:
После установки сертификата в доверенные, WebdriverIO будет воспринимать сайт как безопасный, и тесты смогут выполняться без ошибок.
В некоторых случаях важно убедиться, что самоподписанный сертификат действительно используется на странице. В WebdriverIO можно получить информацию о сертификате через API браузера. Например, в Chrome можно получить данные сертификата через проксирование запросов.
Пример получения сертификата через WebdriverIO:
browser.url('https://example.com');
const cert = await browser.execute(() => {
return window.location.protocol;
});
console.log(cert); // Выведет информацию о протоколе (https или http)
Таким образом, можно проверять, что страница действительно использует защищённое соединение с самоподписанным сертификатом.
В случае работы с Chrome DevTools можно использовать API для манипулирования сертификатами и обработки ошибок безопасности. Встроенные функции WebdriverIO позволяют обращаться к DevTools, управлять подключениями и обрабатывать предупреждения безопасности.
Пример работы с DevTools для управления сертификатами:
const devTools = await browser.getDevToolsSession();
await devTools.send('Security.setOverrideCertificateErrors', { override: true });
Этот код позволяет игнорировать ошибки сертификатов в рамках сессии DevTools, что удобно для тестирования сайтов с самоподписанными сертификатами.
Настройка WebdriverIO для работы с самоподписанными сертификатами
требует внимания к деталям, особенно в контексте безопасности и
взаимодействия с различными браузерами. Использование параметра
acceptInsecureCerts позволяет значительно упростить
тестирование, исключив блокировки, связанные с сертификатами. Важно
учитывать, что такие настройки должны применяться исключительно в
тестовых средах, в реальной эксплуатации предпочтительны сертификаты,
выданные доверенными центрами сертификации.