wake-up-neo.com

Umgang mit der Browser-Authentifizierung mit Selen

Kennt jemand die Handhabung der Browser-Authentifizierung mit Selenium oder einem anderen Tool während der Automatisierung? 

EDIT 2015:

Diese Antwort ist veraltet. WebDriver unterstützt heutzutage die Authentifizierung! Siehe So behandeln Sie das Authentifizierungs-Popup mit Selenium WebDriver mit Java


Ursprüngliche Antwort:

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.

16
Petr Janeček

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.

5
fra_jo

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) {
        //
    }
}
}
1
Roman

mit Chrome 70 und anderen Versionen:

http://username:[email protected]/yourpage
0
bastienG

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}")
0
Jack Wilson

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());
0
Yoav Levinger

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

0
Alex Punnen