43

How to handle the login pop up window using Selenium Webdriver? I have attached the sample screen here. How can I enter/input Username and Password to this login pop up/alert window?

Thanks & Regards, enter image description here

Ajinkya
22.7k33 gold badges113 silver badges164 bronze badges
asked Jul 17, 2012 at 12:28
2

17 Answers 17

45

Use the approach where you send username and password in URL Request:

http://username:[email protected]

So just to make it more clear. The username is username password is password and the rest is usual URL of your test web

Works for me without needing any tweaks.

Sample Java code:

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...
}
Ahmed Ashour
5,64910 gold badges40 silver badges63 bronze badges
answered Jul 17, 2012 at 12:46
8
  • 2
    I think this solution is not worked out for me.Because after logging into the product with username and password my url looks like "localhost:4040/lgserver/admin/operations/overview/… this solution may not be work. Commented Jul 17, 2012 at 15:59
  • 1
    first try it out. the URL would be http://username:password@localhost:4040/lgserver/admin/operations/overview/ Commented Jul 17, 2012 at 17:25
  • 2
    But i want to handle the popups by passing username and password values and click Ok button.Can you please provide me the sample code to handle popup's using webdriver. Commented Jul 19, 2012 at 12:46
  • 1
    In this case you will have to use AutoIt or different software. But passing username and pwd to the app through URL is basically the same. Commented Jul 19, 2012 at 13:09
  • 1
    My Username has '\' character to in it. how do we handle this scenario? Commented Jul 1, 2021 at 8:49
8

This should works with windows server 2012 and IE.

var alert = driver.SwitchTo().Alert();
alert.SetAuthenticationCredentials("username", "password");
alert.Accept();
answered Jun 9, 2016 at 7:41
5

This is very simple in WebDriver 3.0(As of now it is in Beta).

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

Hopefully this helps.

answered Aug 10, 2016 at 9:38
4

Now in 2020 Selenium 4 supports authenticating using Basic and Digest auth . Its using the CDP and currently only supports chromium-derived browsers

Example :

Java Example :

 Webdriver driver = new ChromeDriver();
 
 ((HasAuthentication) driver).register(UsernameAndPassword.of("username", "pass"));
 driver.get("http://sitewithauth");
 
 

Note : In Alpha-7 there is bug where it send username for both user/password. Need to wait for next release of selenium version as fix is available in trunk https://github.com/SeleniumHQ/selenium/commit/4917444886ba16a033a81a2a9676c9267c472894

answered Dec 31, 2020 at 6:43
1
  • Beta-1 was released and this works great! Commented Mar 23, 2021 at 22:40
3

Solution: Windows active directory authentication using Thread and Robot

I used Java Thread and Robot with Selenium webdriver to automate windows active directory authentication process of our website. This logic worked fine in Firefox and Chrome but it didn't work in IE. For some reason IE kills the webdriver when authentication window pops up whereas Chrome and Firefox prevents the web driver from getting killed. I didn't try in other web browser such as 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);
 } 
 } 
}
Ahmed Ashour
5,64910 gold badges40 silver badges63 bronze badges
answered May 6, 2015 at 5:04
1
  • not very good solution , as it assumes that the active window is the browser itself Commented Jul 5, 2019 at 6:49
3

This is a solution for Python based selenium, after going through the source code (here). I found this 3 steps as useful.

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

Here \ue004 is the value for TAB which you can find in Keys class in the source code.

I guess the same approach can be used in JAVA as well but not sure.

answered Dec 3, 2018 at 10:51
3

The easiest way to handle the Authentication Pop up is to enter the Credentials in Url Itself. For Example, I have Credentials like Username: admin and Password: admin:

WebDriver driver = new ChromeDriver();
driver.get("https://admin:admin@your website url");
Tyl
5,27213 gold badges28 silver badges37 bronze badges
answered Mar 22, 2019 at 5:40
0
1

My usecase is:

  1. Navigate to webapp.
  2. Webapp detects I am not logged in, and redirects to an SSO site - different server!
  3. SSO site (maybe on Jenkins) detects I am not logged into AD, and shows a login popup.
  4. After you enter credentials, you are redirected back to webapp.

I am on later versions of Selenium 3, and the login popup is not detected with driver.switchTo().alert(); - results in NoAlertPresentException.

Just providing username:password in the URL is not propagated from step 1 to 2 above.

My workaround:

import org.apache.http.client.utils.URIBuilder;
driver.get(...webapp_location...);
wait.until(ExpectedConditions.urlContains(...sso_server...));
URIBuilder uri = null;
try {
 uri = new URIBuilder(driver.getCurrentUrl());
} catch (URISyntaxException ex) {
 ex.printStackTrace();
}
uri.setUserInfo(username, password);
driver.navigate().to(uri.toString());
answered Jan 22, 2021 at 21:02
0

You can use this Autoit script to handle the login popup:

WinWaitActive("Authentication Required","","10")
If WinExists("Authentication Required") Then
Send("username{TAB}")
Send("Password{Enter}")
EndIf'
answered Jan 30, 2013 at 11:56
0

I was getting windows security alert whenever my application was opening. to resolve this issue i used following procedure

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

this resolved my issue of logging into application. I hope this might help who are all looking for authenticating windows security alert.

answered Feb 8, 2017 at 20:52
1
0

Simply switch to alert and use authenticateUsing to set usename and password and then comeback to parent window

Alert Windowalert = driver.switchTo().alert() ;
Windowalert.authenticateUsing(new UserAndPassword(_user_name,_password));
driver.switchTo().defaultContent() ; 
answered Sep 27, 2017 at 9:31
2
  • 1
    Update: From selenium 3.8.0, Alert.authenticate is removed. github.com/SeleniumHQ/selenium/blob/… Commented Dec 7, 2017 at 15:49
  • 1
    not working with this type of windows , it is not a popup HTML (frame or modal) it is a desktop window like alert in JS Commented Jul 5, 2019 at 7:03
0

1 way to handle this you can provide login details with url. e.g. if your url is "http://localhost:4040" and it's asking "Username" and "Password" on alert prompt message then you can pass baseurl as "http://username:password@localhost:4040". Hope it works

answered Aug 2, 2018 at 9:28
0

In C# Selenium Web Driver I have managed to get it working with the following code:

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

Although it seems similar, the following did not work with Firefox (Keys.Tab resets all the form and the password will be written within the user field):

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

Also, I have tried the following solution which resulted in 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 not match a known command'

answered Jan 9, 2019 at 8:14
1
  • For me the driver blocs infefently on the line var alert = TestDriver.SwitchTo().Alert(); Did you have this issue? If yes, what is the solution? Commented Nov 12, 2019 at 22:32
0

Types of popups are defined in webdriver alerts: https://www.selenium.dev/documentation/webdriver/browser/alerts/

Here it is another type - authentication popup - eg generated by Weblogic and not seen by Selenium.

Being HTTPS the user/pass can't be put directly in the URL.

The solution is to create a browser extension: packed or unpacked.

Here is the code for unpacked and the packing procedure: https://qatestautomation.com/2019/11/11/handle-authentication-popup-in-chrome-with-selenium-webdriver-using-java/

In manifest.json instead of "https://ReplaceYourCompanyUrl" put "<all_urls>". Unpacked can be used directly in Selenium:

#python:
co=webdriver.ChromeOptions()
co.add_argument("load-extension=ExtensionFolder")

<all_urls> is a match pattern

The flow for requests is in https://developer.chrome.com/docs/extensions/reference/webRequest/

answered Feb 15, 2022 at 13:59
0

We can also update browser setting to consider logged in user - Internet Options-> Security -> Security Settings-> Select Automatic login with current user name and password.

screenshot

answered Dec 8, 2022 at 16:12
-1

The following Selenium-Webdriver Java code should work well to handle the alert/pop up up window:

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();
Ahmed Ashour
5,64910 gold badges40 silver badges63 bronze badges
answered Mar 27, 2013 at 7:03
1
  • Alert popup is not in the DOM, so it does not have "elements". Commented Jan 22, 2021 at 20:43
-1

I used IE, then create code like that and works after modification several code:

 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);
 }
}
answered Aug 24, 2016 at 4:43

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.