Manejo de la autenticación del navegador usando selenium

¿Alguien sabe cómo manejar la autenticación del navegador usando Selenium o cualquier otra herramienta durante la automatización?

EDITAR en 2015:

Esta respuesta está desactualizada. ¡WebDriver hoy en día admite la autenticación! Consulte Cómo gestionar la ventana emergente de autenticación con Selenium WebDriver utilizando Java


Respuesta original:

Esto no lo maneja muy bien el Selenio.


Puede intentar usar http://username:password@example.com/yourpage

en lugar de solo http://example.com/yourpage

Sin embargo, hasta donde yo sé, Firefox seguirá apareciendo un diálogo del navegador solicitando una confirmación.


Puedes probar Robot si estás usando Java (o cualquier herramienta similar como AutoIt ).


Puede usar driver.manage().addCookie() si está usando WebDriver.


O un FirefoxProfile personalizado que ya ha pasado la autenticación una vez.

Pasé días en esto, literalmente. Intentando pasar la autenticación del nivel del navegador pasado dentro de la red de mi compañía para golpear una aplicación. La solución fue usar el componente ‘unsername: password @’ dentro de la URL, PERO para agregar una barra inclinada al final de la URL de inicio de sesión .

Así que la URL de inicio de sesión total se ve así (tenga en cuenta el ‘/’ después de su página ):

http: // username: password@example.com/yourpage/

Funciona con Watir, Capibara y Selenium Webdriver.

Todo lo que he leído en la Web no me ayudó. Entonces, antes de hacer una solicitud, haga lo siguiente:

 driver.get(url); 

tienes que ejecutar un nuevo hilo como este:

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

En este caso, puede ingresar el nombre de usuario y la contraseña en otro hilo de la siguiente clase

 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) { // } } } 

Puede usar la clase Java Robot con Selenium 2 / Selenium WebDriver usando 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(); } } 

Usando Selenio con Robot
http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/Robot.html

Todos los hacks via auto-it, sikuli, etc. simplemente desperdiciando tu tiempo cuando lo ejecutas en tu solución de CI, usando varios tipos de navegadores / OS / Version / Resolutions, etc.

La forma de hacerlo correctamente es identificar el método real de autenticación y realizar un inicio de sesión usando el protocolo Rest, por ejemplo.

Lo usé para obtener la cookie JSESIONID e insertarla en el controlador de selenium. insinútelo: vaya a una url que no salga del domian primero, luego configure la cookie, luego vaya a la url requerida – ha iniciado sesión.

use: rest the client authentication para obtener el ID de JSESSION

y con esta información:

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

puede usar la secuencia de comandos automática de TI para manejar este problema

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