8

He notado que al ejecutar varias pruebas de selenio firefox en paralelo en una grilla, el manejo de eventos de enfoque no funciona correctamente. He confirmado que cuando cada una de mis pruebas se ejecuta individualmente y se le da el foco del sistema operativo, las pruebas pasan el 100% del tiempo. También corrí las pruebas en paralelo en la grilla con Chrome y no he visto el problema.Múltiples instancias de Firefox durante Selenium Webdriver Las pruebas no manejan el foco correctamente.

He encontrado el siguiente hilo en los grupos de google que sugiere que iniciar cada navegador en una instancia separada de xvfb puede ser una solución viable. https://groups.google.com/forum/?fromgroups#!topic/selenium-developers/1cAmsYCp2ho%5B1-25%5D

La parte de la prueba está fallando debido a un selector de fecha jquery que se utiliza en el proyecto. El selector de fecha se inicia en un evento de foco y dado que hay varias pruebas de selenio ejecutándose al mismo tiempo, la prueba de disco de web ejecuta el comando .click() pero el foco no permanece lo suficientemente largo como para que aparezca el widget de selector de fecha.

.focus (function() {$ input.trigger ("focus");});

Mi pregunta es si alguien ha visto esto antes y resuelto a través de algunos ajustes de perfil de Firefox. He intentado cargar la siguiente propiedad que no tuvo ningún efecto sobre el problema.

profile.setAlwaysLoadNoFocusLib(true); 

la prueba falla de la misma manera como lo hizo antes con esa propiedad habilitado y cargado en el controlador remoto Firefox perfil.

Necesito una forma de asegurar que el evento de enfoque se active el 100% del tiempo o para resolver el problema de múltiples navegadores de Firefox que compiten por el enfoque. Teniendo en cuenta que Chrome no muestra ninguno de estos problemas, me pregunto si también podría considerarse un error en Firefox.

Gracias!

+0

Parece que las páginas que encontré no tenían información importante. Hay algunas cosas manuales que debes hacer en tu instalación de Firefox en el servidor de Linux Grid para resolver el problema de enfoque. No estoy seguro de por qué no recibí una excepción al intentar usar setAlwaysLoadNoFocusLib (true) cuando Lib no estaba instalado. Los dos enlaces que estoy viendo actualmente son los siguientes. http://code.google.com/p/selenium/wiki/NativeEventsOnLinux http://code.google.com/p/selenium/wiki/FocusStealingOnLinux No suena como que hay una solución para Mac OSX. – jjhughes57

+0

¿Podría publicar su comentario como respuesta a su propia pregunta? De esta forma, la pregunta no aparece como no respondida en los resultados de búsqueda. – Potherca

+0

Sí, o simplemente elimine su pregunta, que puede hacer mientras no hay respuestas. – djangofan

Respuesta

-1

Puede disputar esto y obtenerlo bajo su control sin ningún problema. Primero escriba un método para identificar la ventana emergente por su ID de identificador de ventana. Luego, use JavaScriptExecutor para ejecutar "window.focus()" en javascript para forzar que la ventana se enfoque justo antes de realizar otra acción. Luego, puede cerrar la ventana emergente por su nombre de manejador de ventana si es necesario.

2

@djangofan: Wrong. No puedes bloquear el foco. Después de solicitar el enfoque en una ventana y antes de activar una acción, otra ventana solicita el enfoque, y su acción (como enviar claves al campo de entrada) simplemente no funciona. Esto sucedió en nuestras pruebas varias veces al día. Fue difícil de reproducir, porque con cada ejecución de prueba falló en diferentes lugares. Una solución es ejecutar cada navegador en una pantalla separada. P.ej. puede utilizar Xvfb:

Xvfb ... -screen 1 1200x800x24 -screen 2 1200x800x24 ... 

A continuación, cuando se inicia un navegador, asigne una pantalla separada a la misma:

browser.setEnvironmentProperty("DISPLAY", ":N.1"); 
    browser.setEnvironmentProperty("DISPLAY", ":N.2"); 
    ... 
+0

Para configurar la variable DISPLAY a instancia de Firefox en python simplemente agregue: 'firefox.add_command_line_options ('- display =:' + str (display.display))' –

+0

Gracias por el ejemplo de python. ¿Cómo funcionaría esto usando una Rejilla de Selenio? Me parece que esta configuración de visualización solo funciona si ejecuta la prueba en el mismo servidor donde se encuentra xvfb. Si ejecuta la prueba a través de una red/nodo/nodo de selenio remoto, crea el controlador a través del control remoto; no hay FirefoxBinary para usar allí para establecer la opción de línea de comando. –

0

que he tenido el mismo problema en mi entorno de integración continua con Jenkins. Después de una larga investigación encontré un old bug in firefox que me llevó a new config flag para evitar esos problemas.

La solución es habilitar esta marca en el perfil de Firefox que usan las pruebas.La bandera es focusmanager.testmode, establézcalo en verdadero.

enter image description here

La explicación es que los eventos de foco se activan sólo cuando la ventana de Firefox está activo. Si ejecuta una prueba múltiple, tiene varias ventanas, por lo que solo la activa desencadena los eventos de enfoque. Con este parámetro, los eventos son controlados incluso para ventanas no activas.

Cuestiones relacionadas