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?
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
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.
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.
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) {
//
}
}
}
avec Chrome 70 et autres versions:
http://username:[email protected]/yourpage
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}")
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());
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