Использование личных 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.