Как обрабатывать окно входа в систему с помощью Selenium WebDriver?

Как обрабатывать всплывающее окно входа в систему с помощью Selenium Webdriver? Здесь я прикрепил образец экрана. Как я могу ввести/ввести имя пользователя и пароль в это окно входа/предупреждения входа?

Спасибо и с уважением,  enter image description here

Ответ 1

Используйте подход, по которому вы отправляете имя пользователя и пароль в URL-запросе:

http://username:[email protected]

Так просто, чтобы сделать это более ясным. Имя пользователя username password password, а остальное - обычный URL вашего тестового веб-сайта.

Работает для меня без каких-либо ухищрений.

Пример кода 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...
}

Ответ 2

Это должно работать с серверами Windows 2012 и IE.

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

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

alert.Accept();

Ответ 3

Решение: аутентификация активного каталога Windows с использованием Thread и Robot

Я использовал Java Thread и Robot с Selenium webdriver для автоматизации процесса проверки подлинности Active Directory на нашем сайте. Эта логика отлично работала в Firefox и Chrome, но в IE она не работала. По какой-то причине IE убивает webdriver, когда открывается окно проверки подлинности, в то время как Chrome и Firefox препятствуют тому, чтобы веб-драйвер был убит. Я не пробовал в другом веб-браузере, таком как 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);
        }                        
    }      
}

Ответ 4

Это очень просто в WebDriver 3.0 (на данный момент он находится в бета-версии).

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

Надеюсь, это поможет.

Ответ 5

Следующий код Java Selenium-Webdriver должен хорошо работать для обработки окна предупреждения/всплывающего окна:

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

Ответ 6

Я использовал IE, затем создаю код, подобный этому, и после модификации работает несколько кода:

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

Ответ 7

Лучше вы предпочитаете инструмент Autoit для обработки всех ваших действий в Windows. Вы можете сделать script с помощью инструмента AutoIt для обработки вашей оконной задачи. Затем позже этот exe можно запустить с помощью Selenium.

Ответ 8

Я получал предупреждения о безопасности Windows всякий раз, когда открывалось мое приложение. для решения этой проблемы я использовал следующую процедуру

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

это решило мою проблему входа в приложение. Надеюсь, это может помочь всем, кто ищет аутентификацию безопасности Windows.

Ответ 9

Просто переключитесь на предупреждение и используйте authenticateUsing, чтобы установить имя пользователя и пароль, а затем вернуться в родительское окно

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

Ответ 10

1 способ справиться с этим, вы можете предоставить данные для входа с URL-адресом. например, если ваш URL-адрес " http://localhost: 4040 " и он спрашивает "Username" и "Password" в сообщении предупреждения, вы можете передать baseurl как " http://имя пользователя: пароль @localhost: 4040 ". Надеюсь, что это работает

Ответ 11

Это решение для селена, основанного на Python, после прохождения исходного кода (здесь). Я нашел эти 3 шага полезными.

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

Здесь \ue004 - значение для TAB, которое вы можете найти в классе Keys в исходном коде.

Я предполагаю, что такой же подход можно использовать и в JAVA, но не уверен.

Ответ 12

В С# Selenium Web Driver мне удалось заставить его работать со следующим кодом:

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

Хотя это выглядит похоже, следующее не работает с Firefox (Keys.Tab сбрасывает всю форму, и пароль будет записан в поле пользователя):

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

Кроме того, я попробовал следующее решение, которое привело к исключению:

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

System.NotImplementedException: 'POST/session/38146c7c-cd1a-42d8-9aa7-1ac6837e64f6/alert/credentials не соответствует известной команде'

Ответ 13

Самый простой способ обработки всплывающей аутентификации - это ввести учетные данные в самом URL-адресе. Например, у меня есть учетные данные, такие как Username: admin и Password: admin:

WebDriver driver = new ChromeDriver();
driver.get("https://admin:[email protected] website url");

Ответ 14

Даже через 3 года лучшим решением будет решение, предоставленное @Shadi и @Polymorphic. Передача учетных данных в URL никогда не должна выполняться из соображений безопасности. Невозможно поднять ответ....

Еще одно небольшое добавление будет очищать буфер обмена, как только пароль будет передан, очевидно, из соображений безопасности :)

Спасибо, парни...

  • Кишоре Периассамы

Ответ 15

Вы можете использовать этот Autoit script для обработки всплывающего окна входа:

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