2011-10-24 15 views
9

Recientemente comenzamos a probar nuestra aplicación basada en Django utilizando Selenium. Las pruebas funcionan bien en Linux, pero algunas fallan en Mac OS X. Estamos usando Firefox como el navegador en ambos casos, y nos llevó un tiempo (y algo de suerte) descubrir que la diferencia importante entre los dos casos es si FF se ejecuta como la aplicación en primer plano o como una ventana de fondo. Esto es lo que sucede en Linux:Cómo forzar a Firefox a ser la aplicación en primer plano cuando se prueba con Selenium en Mac OS X

  1. Selenium le dice a Firefox que vaya a la página de registro de un usuario.
  2. Selenium rellena el nombre de usuario y dirección de correo electrónico no válida.
  3. Selenium cambia el foco del campo de la dirección de correo electrónico a otro campo en la misma página (sucede que es el cuadro de búsqueda, pero eso no es importante --- todo lo que importa es el evento de cambio de foco).
  4. El código de validación de Javascript en la página web detecta que la dirección de correo electrónico no es válida e inserta un mensaje de error en la página.
  5. Selenium detecta ese mensaje de error y marca la prueba como aprobada.

Cuando se corre en Mac OS X, sin embargo, el paso # 4 no sucede a menos que primer plano manualmente la ventana de Firefox, mientras se ejecuta la prueba --- si lo dejamos en el fondo (que es donde aparece por defecto), el Javascript en el navegador no obtiene el evento de cambio de foco, por lo que el mensaje de error nunca se inserta en el DOM de la página, por lo que Selenium agota el tiempo de espera y la prueba falla.

¿Podemos forzar a Selenium a poner en primer plano el navegador cuando se ejecutan las pruebas, para que nuestro Javascript obtenga los eventos que nosotros queremos? ¿Si es así, cómo?

+1

¿Puede publicar el código exacto que está utilizando? – Amey

Respuesta

2

Selenium conduce el navegador a través de Javascript. No hay forma de controlar la ventana del navegador a través de JS. En general, probar los eventos 'onfocus' y 'onblur' en Selenium es muy difícil.

Puedes intentar activar este evento haciendo una evaluación JS utilizando los métodos 'runScript' o 'getEval' de Selenium después de ingresar la dirección de correo electrónico no válida. Esta no es una prueba de caja negra "pura", es decir, su prueba debe cambiarse si se cambia la implementación de la validación, pero esta es la forma más factible de llevar a cabo esta prueba.

+1

Sí, no hay forma de hacerlo desde JavaScript o Java. Ambos son demasiado areneros. Tendría que escribir una aplicación nativa en ObjectiveC o C++ que manipulara el foco y lo llamara desde la JVM cuando ejecute Selenium. Incluso eso puede no funcionar muy bien ya que los administradores de ventanas a menudo (correctamente) no te dejan confundir con el foco, ya que se supone que depende del usuario. Como Pavan dice, probablemente la única forma confiable de hacerlo es disparar el evento de enfoque manualmente. –

Cuestiones relacionadas