2010-06-11 45 views
18

Sé que normalmente se puede acceder a los sitios que requieren autenticación HTTP básico con selenio pasando el nombre de usuario y contraseña en la URL, por ejemplo:HTTP Basic Auth a través de URL en Firefox no funciona?

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

he estado corriendo una prueba de selenio con Firefox 2 o 3 y aún recibo la ventana de diálogo "Autenticación requerida"

Actualización: No parece ser un problema de Selenio, sino más bien un problema 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 muestra sin mostrar un cuadro de diálogo de autenticación.

Respuesta

1

Se podría tratar de manipular las cabeceras directamente como esto:

En primer lugar cuando se inicia, tiene que habilitar ti selenio manipular los encabezados:

selenium.start("addCustomRequestHeader=true"); 

entonces usted tiene que utilizar un poco de codificación básica y cabecera manipulación de esta manera:

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 Basic es necesario. Así es como se ve un encabezado básico de autenticación HTTP ..

Además, podría utilizar algunos Http Watchers 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.

+0

Hola Gergely, gracias por la pista. Lo he intentado, desafortunadamente, la ventana de autorización aún aparece. Traté de capturar los encabezados HTTP con Firebug y TamperData. Con ambos en mi solicitud inicial en la URL http: // myusername: [email protected]/mypath, no veo ninguna solicitud. Solo después de ingresar el nombre de usuario/contraseña en la ventana de autenticación, se envía la solicitud y el encabezado HTTP contiene el atributo de autenticación básica. – Peter

+0

Maldición ... Sólo puedo pensar en lo que queda es buscar en el registro del servidor en sí mismo si fue recibido o rechazado ... Lo siento, no tengo más ideas :( – Hannibal

+0

Peter , Solo puede agregar encabezados de solicitud si está utilizando el servidor Selenium como proxy. He escrito un artículo sobre esto: http://mogotest.com/blog/2010/06/23/how -to-realizar-basic-auth-en-selenio suerte que le ayuda a cabo – nirvdrum

10

Tengo una solución para Firefox e Internet Explorer.

Para Firefox, es necesario entrar en about: config y crear el número entero network.http.phishy-userpass de longitud con una longitud de 255. Esto le dice a Firefox no a una caja emergente de autenticación si el nombre de usuario y la contraseña tienen menos de 255 caracteres. Ahora puede usar http://user:[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, crear el valor DWORD valora iexplore.exe y explorer.exe y asegúrese de que sus valores son .

Tuve que anular también la autenticación NTLM. Para autenticar NTLM utilizando la sintaxis de autenticación básica de HTTP en Firefox, simplemente especifique los dominios que se usan 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 solo con la edición registy.

+0

también puede seguir esta:. http://aleetesting.blogspot.com/2011/10/selenium-webdriver-tips.html – MacGyver

+0

Cómo especifique más de un dominio en la cadena network.automatic-ntlm-auth.trusted-uris? (xxx; xxx;)? – iGallina

+0

Necesitas más votos favorables. – rebelliard

0

Como se mencionó, la solución addCustomRequestHeader solo puede funcionar con el modo de inyección de proxy. Pero cuando traté de implementarlo, tuve otros problemas relacionados con ese modo de inyección de proxy.

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

So Tuve que conformarme con las soluciones de configuración del navegador explicadas anteriormente con las que realmente no me siento cómodo, ya que dependen de la disposición del proveedor para admitirlas.

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

Espero que pueda ayudar a cualquiera, Sebastien

+0

addCustomRequestHeader no requiere el modo de inyección de proxy. Requiere que el navegador use el servidor Selenium como proxy. Esta es la diferencia entre "* iexploreproxy" y "* piexplore". Si decide crear su propio iniciador, incluso podría usar el iniciador HTA contra el proxy Selenium en IE, por ejemplo. Le recomiendo que evite la inyección de proxy. – nirvdrum

+0

Gracias nirvdrum. Podría darle otra prueba al addCustomRequestHeader entonces. En realidad, obtuve la idea de su blog, pero estaba tratando de implementarlo en Java. Siendo relativamente nuevo en Selenium, me confundí entre la inyección de proxy y el uso de selenium rc como proxy. –

5

Si está utilizando el controlador de 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 manera predeterminada usa un perfil anónimo. Por lo tanto, no se usarán ninguna de sus extensiones/complementos/etc. Por lo tanto, es mejor crear un perfil que se pueda distribuir y guardar en el control de fuente.

1) En Windows, desde el menú de 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 pregunte en el arranque se comprueba

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

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

La próxima vez Si visita el sitio, AutoAuth lo hará sin que se muestre el aviso de autenticación requerida.

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

11

Contribuir a Druska's respuesta, puede hacerlo utilizando la misma configuración selenio 2 API:

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 simple y que no tiene que pedir a todos los desarrolladores de cambiar su configuración de Firefox. Solo probé con el controlador de Firefox.

ACTUALIZACIÓN:

Por alguna razón (tal vez no se hayan explicado en https://stackoverflow.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 plugin de Firefox AutoAuth;
  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 secundario en "Agregar a Firefox" y "Guardar enlace como";
  4. Instantiate 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 en la que guardó la instalación del plugin. Si no se siente cómodo usando el perfil predeterminado, puede usar Firefox Profile Manager 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/

0

Firefox 17 'nombre de usuario: contraseña' (RFC1738) de procesamiento está desactivado por defecto en Firefox (que había trabajado antes). Sin embargo, he encontrado que se puede volver a activar 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); 

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

7

Añadir una barra después de la raíz de contexto:

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

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

Se hace toda la diferencia del mundo de añadir la barra al final del contexto raíz. Sin la barra, se abre la ventana emergente, con la barra oblicua se autentica como se esperaba.

Tenga en cuenta que esto no es una falla de selenio o lo que sea, sino algo de Firefox. Puede utilizar la línea de comandos, así que ver por sí mismo:

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

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

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

+2

Desearía poder darte más votos favorables por mencionar que se requiere una barra final ... increíble. Estaba golpeando mi cabeza contra una pared ... –

+1

Wow. estoy luchando desde el día. Esto solo solucionó mi problema con one /. Gracias – bhasker

+0

me ayuda, también. Increíble. Estoy usando cromedriver. –

0

Bueno, puedes hacer que uses la secuencia de comandos de Sikuli para manejar esta Autenticación de Firefox p Opup en Windows y en el entorno Linux.

  • descarga e instalación Sikuli en Windows/Linux (Necesidad de instalar dependencias)
  • utilizar el siguiente script para manejar Sikuli emergente: donde Authentilcat1.PNG es la imagen emergente y que se encargará de 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)

  • Utilice el siguiente código para activar y poner fin a la secuencia de comandos Sikuli de código Java:

para desencadenar la 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 la Sikuli Escritura:.

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

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

  • Tras activar la secuencia de comandos Sikuli de código Java, la escritura Sikuli se ejecutará como otro proceso separado, por lo que finalmente en el código Java que termina la secuencia de comandos Sikuli.

  • De modo que cada vez que aparezca la ventana emergente, la secuencia de comandos de Sikuli se encargará.

Cuestiones relacionadas