Использование личных SSL-сертификатов с Webdriver (Selenium 2.0)

Я тестирую веб-сайт, который требует личных сертификатов SSL для того, чтобы делать определенные вещи, такие как вход.

у меня есть тест Webdriver (Selenium 2.0), который я установил с прокси:

    Proxy localhostProxy = new Proxy();
    localhostProxy.setProxyType(Proxy.ProxyType.MANUAL);
    localhostProxy.setHttpProxy("www-proxyname:port");

    FirefoxProfile profile = new FirefoxProfile();
    profile.setProxyPreferences(localhostProxy);
    driver = new FirefoxDriver(profile);

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

Я искал различные прокси-решения и нашел следующее:

    profile.setAcceptUntrustedCertificates(true);
    profile.setAssumeUntrustedCertificateIssuer(true);

поэтому я добавил его в свой код, но он, похоже, не делает то, что я хочу. Я думаю, что я ищу способ сказать WebDriver, что мой SSL-сертификат находится в каталоге x, пожалуйста, используйте его при доступе к этому сайту. Кто-нибудь знает, как это сделать?

мой тестовый код:

@Test
public void userSignsInAndVerifiesDrawerViews(){
            driver.get("www.url.com");
            waitFor(5000);
    driver.findElement(By.xpath("//a[contains(text(), 'Sign in')]")).click();
    waitFor(3000);
    String username = "seleniumtest";
    String password = "seleniumtest1";
    driver.findElement(By.id("username")).sendKeys(username);
    driver.findElement(By.id("password")).sendKeys(password);
    driver.findElement(By.xpath("//signin")).click();
    waitFor(30000);
    String signInLinkText = driver.findElement(By.xpath("//xpath")).getText();
    assertEquals(signInLinkText, username);
}

спасибо, Бекки!--4-->

3 ответов


Webdriver не имеет встроенного механизма для добавления личного сертификата.

Если вы используете firefox единственный способ, который я нашел, чтобы сделать это, чтобы создать профиль firefox и добавить сертификат к нему. Затем вы можете либо использовать профиль при запуске тестов или, и это мой предпочтительный вариант, взять cert8.дБ и ключ3.файлы БД и добавьте их в профиль, который webdriver создает во время выполнения.

Я не уверен, как это сделать на java, но в ruby я переопределяю layout_on_disk метод FirefoxProfile для добавления дополнительных файлов, которые мне нужны. Java имеет тот же класс так что вы должны быть в состоянии сделать то же самое.


нет необходимости перезаписывать метод layout_on_disk (), как было предложено.
Вы можете просто загрузить в профиль в папку, содержащую файлы cert8.дБ и ключ3.децибел.

Selenium завершит профиль для вас.

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

    FirefoxProfile firefoxProfile = new FirefoxProfile(
            new File("/folder/location"));
    FirefoxOptions options = new FirefoxOptions();

    options.setProfile(firefoxProfile);

    WebDriver driver = new RemoteWebDriver(
            new URL("http://localhost:4444/wd/hub"),
            options.toCapabilities());

испытано с селеном 3.5.3.


Webdriver может это сделать, хотя Дерек прав, и он не встроен.

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

есть несколько примеров, которые я нашел в Google здесь:

http://grepcode.com/file/repo1.maven.org/maven2/org.seleniumhq.selenium.server/selenium-server-coreless/1.0.3/org/openqa/selenium/server/TrustEverythingSSLTrustManager.java

Это тот же метод, который вы бы использовали с компоненты Apache HC для переопределения параметров SSL без использования WebDriver. Я использовал этот метод много с прямыми http-сообщениями с использованием компонентов Apache HT, и "кажется", что из приведенной выше ссылки эта концепция также должна работать с WebDriver.