Comment gérer la fenêtre pop up de connexion en utilisant Selenium WebDriver?
11 réponses
utilisez l'approche où vous envoyez le nom d'utilisateur et le mot de passe dans la demande D'URL:
http://username:password@the-site.com
donc juste pour être plus clair. Le nom d'utilisateur est username
mot de passe password
et le reste est d'habitude URL de votre test web
fonctionne pour moi sans avoir besoin de retouches.
exemple de code Java:
public static final String TEST_ENVIRONMENT = "the-site.com";
private WebDriver driver;
public void login(String uname, String pwd){
String URL = "http://" + uname + ":" + pwd + "@" + TEST_ENVIRONMENT;
driver.get(URL);
}
@Test
public void testLogin(){
driver = new FirefoxDriver();
login("Pavel", "UltraSecretPassword");
//Assert...
}
cela devrait fonctionner avec windows server 2012 et IE.
var alert = driver.SwitchTo().Alert();
alert.SetAuthenticationCredentials("username", "password");
alert.Accept();
Solution: l'authentification Windows active directory à l'aide de Fil et Robot
J'ai utilisé Java Thread et Robot avec Selenium webdriver pour automatiser le processus d'authentification Windows active directory de notre site web. Cette logique a bien fonctionné dans Firefox et Chrome, mais pas dans IE. Pour une raison quelconque, IE tue le webdriver lorsque la fenêtre d'authentification s'affiche alors que Chrome et Firefox empêchent le pilote web de se faire tuer. Je n'ai pas essayé dans un autre navigateur web comme Safari.
//...
//Note: this logic works in Chrome and Firefox. It did not work in IE and I did not try Safari.
//...
//import relevant packages here
public class TestDemo {
static WebDriver driver;
public static void main(String[] args) {
//setup web driver
System.setProperty("webdriver.chrome.driver", "path to your chromedriver.exe");
driver = new ChromeDriver();
//create new thread for interaction with windows authentication window
(new Thread(new LoginWindow())).start();
//open your url. this will prompt you for windows authentication
driver.get("your url");
//add test scripts below ...
driver.findElement(By.linkText("Home")).click();
//.....
//.....
}
//inner class for Login thread
public class LoginWindow implements Runnable {
@Override
public void run() {
try {
login();
} catch (Exception ex) {
System.out.println("Error in Login Thread: " + ex.getMessage());
}
}
public void login() throws Exception {
//wait - increase this wait period if required
Thread.sleep(5000);
//create robot for keyboard operations
Robot rb = new Robot();
//Enter user name by ctrl-v
StringSelection username = new StringSelection("username");
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(username, null);
rb.keyPress(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_CONTROL);
//tab to password entry field
rb.keyPress(KeyEvent.VK_TAB);
rb.keyRelease(KeyEvent.VK_TAB);
Thread.sleep(2000);
//Enter password by ctrl-v
StringSelection pwd = new StringSelection("password");
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(pwd, null);
rb.keyPress(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_CONTROL);
//press enter
rb.keyPress(KeyEvent.VK_ENTER);
rb.keyRelease(KeyEvent.VK_ENTER);
//wait
Thread.sleep(5000);
}
}
}
c'est très simple dans WebDriver 3.0(à partir de Maintenant il est en version bêta).
Alert alert = driver.switchTo().alert() ;
alert.authenticateUsing(new UserAndPassword(_user_name,_password));
driver.switchTo().defaultContent() ;
espérons que cela aide.
j'ai utilisé IE, puis créer du code comme ça et fonctionne après modification plusieurs codes:
public class TestIEBrowser {
public static void main(String[] args) throws Exception {
//Set path of IEDriverServer.exe.
// Note : IEDriverServer.exe should be In D: drive.
System.setProperty("webdriver.ie.driver", "path /IEDriverServer.exe");
// Initialize InternetExplorerDriver Instance.
WebDriver driver = new InternetExplorerDriver();
// Load sample calc test URL.
driver.get("http://... /");
//Code to handle Basic Browser Authentication in Selenium.
Alert aa = driver.switchTo().alert();
Robot a = new Robot();
aa.sendKeys("host"+"\"+"user");
a.keyPress(KeyEvent.VK_TAB);
a.keyRelease(KeyEvent.VK_TAB);
a.keyRelease(KeyEvent.VK_ADD);
setClipboardData("password");
a.keyPress(KeyEvent.VK_CONTROL);
a.keyPress(KeyEvent.VK_V);
a.keyRelease(KeyEvent.VK_V);
a.keyRelease(KeyEvent.VK_CONTROL);
//Thread.sleep(5000);
aa.accept();
}
private static void setClipboardData(String string) {
// TODO Auto-generated method stub
StringSelection stringSelection = new StringSelection(string); Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
}
}
le code Java Selenium-Webdriver suivant devrait bien fonctionner pour gérer la fenêtre alerte/pop up:
driver.switchTo().alert();
//Selenium-WebDriver Java Code for entering Username & Password as below:
driver.findElement(By.id("userID")).sendKeys("userName");
driver.findElement(By.id("password")).sendKeys("myPassword");
driver.switchTo().alert().accept();
driver.switchTo().defaultContent();
mieux vous préférez L'outil Autoit pour gérer toute l'activité de vos fenêtres. Vous pouvez faire un script en utilisant L'outil AutoIt pour gérer votre tâche de fenêtre, puis plus tard cet exe peut être exécuté en utilisant le sélénium.
je recevais une alerte de sécurité windows à chaque fois que mon application s'ouvrait. pour résoudre ce problème j'ai utilisé la procédure suivante
import org.openqa.selenium.security.UserAndPassword;
UserAndPassword UP = new UserAndPassword("userName","Password");
driver.switchTo().alert().authenticateUsing(UP);
ceci a résolu mon problème de connexion à l'application. J'espère que cela pourrait aider qui sont tous à la recherche d'authentification windows alerte de sécurité.
passez simplement à alert et utilisez authenticateUsing
pour définir le nom d'utilisateur et le mot de passe et ensuite revenir à la fenêtre parent
Alert Windowalert = driver.switchTo().alert() ;
Windowalert.authenticateUsing(new UserAndPassword(_user_name,_password));
driver.switchTo().defaultContent() ;
1 façon de gérer cela, vous pouvez fournir des détails de connexion avec url. par exemple, si votre url est "http://localhost:4040" et il pose la question "nom d'utilisateur" et "Mot de passe" sur l'alerte de message d'invite alors vous pouvez passer baseurl "http://username:password@localhost:4040". Espérons que cela fonctionne
Vous pouvez utiliser ce script Autoit pour gérer le popup de connexion:
WinWaitActive("Authentication Required","","10")
If WinExists("Authentication Required") Then
Send("username{TAB}")
Send("Password{Enter}")
EndIf'