Использование личных SSL-сертификатов с Webdriver (Selenium 2.0) - PullRequest
6 голосов
/ 07 апреля 2011

Я тестирую веб-сайт, для которого требуются персональные 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);
}

Спасибо, Beccy

Ответы [ 3 ]

5 голосов
/ 12 апреля 2011

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

Если вы используете Firefox, единственный способ сделать это - создать профиль Firefox и добавить в него сертификат.Затем вы можете повторно использовать профиль при запуске тестов ИЛИ, и это мой предпочтительный вариант, взять файлы cert8.db и key3.db и добавить их в профиль, который веб-драйвер создает во время выполнения.

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

1 голос
/ 21 сентября 2017

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

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.

0 голосов
/ 04 апреля 2012

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...