testing selenium basic-authentication functional-testing

testing - ¿Autenticación HTTP básica a través de URL en Firefox no funciona?



selenium basic-authentication (8)

Sé que normalmente puede iniciar sesión en sitios que requieren autenticación básica HTTP con Selenium pasando el nombre de usuario y la contraseña en la URL, por ejemplo:

selenium.open("http://myusername:[email protected]/mypath");

¿He estado ejecutando una prueba de Selenium con Firefox 2 o 3 y todavía tengo la ventana de diálogo "Se requiere autenticación"?

Actualización: parece que no se trata de un problema de Selenium, sino de Firefox. Si ingreso la URL manualmente dentro de FF obtendré el diálogo de autenticación, pero si ingreso la URL en Opera, mi página se mostrará sin mostrar un diálogo de autenticación.


Agrega una barra después de la raíz de contexto:

En lugar de: selenium.open("http://myusername:[email protected]/mypath");

use: selenium.open("http://myusername:[email protected]/mypath/");

Hace toda la diferencia del mundo al agregar la barra al final de la raíz de contexto. Sin la barra inclinada, se abre la ventana emergente, con la barra diagonal se autentica como se espera.

Tenga en cuenta que esto no es un error de selenio o lo que sea, sino una cosa de Firefox. Puedes usar tu línea de comando también para ver por ti mismo:

C:/Program Files/Mozilla Firefox>firefox http://myusername:[email protected]/mypath/

Para mí, funciona incluso sin configuración de las redes uris:

FirefoxProfile profile = new FirefoxProfile(); //profile.setPreference("network.automatic-ntlm-auth.trusted-uris", "mydomain.com"); //profile.setPreference("network.negotiate-auth.trusteduris", "mydomain.com"); WebDriver driver = new FirefoxDriver(profile); driver.navigate().to("http://myusername:[email protected]/mypath/");


versiones
Firefox 19.0,
selenio-java 2.31.0


Como se mencionó, la solución addCustomRequestHeader solo puede funcionar con el modo de inyección proxy. Pero cuando intenté implementarlo, me metí en otros problemas relacionados con el modo de inyección proxy.

No me queda claro si la inyección de proxy funciona incluso cuando se utiliza el cliente Java. Cada vez que llamaba open (), recibía un error extraño que decía: "this.onXhrStateChange.bind no es una función". La única solución que encontré implica que necesita agregar un parámetro adicional con el valor ''true'' al método open (), pero la API del cliente Java solo acepta un solo parámetro.

Así que tuve que conformarme con las soluciones de configuración del navegador explicadas anteriormente, con las que no me siento cómodo ya que dependen de la disposición del proveedor para respaldarlas.

Trasladar sus pruebas a Selenium 2 (todavía alfa a partir de ahora) podría ser una mejor perspectiva, pero en mi caso no será posible hasta que Selenium Grid admita Selenium 2.

Espero que pueda ayudar a nadie, Sebastien.


Contribuyendo a la respuesta de Druska, puede hacer la misma configuración utilizando la API de Selenium 2:

FirefoxProfile profile = new FirefoxProfile(); profile.setPreference("network.http.phishy-userpass-length", 255); profile.setPreference("network.automatic-ntlm-auth.trusted-uris","yourDomain"); new FirefoxDriver(profile);

Este enfoque es más sencillo y no tiene que pedir a cada desarrollador que cambie su configuración de Firefox. Solo lo he probado con el driver de Firefox.

ACTUALIZACIÓN :

Por alguna razón (tal vez las explicadas en https://.com/a/14348701/256245 ), la solución anterior no funciona con las versiones más recientes de Firefox. Esto es lo que funciona para mí ahora (probado con Firefox 19.0.2):

  1. Instalar el complemento AutoAuth Firefox;
  2. Visite el sitio donde se necesita la autenticación. Ingrese su nombre de usuario y contraseña y asegúrese de elegir guardar las credenciales;
  3. Guarde el archivo de instalación de AutoAuth en su disco duro: en la página del complemento, haga clic con el botón derecho en "Agregar a Firefox" y "Guardar enlace como";
  4. Instalar Firefox webdriver de la siguiente manera:

    FirefoxProfile firefoxProfile = new ProfilesIni().getProfile("default"); File pluginAutoAuth = new File("src/test/resources/autoauth-2.1-fx+fn.xpi"); firefoxProfile.addExtension(pluginAutoAuth); return new FirefoxDriver(firefoxProfile);

Asegúrese de crear una instancia del archivo pluginAutoAuth con la ruta correcta donde guardó la instalación del complemento. Si no se siente cómodo usando el perfil predeterminado, puede usar el Administrador de perfiles de Firefox y crear uno específico para sus pruebas.

Referencia a esta nueva solución: http://watirmelon.com/2012/06/27/automatic-firefox-authentication-when-using-selenium-webdriver-with-autoauth/


El procesamiento de ''nombre de usuario: contraseña'' (RFC1738) de Firefox 17 no está permitido de forma predeterminada en Firefox (funcionó anteriormente). Sin embargo, he encontrado que se puede volver a habilitar por:

FirefoxProfile profile = new FirefoxProfile(); profile.setPreference("network.negotiate-auth.trusteduris", hostname); driver = new FirefoxDriver(profile); driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); selenium = new WebDriverBackedSelenium(driver, "http:// + username + ":" + password + "@" + hostname + ":" + port + baseUrl);

Funciona en Selenium 2.28.0, Firefox 17; utilizado para el inicio de sesión DigestAuth.


Podrías intentar manipular los encabezados directamente así:

Primero cuando comiences, debes habilitar Selenium ti para manipular los encabezados:

selenium.start("addCustomRequestHeader=true");

Entonces tienes que usar una codificación básica y manipulación de encabezado como esta:

String authHeader = ""; try { BASE64Encoder coder = new BASE64Encoder(); authHeader = coder.encode("developers:Str492ight".getBytes()); } catch (Exception e) { e.printStackTrace(); } setUpSelenium(); startSelenium(); selenium.addCustomRequestHeader("Authorization", "Basic " + authHeader); selenium.open("/"); selenium.waitForPageToLoad("10000");

El espacio después de lo básico es necesario. Así es como se ve un encabezado de autenticación HTTP básico ...

Además, puede utilizar algunos Vigilantes Http para ver si la solicitud contiene su solicitud de autenticación.

O usa Wireshark, o mejor es Fiddler o Charles Proxy.

Espero que haya ayudado. Gergely


Si está utilizando el controlador FireFox ... Puede crear un perfil de FireFox y guardar el nombre de usuario / contraseña en el administrador de contraseñas y usar un complemento para iniciar sesión automáticamente. Recuerde que si crea un controlador Firefox o Chrome en Selenium, de forma predeterminada utiliza un perfil anónimo. Así que ninguna de tus extensiones / complementos / etc regulares será utilizada. Por lo tanto, es mejor crear un perfil que se pueda distribuir y guardar en el control de origen.

1) En Windows, en el menú ejecutar / iniciar, escriba "firefox.exe -p" para abrir el Administrador de perfiles y crear uno personalizado y guardarlo en una ubicación con el resto de su código.

2) No preguntar al inicio está marcado.

3) Descargue el complemento AutoAuth https://addons.mozilla.org/en-US/firefox/addon/autoauth/

4) Visite el sitio que requiere autenticación básica HTTP y guarde las credenciales

La próxima vez que visite el sitio, AutoAuth iniciará sesión sin que aparezca el mensaje de autenticación requerida.

Si tiene NTLM, puede modificar la configuración para incluir los nombres de host: network.automatic-ntlm-auth.trusted-uris


Tengo una solución para Firefox e Internet Explorer.

Para Firefox, debe ingresar en about: config y crear el entero network.http.phishy-userpass-length con una longitud de 255. Esto le indica a Firefox que no abra un cuadro de autenticación si el nombre de usuario y la contraseña tienen menos de 255 caracteres. Ahora puede usar http: // usuario: [email protected] para autenticarse.

Para Internet Explorer, debe editar el registro. En la clave HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Internet Explorer / Main / FeatureControl / FEATURE_HTTP_USERNAME_PASSWORD_DISABLE , cree los valores DWORD iexplore.exe y explorer.exe y asegúrese de que sus valores sean 0 .

Tuve que anular la autenticación NTLM también. Para autenticar NTLM utilizando la sintaxis de autenticación básica HTTP en Firefox, simplemente especifique los dominios que se están utilizando en la cadena de configuración de Firefox network.automatic-ntlm-auth.trusted-uris (que acompaña a la primera opción de configuración). Esto funcionará en IE con la edición de registro solo.


Bueno, puede hacer que use el script Sikuli para manejar esta ventana emergente de autenticación de Firefox en Windows y en el entorno Linux.

  • Descargue y configure Sikuli en Windows / Linux (necesita instalar dependencias)
  • Use la siguiente secuencia de comandos de Sikuli para manejar la ventana emergente: donde Authentilcat1.png es la imagen emergente y manejará 100 ventanas emergentes

for i in range (100): while exists(Pattern("Authentlcatl.png").similar(0.99)): print("Found Authentication Popup") wait(2) type("admin" + Key.TAB) type("admin" + Key.ENTER)

  • Use el siguiente código para activar y terminar el script Sikuli desde el código Java:

Para activar el Sikuli Script :

String[] lincmd = { "bash", "-c", "sudo java -jar Sikuli-X/Sikuli-IDE/sikuli-script.jar Sikuli-X/Sikuli-IDE/new1.sikuli/" };

java.lang.Runtime.getRuntime (). exec (lincmd);

Para terminar el script de Sikuli :

String[] lincmd = { "bash", "-c", "sudo kill $(ps aux | grep ''[s]ikuli'' | awk ''{print $2}'')" };

java.lang.Runtime.getRuntime (). exec (lincmd);

  • Después de activar el script Sikuli desde el código Java, el script Sikuli se ejecutará como otro proceso por separado, por lo que finalmente, en el código Java, se termina el script Sikuli.

  • Así que cada vez que aparezca la ventana emergente en la pantalla, se manejará el script Sikuli.