Kennt jemand die Handhabung der Browser-Authentifizierung mit Selenium oder einem anderen Tool während der Automatisierung?
Diese Antwort ist veraltet. WebDriver unterstützt heutzutage die Authentifizierung! Siehe So behandeln Sie das Authentifizierungs-Popup mit Selenium WebDriver mit Java
Dies wird von Selen nicht gut gehandhabt.
Sie können versuchen, http://username:[email protected]/yourpage
zu verwenden.
statt nur http://example.com/yourpage
Soweit ich weiß, wird in Firefox immer noch ein Dialogfeld angezeigt, in dem Sie zur Bestätigung aufgefordert werden.
Sie können versuchen, Robot , wenn Sie Java verwenden (oder ein ähnliches Tool wie AutoIt ).
Sie können driver.manage().addCookie()
verwenden, wenn Sie WebDriver verwenden.
Oder ein benutzerdefiniertes FirefoxProfile , das die Authentifizierung bereits einmal bestanden hat.
Ich habe Tage damit verbracht - buchstäblich. Es wurde versucht, die Authentifizierung auf Browserebene in meinem Unternehmensnetzwerk zu umgehen, um eine Anwendung zu erreichen. Die Lösung bestand darin, die Komponente 'unsername: password @' in der URL zu verwenden , ABER am Ende der Anmelde-URL einen Schrägstrich einzufügen.
Die gesamte Anmelde-URL sieht also so aus (beachten Sie das '/' nach yourpage):
http: // username: [email protected]/yourpage/
Funktioniert mit Watir, Capybara und Selenium Webdriver.
Alles, was ich im Web gelesen habe, hat mir nicht geholfen. Bevor Sie also eine Anfrage stellen, wie folgt:
driver.get(url);
sie müssen einen neuen Thread wie folgt ausführen:
RunScript runScript = new RunScript();
runScript.start();
In diesem Fall können Sie Login und Passwort in einen anderen Thread der folgenden Klasse eingeben
public class RunScript extends Thread {
@Override
public void run() {
try {
File file = new File("D:\\jacob-1.18-x86.dll");
System.setProperty(LibraryLoader.JACOB_DLL_PATH, file.getAbsolutePath());
AutoItX autoIt = new AutoItX();
Thread.sleep(2000);
autoIt.winActivate("yourWindowName", "");
autoIt.winWaitActive("yourWindowName");
if (autoIt.winExists("yourWindowName")) {
autoIt.send("username{TAB}", false);
autoIt.send("password{Enter}", false);
}
}
} catch (InterruptedException ex) {
//
}
}
}
mit Chrome 70 und anderen Versionen:
http://username:[email protected]/yourpage
sie können ein automatisches IT-Skript verwenden, um dieses Problem zu lösen
WinWaitActive("[CLASS:Chrome_WidgetWin_1]", "", time)
Send("user")
Send("{TAB}")
Send("pass")
Send("{ENTER}")
Alle Hacks über Auto-it, Sikuli usw. verschwenden nur Ihre Zeit, wenn Sie sie in Ihrer CI-Lösung ausführen, und verwenden Sie verschiedene Browsertypen/OS/Version/Resolutions usw.
Um dies richtig zu tun, müssen Sie die tatsächliche Authentifizierungsmethode identifizieren und eine Anmeldung mithilfe des Rest-Protokolls zum Beispiel durchführen.
Ich habe es verwendet, um den JSESIONID-Cookie zu erhalten und ihn in den Selenium-Treiber einzufügen Hinweis: Gehen Sie zuerst zu einer nicht vorhandenen URL des Domian, legen Sie dann den Cookie fest und gehen Sie dann zur erforderlichen URL - Sie werden protokolliert -im.
use: rest Client-Authentifizierung, um die JSESSION-ID abzurufen
und Mit dieser Information:
browser().navigate(foo.getUrl()+"non-exiting-url");
//the information got from the rest client login:
Cookie cookie = new Cookie(name, value, domain, path, expiry, isSecure, isHttpOnly);
try {
driver.manage().addCookie(cookie);
} catch (Exception e) {
System.out.println(e.toString());
}
browser().navigate(foo.getUrl());
Sie können die Java Robot-Klasse mit Selenium 2/Selenium WebDriver mit Firefox verwenden
WebDriver driver = new FirefoxDriver();
driver.get("http://localhost:9990");
WebElement myDynamicElement = driver.findElement(By.id("app"));
Alert alert = driver.switchTo().alert();
try {
Robot robot = new Robot();
alert.sendKeys("username");
robot.keyPress(KeyEvent.VK_TAB);//go to password feild
robot.keyPress(KeyEvent.VK_P);
robot.keyPress(KeyEvent.VK_A);
robot.keyPress(KeyEvent.VK_S);
robot.keyPress(KeyEvent.VK_S);
robot.keyPress(KeyEvent.VK_ENTER);
} catch (AWTException e) {
e.printStackTrace();
}
}
Selen mit Roboter verwenden
http://docs.Oracle.com/javase/1.5.0/docs/api/Java/awt/Robot.html