19

Does anyone know about handling Browser Authentication using Selenium or any other tool during automation?

2
  • possible duplicate of How to handle authentication popup with Selenium Webdriver
    – Louis
    CommentedMay 6, 2015 at 16:24
  • The relative dates of the questions is one factor but not the most important one. The relative quality of the two set of question and related answers is much more important. The accepted answer here starts with "this is outdated , go see that other answer". You can do a search on SO's Meta for "[duplicate-questions] newer" to read the various posts that cover this topic. See this question in particular.
    – Louis
    CommentedMay 7, 2015 at 10:20

7 Answers 7

22

EDIT in 2015:

This answer is outdated. WebDriver nowadays supports authentication! See How to handle authentication popup with Selenium WebDriver using Java


Original answer:

This is not handled very well by Selenium.


You can try using http://username:[email protected]/yourpage

instead of just http://example.com/yourpage

However, as far as I know, Firefox will still pop up a browser dialog requesting a confirmation.


You can try Robot if you're using Java (or any similar tool like AutoIt).


You could use driver.manage().addCookie() if you're using WebDriver.


Or a custom FirefoxProfile that has already passed the authentication once.

7
7

I spent days on this - literally. Trying to get past browser level authentication within my company network to hit an application. The solution was to use the 'unsername:password@' component within the URL, BUT to add a forward slash at the end of the login URL.

So total login URL looks like this (note the '/' after yourpage):

http://username:[email protected]/yourpage/

Works with Watir, Capybara and Selenium Webdriver.

    1

    Everything I have read on the Web didn't help me. So before making a request, like this:

    driver.get(url); 

    you have to run a new thread like this:

    RunScript runScript = new RunScript(); runScript.start(); 

    In this case you are free to input login and password on another thread of follwing class

    public class RunScript extends Thread { @Override public void run() { try { File file = new File("D:\\jacob-1.18-x86.dll"); System.setProperty(LibraryLoader.JACOB_DLL_PATH, file.getAbsolutePath()); AutoItX autoIt = new AutoItX(); Thread.sleep(2000); autoIt.winActivate("yourWindowName", ""); autoIt.winWaitActive("yourWindowName"); if (autoIt.winExists("yourWindowName")) { autoIt.send("username{TAB}", false); autoIt.send("password{Enter}", false); } } } catch (InterruptedException ex) { // } } } 
      1

      All the hacks via auto-it, sikuli, etc. just wasting your time when you'll run it in your CI solution, using several browser types / OS / Version / Resolutions etc.

      The way to do it correctly is to identify the authentication actual method and perform a login using Rest protocol for instance.

      I used it to get the JSESIONID cookie and insert it to the selenium driver. hint on that: go to a non-exiting url of the domian first, then set the cookie, then go to the required url - you are logged-in.

      use: rest client authentication to get the JSESSION ID

      and With this information:

      browser().navigate(foo.getUrl()+"non-exiting-url"); //the information got from the rest client login: Cookie cookie = new Cookie(name, value, domain, path, expiry, isSecure, isHttpOnly); try { driver.manage().addCookie(cookie); } catch (Exception e) { System.out.println(e.toString()); } browser().navigate(foo.getUrl()); 
      2
      • Can you describe what a 'non-exiting-url' is?CommentedSep 30, 2016 at 13:09
      • for ADFS login and redirect in Jenkins pipeline, this can work.CommentedJul 1, 2021 at 19:46
      0

      you can use auto IT script to handle this problem

      WinWaitActive("[CLASS:Chrome_WidgetWin_1]", "", time) Send("user") Send("{TAB}") Send("pass") Send("{ENTER}") 
        0

        with Chrome 70 and other versions :

        http://username:[email protected]/yourpage 
        1
        • agree, but as firefox context was explicit, thought worth rescoping too...CommentedFeb 5, 2019 at 12:47
        -1

        You can use Java Robot class with Selenium 2 /Selenium WebDriver using Firefox

        WebDriver driver = new FirefoxDriver(); driver.get("http://localhost:9990"); WebElement myDynamicElement = driver.findElement(By.id("app")); Alert alert = driver.switchTo().alert(); try { Robot robot = new Robot(); alert.sendKeys("username"); robot.keyPress(KeyEvent.VK_TAB);//go to password feild robot.keyPress(KeyEvent.VK_P); robot.keyPress(KeyEvent.VK_A); robot.keyPress(KeyEvent.VK_S); robot.keyPress(KeyEvent.VK_S); robot.keyPress(KeyEvent.VK_ENTER); } catch (AWTException e) { e.printStackTrace(); } } 

        Using Selenium with Robot
        http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/Robot.html

          Start asking to get answers

          Find the answer to your question by asking.

          Ask question

          Explore related questions

          See similar questions with these tags.