Mit Persönlichen SSL-Zertifikate mit Webdriver (Selenium 2.0)
Teste ich eine website, die erfordert persönliche SSL-Zertifikate in Ordnung, bestimmte Dinge zu tun, wie sign-in.
Ich habe einen Webdriver (Selenium 2.0) test, ich habe mit einem proxy:
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);
Und dies wird den Zugriff auf die homepage in Ordnung. Der test klickt dann auf die Schaltfläche "anmelden", kommt Sie in die richtigen Anmeldeinformationen ein und klickt auf submit. An diesem Punkt wird der browser geht dann in einen laden Stand, und ich gehe davon aus, dass es ist, weil das SSL-Zertifikat fehlt von meiner Seite und deshalb kann keine Verbindung zu den sign-in-service.
Suchte ich für verschiedene proxy-Lösungen, und fand diese:
profile.setAcceptUntrustedCertificates(true);
profile.setAssumeUntrustedCertificateIssuer(true);
So, ich habe es in meinem code, aber es scheint nicht das zu tun, was ich will. Ich denke, ich bin auf der Suche nach ein Weg, zu sagen, WebDriver, dass mein ssl-Zertifikat ist im x-Verzeichnis, bitte verwenden Sie es, wenn Sie auf diese Website zugreifen. Weiß jemand, wie dies zu tun?
Mein Test-code ist:
@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);
}
Dank,
Beccy
- Seltsam, als ich mit dem test, ich habe aufgehört, einen Teil des Weges durch und der Zugriff auf die Firefox -> Einstellungen -> Erweitert -> Verschlüsselung und die option zum anzeigen von Zertifikaten...der browser stürzte auf mich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Webdriver hat keinen eingebauten Mechanismus für das hinzufügen eine persönliche cert.
Wenn Sie firefox verwenden, die einzige Möglichkeit, die ich gefunden habe, um dies zu tun ist, erstellen Sie ein firefox-Profil und das Zertifikat hinzufügen, um es. Sie können dann entweder die Wiederverwendung der Profil, wenn Sie die tests auszuführen ODER, und dies ist meine bevorzugte option, nehmen Sie die cert8.db und key3.db-Dateien und fügen Sie Sie in das Profil, das webdriver erstellt zur Laufzeit.
Ich bin nicht sicher, wie Sie Sie yo, tun dies in java, sondern in ruby, die ich überschreiben der layout_on_disk Methode der FirefoxProfile zu fügen Sie die zusätzlichen Dateien, die ich benötigte. Java hat diegleichen Klasse , so dass Sie sollten in der Lage sein zu tun die gleiche Sache.
Keine Notwendigkeit zum überschreiben der Methode layout_on_disk() wie vorgeschlagen.
Sie können einfach laden Sie als Profil einen Ordner mit Dateien cert8.db und key3.db.
Selen Runden das Profil für Sie.
Dann können Sie die Einstellungen, die Sie brauchen, um das firefox-Profil.
Der resultierende code sieht wie folgt aus:
Getestet mit Selen 3.5.3.
Webdriver dies tun können, obwohl Derek Recht hat und es nicht gebaut.
Alles, was Sie tun müssen ist, stellen Sie eine benutzerdefinierte Trust-Manager, die trusts alle certs und dann auch überschreiben Sie die "hostname verifier", um einen nicht-Echtzeit-domain-Namen.
Es ist etwas von einem Beispiel, das ich über Google gefunden hier:
Dies ist die gleiche Methode, die Sie verwenden würden, mit Apache-HC-Komponenten überschreiben SSL-Einstellungen ohne Verwendung von WebDriver. Ich habe diese Methode verwendet eine Menge mit direkten HTTP-posts, Apache-HT-Bauteile und es "scheint", dass aus dem link oben , dieses Konzept sollte auch die Arbeit mit WebDriver.