javascript - div - ¿Cómo manejar la autenticación básica con transportador?
style html (5)
Estoy tratando de transportador para escribir algunas pruebas en una aplicación no angular. Tengo que iniciar sesión en una página a través de la autenticación básica en google chrome, pero no tengo idea de cómo.
Ya probé con baseUrl: ''https://username:password@url''
y capabilities: { ''browserName'': ''chrome'', ''chromeOptions'' : { args: [''--login-user=foo'', ''--login-password=bar''] } }
Pero ninguno si esto funcionó para mí. ¿Alguien sabe como hacerlo? Estoy teniendo un momento difícil en eso.
Es porque Firefox no confía en ningún sitio por defecto al enviar la información de autenticación de Windows. Incluso si lo cambia manualmente en las configuraciones, no afectará al transportador ya que abre Firefox con una configuración aislada cada vez que ejecuta las pruebas de extremo a extremo.
Necesitarás configurar programáticamente un perfil de Firefox y establecer sus preferencias de modo que confíe en el localhost (o en algún otro sitio web, dependiendo de dónde se carguen las páginas)
Primero, mira este ejemplo. Muestra cómo puede configurar el perfil y cómo puede establecer preferencias.
https://github.com/juliemr/protractor-demo/tree/master/howtos/setFirefoxProfile
Lo que hace es que modifica la página de inicio para cada nueva pestaña. De la misma manera (con el método firefoxProfile.setPreference) puede cambiar las preferencias responsables de confiar en los sitios web. Se llaman "network.automatic-ntlm-auth.trusted-uris" y "network.negotiate-auth.delegation-uris". Tendrás que configurar ambos para "localhost". (De nuevo, si están en otro lugar, es obviamente esa url)
Eso debería arreglarlo :)
De hecho, puede configurar la URL como http: // nombre de usuario: contraseñ[email protected] . ¡Chrome lo manejará!
La solución browser-proxy-proxy de Hankduan funcionó para mí en Chrome, pero las últimas revisiones de browsermob están usando algo llamado littleproxy que no admite encabezados de autenticación. Así que tuve que hacer browsermob-proxy -port 9090 --use-littleproxy false
, que hizo que las cosas funcionen.
Puede usar el Administrador de credenciales de Windows para evitar que esta ventana emergente se muestre constantemente en cada intento de iniciar sesión.
Agregue sus credenciales a la categoría ''Genérico'' allí, reinicie el navegador (incluidas las aplicaciones en segundo plano en ejecución).
Alguna explicación que tengo actualmente: esta ventana emergente no es específica del ''navegador'', es ''en el medio'', entre el navegador y la verificación de credenciales de dominio. Por lo tanto, las funciones del navegador (guardar contraseña, autocompletar) no funcionan por completo. Por la misma razón, Transportador / Selenio, etc. no tienen control completo sobre esa ventana emergente, es por diseño de la autenticación de dominio.
Como no está completamente seguro de si es la única razón por la que hay algunos otros consejos: - también es posible que deba agregar su sitio a la lista de sitios de confianza de IE (IE, no Chrome) (la información de Chrome recopila de allí); - marque "Inicio de sesión automático con nombre de usuario y contraseña actuales" en IE (no en Chrome): puede no funcionar si las credenciales que está utilizando para el sitio son diferentes de las que usa para iniciar sesión en la máquina.
La respuesta corta es que no hay una manera fácil de hacerlo en Chrome porque no son compatibles con la modificación de los encabezados de solicitud; consulte https://code.google.com/p/selenium/issues/detail?id=141 (el título dice respuesta encabezados, pero si lo lee, es para todos los encabezados).
Dicho esto, hay formas de hacerlo, aunque sea difícil.
1) Encuentre una extensión / complemento de Chrome que le permita modificar el encabezado. Una búsqueda simple muestra muchos de ellos: https://chrome.google.com/webstore/search/modify%20header . Deberá agregar el complemento a webdriver: consulte ¿Es posible agregar un complemento a chromedriver en una prueba de transportador? .
2) Puede usar browsermob-proxy ( https://github.com/lightbody/browsermob-proxy ); De esta manera, puede enrutar su tráfico a través del proxy, lo que agregaría los encabezados por usted. De los documentos:
POST /proxy/[port]/auth/basic/[domain] - Sets automatic basic authentication for the specified domain
Payload data should be json encoded username and password name/value pairs (ex: {"username": "myUsername", "password": "myPassword"}
Hay un proyecto de nodo que puede serle de ayuda, https://github.com/zzo/browsermob-node , pero aún deberá configurar su servidor proxy usted mismo.
Ambas formas para Chrome son complejas, pero te darán lo que quieres. (o puedes quedarte con Firefox y seguir la respuesta de Robert)