В Selenium Chromedriver и сертификат SSL
Я использую Selenium для тестирования веб-сайта, который имеет http Auth и теперь даже SSL-сертификат.
в качестве обходного пути для базовой аутентификации HTTP я использую ChromeDriver -http://code.google.com/p/selenium/wiki/ChromeDriver и открытие URL в формате
https://username:password@my-test-site.com
но теперь из соображений безопасности сертификат клиента должен быть установлен на ПК, чтобы войти в это приложение.
однако ChromeDriver не может видеть "select сертификат " подскажите, и я даже не могу переключиться на него как Alert.
кто-нибудь решил эту проблему?
3 ответов
вместо установки сертификата клиента вы можете просто сказать Chrome игнорировать ошибку ненадежного сертификата, используя --ignore-certificate-errors
переключатель командной строки.
чтобы сделать это, создайте свой экземпляр ChromeDriver
следующим образом:
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability("chrome.switches", Arrays.asList("--ignore-certificate-errors"));
driver = new ChromeDriver(capabilities);
вы можете указать браузеру Chrome использовать определенный сертификат клиента для конкретного URL-адреса, добавив раздел реестра со следующим содержимым:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\AutoSelectCertificateForUrls = "{\"pattern\":\"https://www.example.com\",\"filter\":{\"ISSUER\":{\"CN\":\"cn of issuer\"}}}"
вы можете добавить дополнительные записи, добавив дополнительные ключи под той же веткой.
Это немного сложнее в Linux, так как вам нужно изменить настройки, которые находятся в формате json в следующем месте:
~/.config/chromium/Default/Preferences
похоже, что эта опция работает только для машин присоединились к домен Active Directory. В случае, если вышеуказанные шаги не работают, вы можете попробовать использовать предварительно настроенный шаблон для внесения изменений, доступных для загрузки по следующему url:https://www.chromium.org/administrators/policy-templates
Я решил эту проблему с помощью ниже код
DesiredCapabilities cap = DesiredCapabilities.chrome();
ImmutableMap<String, String> commandLineArguments = ImmutableMap.<String,
String>builder()
.put("web-security", "false")
.put("ssl-protocol", "any")
.put("ignore-ssl-errors", "true")
.put("webdriver-loglevel", "DEBUG")
.put("ssl-client-certificate-file", certificatePath)
.put("ssl-client-key-passphrase", certificatePassword)
.build();
String[] params = commandLineArguments.entrySet().stream()
.map(e -> String.format("--%s=%s", e.getKey(), e.getValue()))
.collect(Collectors.toList())
.toArray(new String[0]);
cap.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, params);
cap.setCapability(ChromeOptions.CAPABILITY, options);
WebDriver driver = new PhantomJSDriver(cap);
driver.get(Url);
но мне пришлось преобразовать мой сертификат pfx в pem, используя следующую команду
openssl pkcs12 -in client_ssl_cert.pfx -out client_ssl_cert.pem -clcerts