WebDriver и SSL Untrusted certificate

Напишите, пожалуйста, решение проблемы!

Я сделала так: сначала переключилась на диалоговое окно с помощью команды Alert:

 

            IAlert alert = driver.SwitchTo().Alert();
Переключаться пришлось 2 раза, т.к. сначала всплывает окошко типа "Подождите", а потом уже со списком сертификатов.
 
А потом в этом окне с помощью методов из System.Windows.Forms стрелками вниз выбирала нужный сертификат. 
            SendKeys.SendWait("{DOWN}");
            SendKeys.SendWait("{ENTER}");
Способ не универсальный, т.к. в общем случае не известно, каким по счету будет нужный сертификат, но мне пока подходит.

Если кто придумает более общий способ - пишите :)

	DesiredCapabilities capabilities = DesiredCapabilities.chrome();

	capabilities.setCapability("chrome.switches", Arrays.asList("--ignore-certificate-errors"));

	driver = new ChromeDriver(capabilities);

после этих команд всё равно запрашивает подтверждение сертификата на хроме, язык ява

что нужно писать после этого метода?

 Alert alert = driver.switchTo().alert(); 

так как > SendKeys.SendWait("{ENTER}"); SendWait is undefined for the type SendKeys

Правильное решение, на которое никто так и не ответил - передача флага --test-types в DesiredCapabilities

А почему просто не добавить сертификат в доверенные рут на тестовой машине? Он ведь selfsigned вашим сервером и доверие к нему есть

--test-types флаг добавлен в 35 версии хрома, которая вышла в апреле 2014. А теперь обратите внимание на дату поста. К тому же, автор спрашивал и за IE, а не только хром.

Возник такой вопрос. А что если драйвер кликает на элемент на странице(для которой уже разобрались как принимать ненадежные сертификаты), но клик на этот элемент инициирует(внутри с помощью js) вызов метода какого-то апи. Этот метод - это пост метод, у которого (пусть) request url https://a.test.ru/method. При попытке в браузере перейти по этому адресу возникает такая же ошибка по поводу ненадежного сертификата. Вопрос вот в чем: могу я быть уверен, что выставление флажков в профиле вебдрайвера на принятие ненадежных сертификатов гарантирует мне принятие сертификатов и при неявном обращении к ресурсам, у которых ненадежные сертификаты? спасибо!

Ответьте пожалуйста подробнее. как передать этот флаг?

Решить вопрос сертификата , в случае WIN OS можно через реестр.
Пример для хрома

Windows Registry Editor Version 5.00
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\AutoSelectCertificateForUrls]
"1"="{\"pattern\":\"YoursiteURL\",\"filter\":{}}"
"2"="{\"pattern\":\"YoursiteURL/*\",\"filter\":{}}"
1 лайк

Слушайте, пора уже прекращать эти разговоры про ненадёжные сертификаты.
Регистрируйте это как баг, пусть админы настроят надёжный сертификат.
В наше время это делается легко и бесплатно. Например, утилита “letsencrypt” позволяет легко это делать.

1 лайк

Это вы просто в корпорациях не работали. некоторые вещи - непреодолимая боль которую нужно принять.

1 лайк

Очень даже работал.
И прекрасно понимаю, что ещё пару лет назад добиться от админов нормальных сертификатов было бы нереально.

Но сегодня - другое дело.
Я ж поэтому и дал ссылку: сегодня эта проблема легко решается.

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

В глобальных компаниях, со штатом в десятки тысяч человек, решение подобного вопроса на уровне админа находится на грани невозможного. Они слишком большие и слишком стандартизированные, чтобы допускать какую-либо кастомизацию.
Передо мной как раз в данный момент стоит подобный вопрос. Админ прав нет и не будет. Ссылка на letsencrypt залочена. Руководство советует использовать IE.

Хочу проверить способ с Alert, приведенный выше, но что-то упускаю с нюансами реализации в Selenide.

  WebDriverRunner.getWebDriver().manage().timeouts().pageLoadTimeout(2L, TimeUnit.SECONDS);
        try {
            WebDriverRunner.getWebDriver().get(applicationConfig.getBaseUrl());
        } catch (Exception e) {
            Alert alert = Selenide.switchTo().alert();
            alert.sendKeys(Keys.TAB);
            alert.sendKeys(Keys.TAB);
            alert.sendKeys(Keys.ENTER);
        }

Судя по всему pageLoadTimeout неверно проставляю. ошибка не выбрасывается. драйвер продолжает ждать document.ready

Единственное что можно сделать это попросить юзать разрабов самоподписный сертификат…а потом его в трастед добавлять )

для FF мне помогло следующее
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability(“acceptInsecureCerts”, true);
driver = new FirefoxDriver(capabilities);

2 лайка

Наконец-то есть решение проблемы. Все остальные способы не помогали, а этот работает. Спасибо.

Здравствуйте, помогите решить проблему с запросом сертификата на сайте.
Тесты падают . Пытался решить проблему решениями топиками выше не получилось .
Использую Selenide , Chrome, macos Sequoia.
Пытался применить также способ , чтоб хром автоматом применял серт- тоже фэйл :
#!/bin/bash

Configure Chromium browser to automatically select the certificate.

defaults write org.chromium.Chromium AutoSelectCertificateForUrls -array
defaults write org.chromium.Chromium AutoSelectCertificateForUrls -array-add -string ‘{“pattern”:“*”, “filter”: {“SUBJECT”: {“CN”: “Серт 1”}}}’