web-dev-qa-db-fra.com

Gestion de l'authentification du navigateur à l'aide de Selenium

Est-ce que quelqu'un sait comment gérer l'authentification du navigateur à l'aide de Selenium ou de tout autre outil lors de l'automatisation? 

EDIT en 2015:

Cette réponse est obsolète. WebDriver prend désormais en charge l'authentification! Voir Comment gérer l'authentification contextuelle avec Selenium WebDriver à l'aide de Java


Réponse originale:

Ce n'est pas très bien géré par Selenium.


Vous pouvez essayer d'utiliser http://username:[email protected]/yourpage

au lieu de http://example.com/yourpage

Cependant, pour autant que je sache, Firefox ouvrira quand même une boîte de dialogue de navigateur demandant une confirmation.


Vous pouvez essayer Robot si vous utilisez Java (ou un outil similaire comme AutoIt ).


Vous pouvez utiliser driver.manage().addCookie() si vous utilisez WebDriver.


Ou un fichier personnalisé FirefoxProfile qui a déjà réussi l'authentification une fois.

16
Petr Janeček

J'ai passé des jours sur ce sujet - littéralement… .. essayer de dépasser l'authentification au niveau du navigateur de mon réseau d'entreprise pour accéder à une application… .. La solution consistait à utiliser le composant 'unsername: password @' dans l'URL, BUT d'ajouter une barre oblique à la fin de l'URL de connexion.

Donc, l'URL de connexion totale ressemble à ceci (notez le '/' après votre page):

http: // nom d'utilisateur: [email protected]/votre page/

Fonctionne avec Watir, Capybara et Selenium Webdriver.

5
fra_jo

Tout ce que j'ai lu sur le Web ne m'a pas aidé. Alors avant de faire une demande, comme ceci:

driver.get(url);

vous devez lancer un nouveau fil comme celui-ci:

RunScript runScript = new RunScript();
runScript.start();

Dans ce cas, vous êtes libre de saisir votre identifiant et votre mot de passe sur un autre thread de la classe suivante.

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

avec Chrome 70 et autres versions:

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

vous pouvez utiliser un script informatique automatique pour gérer ce problème

WinWaitActive("[CLASS:Chrome_WidgetWin_1]", "", time)
Send("user")
Send("{TAB}")
Send("pass")
Send("{ENTER}")
0
Jack Wilson

Toutes les hacks via auto-it, sikuli, etc. vous font perdre votre temps lorsque vous l'exécuterez dans votre solution CI, en utilisant plusieurs types de navigateurs/OS/Version/Résolutions, etc.

Pour le faire correctement, vous devez identifier la méthode d’authentification réelle et vous connecter en utilisant le protocole Rest, par exemple.

Je l'ai utilisé pour obtenir le cookie JSESIONID et l'insérer dans le pilote Selenium . Astuce à ce sujet: accédez d'abord à une URL non existante du domaine, puis définissez le cookie, puis accédez à l'URL requise - vous êtes connecté. -dans.

utiliser: reste l'authentification du client pour obtenir l'ID de JSESSION 

et avec cette 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

Vous pouvez utiliser la classe Java Robot avec Selenium 2/Selenium WebDriver avec Firefox

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();
        }

    }

Utilisation de sélénium avec un robot
http://docs.Oracle.com/javase/1.5.0/docs/api/Java/awt/Robot.html

0
Alex Punnen