web-dev-qa-db-fra.com

Comment gérer la fenêtre de connexion ouverte avec Selenium WebDriver?

Comment gérer la fenêtre de connexion en utilisant Selenium Webdriver? J'ai joint l'exemple d'écran ici. Comment puis-je entrer/entrer le nom d'utilisateur et le mot de passe pour cette fenêtre de connexion/alerte de connexion

Merci et salutations, enter image description here

31
shiva oleti

Utilisez l'approche par laquelle vous envoyez un nom d'utilisateur et un mot de passe dans la requête d'URL:

http://username:[email protected]

Donc, juste pour le rendre plus clair. Le nom d'utilisateur est username, le mot de passe est password et le reste est l'URL habituelle de votre site Web test.

Fonctionne pour moi sans avoir besoin d'ajustements.

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...
}
35
Pavel Janicek

Cela devrait fonctionner avec Windows Server 2012 et IE.

var alert = driver.SwitchTo().Alert();

alert.SetAuthenticationCredentials("username", "password");

alert.Accept();
8
Wahab Majboor

Solution: authentification Windows Active Directory avec Thread and Robot

J'ai utilisé Java Thread and Robot avec le WebDriver Selenium 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 pilote Web 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 d'autres navigateurs Web tels que 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 (pour l’instant, c’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.

2

J'ai utilisé IE, puis créer un code comme ça et travaille après modification de 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);
        }
}
1
Shadi

Le code Java suivant Selenium-Webdriver devrait fonctionner correctement pour gérer la fenêtre d'alerte/contextuelle:

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();
0
Ripon Al Wasim

Passez simplement à alert et utilisez authenticateUsing pour définir le nom d'utilisateur et le mot de passe, puis revenez à la fenêtre parent

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

Le moyen le plus simple de gérer la fenêtre contextuelle d’authentification consiste à entrer les informations d’identification dans l’URL elle-même. Par exemple, j'ai des informations d'identification comme Username: admin et Password: admin:

WebDriver driver = new ChromeDriver();
driver.get("https://admin:admin@your website url");
0
Raj

Une façon de gérer cela, vous pouvez fournir les détails de connexion avec l'URL. par exemple. si votre url est " http: // localhost: 4040 " et que vous demandez "Nom d'utilisateur" et "Mot de passe" sur le message d'alerte, vous pouvez transmettre baseurl comme " http: // nom d'utilisateur: mot de passe @ localhost: 4040 ". J'espère que ça marche

0
vikram k

Je recevais une alerte de sécurité Windows chaque fois que mon application était ouverte. 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);

cela a résolu mon problème de connexion à l'application. J'espère que cela pourra aider ceux qui recherchent tous l'authentification de l'alerte de sécurité Windows.

0
Srinu Seela

Mieux vaut préférer l'outil Autoit pour gérer toute l'activité de Windows. Vous pouvez créer un script en utilisant l'outil AutoIt pour gérer votre tâche de fenêtre. Ensuite, vous pourrez exécuter ce fichier exe à l'aide de Selenium. 

0
Arpan Saini

Dans C # Selenium Web Driver, j'ai réussi à le faire fonctionner avec le code suivant:

var alert = TestDriver.SwitchTo().Alert();
alert.SendKeys(CurrentTestingConfiguration.Configuration.BasicAuthUser + Keys.Tab + CurrentTestingConfiguration.Configuration.BasicAuthPassword);
alert.Accept();

Bien que cela semble similaire, les éléments suivants ne fonctionnaient pas avec Firefox (Keys.Tab réinitialise tout le formulaire et le mot de passe sera écrit dans le champ utilisateur):

alert.SendKeys(CurrentTestingConfiguration.Configuration.BasicAuthUser);
alert.SendKeys(Keys.Tab);
alert.SendKeys(CurrentTestingConfiguration.Configuration.BasicAuthPassword);

En outre, j'ai essayé la solution suivante qui a abouti à une exception:

var alert = TestDriver.SwitchTo().Alert();
alert.SetAuthenticationCredentials(
   CurrentTestingConfiguration.Configuration.BasicAuthUser,
   CurrentTestingConfiguration.Configuration.BasicAuthPassword);

System.NotImplementedException: 'POST /session/38146c7c-cd1a-42d8-9aa7-1ac6837e64f6/alert/credentials did ne correspond pas à une commande connue '

0
Alexei

Ceci est une solution pour Selenium basé sur Python, après avoir parcouru le code source ( ici ) .

obj = driver.switch_to.alert
obj.send_keys(keysToSend="username\ue004password")
obj.accept()

Ici,\u004 est la valeur de la tabulation que vous pouvez trouver dans la classe Keys du code source.

J'imagine que la même approche peut également être utilisée en Java, mais pas avec certitude.

0
Devendra Bhat