Мар 192016
 

WebDriver и SSL Untrusted certificate

При тестировании веб-приложений, использующих защищенное https соединение, Вы можете столкнуться с ошибками сертификатов при работе с некоторыми веб-драйверами, в частности, с InternetExplorerDriver. Если существует какая-либо проблема с сертификатом, Вы увидите оповещение «Это соединение является недоверенным». Как и в случае с диалоговыми окнами, при появлении такого сообщения работа веб-драйвера с элементами страницы полностью блокируется и продолжать тестирование ресурса дальше просто невозможно.

FirefoxDriver и ChromeDriver

На сегодняшний день FirefoxDriver и ChromeDriver (selenium 2.37.1) автоматически принимают все сертификаты по-умолчанию и не выводят оповещений, поэтому никаких дополнительных настроек при работе с ними не требуется. Однако такое поведение для FirefoxDriver уже отмечено как @Deprecated и возможно в скором времени предупреждения сертификатов безопасности будут обрабатываться иначе.

// Accept untrusted SSL certificates.
@Deprecated
public static final boolean ACCEPT_UNTRUSTED_CERTIFICATES = true;

В любом случае, приведу примеры того как управлять автоматическим приемом сертификатов, возможно, Вам это пригодится для более ранних версий драйвера или наоборот понадобится это отключить.

1. Для FirefoxDriver:

DesiredCapabilities capability = DesiredCapabilities.firefox();
capability.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
driver = new FirefoxDriver(capability);

или

FirefoxProfile profile = new FirefoxProfile();
profile.setAcceptUntrustedCertificates(true);
driver = new FirefoxDriver(profile);

2. Для ChromeDriver:

ChromeOptions options = new ChromeOptions();
options.addArguments("--ignore-certificate-errors");
driver = new ChromeDriver(options);

В текущей реализации chromedriver.exe опция «—ignore-certificate-errors» передается браузеру по-умолчанию во время инициализации. Для того, чтобы эту функцию отключить можно выполнить следующее (для chromedriver.exe версии не ниже 2.7):

ChromeOptions options = new ChromeOptions();
options.setExperimentalOptions("excludeSwitches",
        Arrays.asList("ignore-certificate-errors"));
driver = new ChromeDriver(options);

Использование ExperimentalOptions является временным решением, потому как в скором времени должна выйти полноценная поддержка excludeSwitches в ChromeOptions.

Internet Explorer

В случае с Internet Explorer вариант с установкой DesiredCapabilities ACCEPT_SSL_CERTS для тестирования не работает. Для IE нельзя временно поменять расширенные параметры, они задаются навсегда. Изменять их приходится вручную еще до начала тестирования. Но я настоятельно рекомендую не понижать настройки безопасности в IE. После смены настроек, факт их изменения обычно забывается и в результате остается машина с неверно сконфигурированным SSL/TSL в IE.

Для того, чтобы продолжить тестирование в IE после вывода такого предупреждения, нам нужно просто кликнуть по ссылке Continue to this website (not recommended), ее id = «overridelink». Но проблема в том, что после появления этого окна работа InternetExplorerDriver частично заблокирована и мы не можем выполнить обычный click() на элементе. Поэтому для нажатия на ссылку можно использовать javascript:

driver.get("javascript:document.getElementById('overridelink').click();");