Come gestire la finestra di pop-up di login usando Selenium WebDriver?

Come gestire la finestra di pop-up di accesso con Selenium Webdriver? Ho allegato la schermata di esempio qui. Come posso inserire / inserire Username e Password in questa finestra di pop-up di accesso / avviso?

Grazie e saluti, inserisci la descrizione dell'immagine qui

Utilizza l’approccio in cui invii nome utente e password nella richiesta URL:

http://username:[email protected] 

Quindi, solo per renderlo più chiaro. Il nome utente è username password è password e il resto è il solito URL del tuo test web

Funziona per me senza bisogno di modifiche.

Esempio di codice 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... } 

Questo dovrebbe funzionare con Windows Server 2012 e IE.

 var alert = driver.SwitchTo().Alert(); alert.SetAuthenticationCredentials("username", "password"); alert.Accept(); 

Soluzione: autenticazione Active Directory di Windows tramite Thread e Robot

Ho usato Java Thread e Robot con il web driver Selenium per automatizzare il processo di autenticazione della directory triggers di Windows del nostro sito web. Questa logica ha funzionato bene in Firefox e Chrome ma non ha funzionato in IE. Per qualche motivo, IE uccide il webdriver quando viene visualizzata la finestra di autenticazione, mentre Chrome e Firefox impediscono la rimozione del driver Web. Non ho provato in altri browser come 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); } } } 

Questo è molto semplice in WebDriver 3.0 (A partire da ora è in Beta).

 Alert alert = driver.switchTo().alert() ; alert.authenticateUsing(new UserAndPassword(_user_name,_password)); driver.switchTo().defaultContent() ; 

Speriamo che questo aiuti.

Ho usato IE, quindi ho creato un codice simile e ho lavorato dopo la modifica di diversi codici:

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

Il seguente codice Java Selenium-Webdriver dovrebbe funzionare bene per gestire la finestra di avviso / 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(); 

Meglio preferisci lo strumento Autoit per gestire tutte le attività di Windows. È ansible creare uno script utilizzando lo strumento AutoIt per gestire l’attività della finestra, quindi in seguito è ansible eseguire tale file utilizzando Selenium.

Stavo ricevendo un avviso di sicurezza di Windows ogni volta che la mia domanda si stava aprendo. per risolvere questo problema ho usato la seguente procedura

 import org.openqa.selenium.security.UserAndPassword; UserAndPassword UP = new UserAndPassword("userName","Password"); driver.switchTo().alert().authenticateUsing(UP); 

questo ha risolto il mio problema di accesso all’applicazione. Spero che questo possa aiutare chi sta cercando di autenticare l’avviso di sicurezza di Windows.

Basta passare ad avvisare e usare authenticateUsing per impostare usename e password e quindi tornare alla finestra genitore

 Alert Windowalert = driver.switchTo().alert() ; Windowalert.authenticateUsing(new UserAndPassword(_user_name,_password)); driver.switchTo().defaultContent() ; 

1 modo per gestire questo è ansible fornire i dettagli di accesso con l’url. ad esempio se l’url è ” http: // localhost: 4040 ” e richiede “Username” e “Password” sul messaggio di avviso, è ansible passare a baseur come ” http: // username: password @ localhost: 4040 “. Spero funzioni

Puoi utilizzare questo script Autoit per gestire il popup di accesso:

 WinWaitActive("Authentication Required","","10") If WinExists("Authentication Required") Then Send("username{TAB}") Send("Password{Enter}") EndIf'