- Что такое ssl-сертификат?
- Python selenium – как указать сертификат клиента для использования в клиентской аутентификации ssl
- Базовый класс
- Дополнительная информация
- Запуск тестов
- Как бороться с сертификатами с использованием selenium?
- Как обработать ошибку сертификата ssl с помощью selenium webdriver
- Как проверяются сертификаты ssl
- Настройка среды разработки
- Обёртка
- Обработка ошибок сертификата ssl в firefox
- Обработка ошибок сертификата ssl в ie
- Подготовка
- Преимущества ssl-сертификата
- Пример написания теста
- Советы
- Типы ssl-сертификатов
- Заключение
Что такое ssl-сертификат?
SSL (Secure Sockets Layer) — это стандартный протокол безопасности для установления безопасного соединения между сервером и клиентом, который является браузером.
Сертификат SSL (Secure Socket Layer) обеспечивает безопасное преобразование данных через сервер и клиентское приложение, используя строгий стандарт шифрования или цифровую подпись. Нужно установить сертификат SSL или сертификат подписи кода.
В этом уроке вы узнаете
Python selenium – как указать сертификат клиента для использования в клиентской аутентификации ssl
Я просмотрел все возможные ключи во всех json файлах, основываясь на ответе в Python Selenium – Какие возможные ключи в настройках профиля Firefox FireFox, но я не мог” t найдите ключ, чтобы указать сертификат клиента для использования в моем SSL-соединении.
Я исследовал это, но я не смог найти точный ответ. Я обнаружил, что нам нужно добавить сертификат в профиль FireFox на основе ответа в Как импортировать SSL-сертификаты для Firefox с Selenium [на Python]?, но я здесь я не могу понять, как именно этот сертификат нужно добавить.
Обратите внимание, что я не говорю о доверении сертификату сервера. По умолчанию при запуске SSL-подключения в качестве сертификата клиента используется локальный сертификат, назначенный вашей рабочей станции. Здесь мне нужно использовать новую пару сертификата/частного ключа для моего SSL-соединения. Мне нужно сделать это, чтобы проверить аутентификацию клиента в SSL.
Итак, в общем, я ищу некоторую конфигурацию, которая выглядит так:
profile.add_client_cert(path_to_cert)
profile.add_private_key(path_to_private_key)
Я нашел пару файлов, которые могут быть тем, что мне нужно настроить, но не знаю, как добавить сертификат и ключи к этим файлам, cert8.db и key3.db. Я нашел эти файлы в каталоге профиля FireFox.
Я искал исходный код селена, но не смог найти ответ:
https://github.com/SeleniumHQ/selenium/search?utf8=✓&q=cert
Базовый класс
До начала написания самих автоматизированных тестов вначале нам необходимо создать вспомогательные классы.
В тестовом проекте добавим новый класс и назовем его
SeleniumTestBase.cs
(можно и по-другому). Объявим этот класс как
public abstract
, так как именно от этого класса будут наследоваться в дальнейшем все тестовые классы. Также к классу необходимо добавить атрибут
[TestFixture]
, что обозначает класс как тест-класс. В данном классе объявляются те поля и методы, которые необходимы для прохождения любого теста.
В этом классе обязательно объявляем поле:
protected IWebDriver Driver
; — это экземпляр драйвера браузера, который создается перед прогоном теста(-ов). Существует 4 вида драйверов ( несколько в стадии разработки): FirefoxDriver, InternetExplorerDriver, ChromeDriver, HtmlUnitDriver (кроссплатформенный виртуальный браузер без графической составляющей).
Также в классе объявим 4 метода (хотя некоторые могут быть пустыми илии не определятся вообще):public void TestInitialize() с атрибутом [TestFixtureSetUp] – метод с данным атрибутом будет вызываться один раз перед прогоном тестов из какого-либо тестового класса (если классов несколько, то метод будет вызываться перед тестами из первого класса, потом перед методами второго класса и так далее).
public void TestCleanup() с атрибутом [TestFixtureTearDown] – принцип работы как у предыдущего метода, но только после прогона тест-класса. В данном классе желательно закрыть драйвер браузера, так как при прогоне следующего тест-класса обязательно создастся новый экземпляр драйвера браузера (в итоге могут остаться открытыми многие экземпляры драйвера браузера, а оперативная память не резиновая):Driver.Quit();
public void OneTearDown() с атрибутом [TearDown] – метод вызывается после прогона каждого отдельного теста. В этом методе, например, можно почистить куки браузера перед каждым новым тестом:Driver.Manage().Cookies.DeleteAllCookies();
public void OneSetUp() с атрибутом [SetUp] – метод вызывается перед прогоном каждого отдельного теста. Например, можно разворачивать окно браузера на весь экран при прогоне теста (неактуально для HtmlUnitDriver):Driver.Manage().Window.Maxmize();
Дополнительная информация
Наиболее быстрым драйвером браузера считается ChromeDriver. Угадайте самый медленный.
Запуск тестов
Чтобы прогнать наши тесты, нам необходима специально созданная для этого программа –
NUnit
(ссылка на скачивание в начале документа).
Скомпилируем наш тестовый проект. На выходе мы имеем файл типа .dll
Запустим NUnit. Далее нажмем File-Open Project. Появится окно, в котором мы должны найти и выбрать только что скомпилированную библиотеку.
После загрузки библиотеки в программу, слева мы увидим дерево тест-классов с нашими тестами. В этом дереве можно выбрать отдельный тест, класс или все классы тестов, после чего нажать кнопку Run – и тесты начнут прогоняться. Прогон можно в любой момент остановить, нажав кнопку Stop.
После прохождения тестов, их цвет будет меняться в дереве: зеленый – тест прошел, красный – тест упал, желтый – тест не пройдет по каким-либо причинам (не падение), серый – тест еще не запускался. Под кнопками находится окошко с логом упавших тестов, по которому можно выяснить, почему упал тот или иной тест.
Как бороться с сертификатами с использованием selenium?
Я использую селен для запуска браузера. Как я могу справиться с веб-страницами (URL), которые попросят браузер принять сертификат или нет?
в Firefox у меня может быть такой сайт, который просит меня принять его сертификат следующим образом:

в браузере Internet Explorer я могу получить что-то вроде этого:

В Google Chrome:

повторяю вопрос: как я могу автоматизировать принятие сертификата веб-сайта при запуске браузера (Internet Explorer, Firefox и Google Chrome) с Selenium (язык программирования Python)?
Как обработать ошибку сертификата ssl с помощью selenium webdriver
Предположим, что мы написали несколько тестовых сценариев и, выполняя сценарий, мы обнаружили в ситуации «Ненадежное соединение» выше, как мы обрабатываем исключение исключительно посредством автоматизации.
В таком случае мы должны настроить наш скрипт таким образом, чтобы он сам позаботился об исключении SSL.
Сценарии должны быть изменены в соответствии с типом экземпляра браузера, который мы используем. Это когда желаемые возможности появляются на картинке.
Требуемые возможности используются для настройки экземпляра драйвера Selenium Webdriver. С помощью желаемых возможностей можно настроить все экземпляры драйверов, такие как ChromeDriver, FirefoxDriver и Internet Explorer.
На данный момент у нас нет конкретного URL для создания вышеуказанного сценария, но я предоставляю шаги, которые мы можем добавить в сценарий Selenium для обработки описанной выше ситуации «Ненадежное соединение».
Как проверяются сертификаты ssl
SSL работает через комбинацию программ и процедуры шифрования / дешифрования, которые существуют на компьютере веб-сервера и в браузере веб-сервера.
SSL-сертификат в основном содержит нижеприведенную информацию.
- Тема, которая является личностью владельца сайта.
- Достоверность информации — открытый и закрытый ключи.
Закрытый и открытый ключи — это два уникально связанных криптографических ключа (числа). Все, что зашифровано открытым ключом, может быть расшифровано только закрытым ключом.
Если из-за сертификата не установлено безопасное соединение между сервером и клиентом, появится следующая ошибка сертификата SSL.
Настройка среды разработки
Для написания автоматизированных тестов необходимо создать новый проект типа
Class Library
(можно создать и консольное приложение, но не в нашем случае). Желательно дать ему название, которое ассоциируется с названием тестируемого проекта. Также, желательно создать тестовый проект в самом солюшене с тестируемым проектом.
После создания тестового проекта к нему необходимо подключить 3 специальные библиотеки для тестов:
NUnit (nunit.framework)
– библиотека для непосредственного прогона автоматизированных тестов (не только для Selenium);
WebDriver WebDriver.Support
– непосредственно библиотеки Selenium’a.
Подключить библиотеки к тестовому проекту можно через NuGet или вручную, скачав последнюю версию с сайта
Обёртка
При написании разных тестов (даже в разных классах) возможно дублирование кода (точнее, оно обязательно будет). Чтобы избежать нагромождения в тестовых классах, полезно создать вспомогательный класс
static class Wrapper
, в который и выносим в отдельные методы дублирование кода.
Большинство тестов будут начинаться с одной и той же строчки кода:
Driver.Navigate().GoToUrl(<урл>);
Поэтому логично в классе Wrapper определить поле
private static string _domain
, в котором пропишем нужный нам урл, а также метод для получения этого урла:
Разница между Wrapper.cs и SeleniumTestBase.cs в том, что в первом объявляются методы, которые вызываются внутри тестов (и даже внутри SeleniumTestBase), а во втором – методы, которые вызываются до или после тестов.После создания вспомогательных тестов уже создаем обычные тестовые классы.
Таким образом, архитектура тестового проекта выглядит так:
Обработка ошибок сертификата ssl в firefox
Для обработки ошибки сертификата SSL в Firefox нам нужно использовать требуемые возможности Selenium Webdriver и выполнить следующие шаги.
Шаг 1) : Сначала нам нужно создать новый профиль Firefox с именем « myProfile ». Вы можете обратиться к Google, чтобы узнать «Как создать» профиль Firefox. Это просто и легко.
Шаг 2) : Теперь откройте myProfile в скрипте, как показано ниже, и создайте объект FirefoxProfile.
ProfilesIni prof = new ProfilesIni()
FirefoxProfile ffProfile= prof.getProfile ("myProfile")
Шаг 3) : Теперь нам нужно установить свойства « setAcceptUntrustedCertificates » и « setAssumeUntrustedCertificateIssuer » в профиле Fire Fox.
ffProfile.setAcceptUntrustedCertificates(true) ffProfile.setAssumeUntrustedCertificateIssuer(false)
Шаг 4) : теперь используйте профиль FireFox в объекте драйвера FireFox.
WebDriver driver = new FirefoxDriver (ffProfile)
Примечание . «SetAcceptUntrustedCertificates» и «setAssumeUntrustedCertificateIssuer » являются возможностями для обработки ошибок сертификата в веб-браузерах.
Обработка ошибок сертификата ssl в ie
В отличие от обработки SSL-сертификатов в браузере Chrome и Firefox, в IE вам, возможно, придется обрабатывать его с помощью JavaScript.
Для обработки SSL-сертификата в IE вы можете справиться с этой ситуацией двумя способами:
- При этом вы перейдете по ссылке « Перейти на этот сайт (не рекомендуется)». Далее мы увидим, как обрабатывать ошибки SSL в IE.
Заметив ошибку сертификата SSL в браузере IE, вы найдете ссылку «Перейти на этот сайт (не рекомендуется)». Эта ссылка имеет идентификатор «переопределить ссылку». Вы можете просмотреть идентификатор в режиме HTML с помощью F12.
Нажмите на ссылку, используя метод driver.navigate () с JavaScript, как показано ниже: —
driver.navigate ().to ("javascript:document.getElementById('overridelink').click()");- Второй метод очень похож на Chrome SSL Handling code
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
System.setProperty("webdriver.ie.driver","IEDriverServer.exe");
WebDriver driver = new InternetExplorerDriver(capabilities);Приведенный выше код поможет обработать ошибку сертификата SSL в IE.
Резюме:
- SSL (Secure Sockets Layer) — это стандартный протокол безопасности для установления безопасного соединения между сервером и клиентом.
- Браузер и сервер используют механизм SSL-сертификатов, чтобы установить безопасное соединение.
- SSL работает через комбинацию программ и процедуры шифрования / дешифрования, которые существуют на компьютере веб-сервера и в браузере веб-сервера.
- Если между сервером и клиентом не установлено безопасное соединение из-за сертификата, возникнет ошибка сертификата SSL
- Нужно настроить наш скрипт таким образом, чтобы он самостоятельно позаботился об исключении / ошибке SSL через веб-драйвер Selenium.
Подготовка
Для разработки автоматизированных тестов с использованием Selenium нам необходимы следующие компоненты:
Среда разработки, в нашем случае Visual Studio;
Преимущества ssl-сертификата
Есть ряд преимуществ использования SSL-сертификата, таких как,
- Можно повысить доверие своих пользователей и клиентов, чтобы быстро увеличить рост бизнеса.
- Эти сертификаты помогают защитить онлайн-транзакции и конфиденциальную информацию клиентов, такую как данные кредитной или дебетовой карты и т. Д.
- Подписание сертификата имеет тенденцию получать максимальное количество скачиваний и хорошие отзывы от пользователей.
Пример написания теста
Создадим новый тестовый класс и назовем его TestClass1.cs. Вначале напишем простенький код теста, далее объясним, что какая строка кода делает.
[Test]
– атрибут, который определяет, что данный метод является тестовым.
Timeot(int millSec)
– работает только вместе с атрибутом Test – указывает максимально допустимое количество миллисекунд на прохождение теста. Если таймаут превышен, тест падает сразу (даже во время выполнения) и считается непройденным.
public void
– тест должен иметь именно такой модификатор доступа и не должен возвращать никакое значение для корректной работы теста.
Driver.Navigate().GoToUrl(Wrapper.GetUrl())
— драйвер браузера откроет нам страничку Яндекса.
Assert.IsTrue(Driver.Title == «Яндекс»)
— непосредственная проверка, в данном случае тест проверяет, что тайтл странички есть «Яндекс», в этом случае тест считается пройденным, иначе тест не пройден.
Советы
В написании автоматизированных тестов следует придерживаться концепции
AAA – Arrange-Act-AssertArrange
– необходимые настройки и действия перед самим тестом;
Act
– непосредственно тест;
Assert
– блок проверки условий типа «ожидаемый результат == текущий результат».
Возьмем пример выше, немного его переписав:
Здесь Arrange – это переход по урлу, Act – вычисление титла страница, Assert – проверка условия «ожидаемый результат == текущий результат».
Для удобства чтения тест можно переписать так:
Возьмите в привычку: один тест – один Assert. Желательно не нарушать совсем или нарушать в крайних случаях (при большом количестве проверок в тесте читабельность кода снижается).
Многие селекторы в коде могут повторяться по нескольку раз. Лучше их выносить в отдельные строковые константы, так как верстка сайта может постоянно меняться, а вместе с ней и селекторы. Тогда при изменении селектора его придется менять лишь в одном месте, а не в 20-ти местах по всему проекту.
Иногда первый запуск тест может падать по таймауту, так как при первом запуске драйвера браузера возможна долгая загрузка страницы. Следует увеличить в некоторых тестах таймауты.
По стандартам качества, таймаут на загрузку страницы в браузере равен 10 секунд. Ставьте таймаут по поиску элемента на странице в 11 секунд (максимум 12).
С некоторыми элементами на странице невозможно взаимодействовать при помощи Selenium C#. В данном случае следует использовать JavaScript JQuery для доступа к таким элементам страницы. Пример:
Для удобства прогона тестов (NUnit не самая удобная вещь) можно дополнительно установить в Visual Studio плагин ReSharper, который с легкостью позволяет запускать тесты, а также смотреть результаты прогона. Но в отличие от NUnit, ReSharper – платное дополнение.
Типы ssl-сертификатов
Браузер и сервер используют механизм SSL-сертификатов, чтобы установить безопасное соединение. Это соединение включает проверку трех типов сертификатов.
- корень
- промежуточный
- Сертификат сервера
Процесс получения SSL-сертификата
Процесс получения SSL-сертификата включает в себя следующие шаги:
- Сначала необходимо создать запрос CSR (создать запрос на подпись сертификата).
- Запрос CSR создает файл данных CSR, который отправляется эмитенту сертификата SSL, известному как CA (центр сертификации).
- CA использует файлы данных CSR для создания SSL-сертификата для вашего сервера.
- Получив сертификат SSL, вы должны установить его на свой сервер.
- Также необходимо установить промежуточный сертификат, который связывает ваш SSL-сертификат с корневым сертификатом CA.
На изображении ниже представлены все три сертификата — корневой, промежуточный и серверный.
Заключение
Данную статью, к сожалению, нельзя считать руководством по написанию Selenium-тестов, так как здесь не описаны методы и способы тестирования Web-приложений. В частности, класс Assert для проверки условий и Selenium-методы поиска элементов на Web-странице. Этому будет посвящена другая статья.
Надеюсь, что изложенный мною подход будет использован кем-либо для написания своих автоматизированных тестов.
Спасибо за внимание!
