2010-08-12 15 views
11

He estado ejecutando mis pruebas de selenio usando selenium rc durante aproximadamente 6 meses y de repente el selenio de las ventanas de Firefox abierto no se cierra cuando finaliza la prueba.Las ventanas de Firefox no se cierran después de ejecutar la prueba de Selenium

Estoy usando un perfil de Firefox específico y no había actualizado mi jar de selenio rc. Pensé que tal vez la última versión de Firefox podría haber sido el problema, pero volví a Firefox 2 y las ventanas aún permanecen abiertas.

Estoy ejecutando la prueba en un caja de Windows.

Me he dado cuenta de que otras personas parecen estar teniendo este problema, solo preguntándose si alguien tiene una solución.

Gracias, Gearoid.

+0

Jus para aclarar, estás ejecutando la RC en una máquina Windows (por lo que el navegador se ejecuta en Windows) o está ejecutando la prueba en un cuadro de Windows (por lo que su código de cliente se ejecuta en Windows y se conecta a un RC), o ambos? – nirvdrum

+0

Ambos. Cheers -gearoid – Ger

Respuesta

6

solución muy simple en el extremo - acaba de llamar el método de SeleniumTestCase tearDown() (es decir, que llamamos super.tearDown(); de nuestra clase de prueba de base.)

que cierra todas las ventanas del navegador con éxito.

+0

Eso es básico de RC..setup, test, desmontaje. :) –

0

Usamos la herramienta sysinternalssysinternals , disponible gratuitamente de Microsoft, para matar el proceso del navegador (incluido Firefox).

Ejecutando pskill "firefox.exe" que matará una ventana de FireFox.

Si necesita ejecutar eso en una máquina remota, puede usar [psexec][3]. También para ambos hay conmutadores de comando para aceptar automáticamente el EULA (-accepteula) por lo que no es necesario.

0

Gearóid: No puedo ver cómo eso resolvería el problema. super.tearDown() se llama automáticamente después de cada caso de prueba de cualquier manera, por lo que hacer una llamada adicional solo lo haría funcionar dos veces.

Me he dado cuenta de que las ventanas del navegador no se apagan hasta que se detiene el servidor Selenium. Entonces, en mi caso, si hay 100 pruebas de selenio, tendría 200 ventanas de Firefox abiertas antes de que finalmente se cierren cuando el servidor de Selenium se cierre.

(estoy corriendo Fedora 13 y Firefox 3.6.7)

0

Usando TestNG, puede preceder a la función teardown() con un @AfterMethod, o una anotación @AfterTest, en lugar de @AfterClass.

3

Tuvimos este problema y después de un poco de investigación lo solucionamos.

En Selenium RC tiene el archivo "grid_configuration.yml" donde tiene la lista de navegadores y su respectivo identificador, por ejemplo "* firefox". Dependiendo de su entorno cuando ejecute "firefox" probablemente llamará a un contenedor, un alias o un enlace simbólico del archivo ejecutable de Firefox. Cuando se inicia Selenium, crea un proceso de bifurcación para el navegador y, dependiendo de si está llamando directamente al archivo ejecutable de firefox o a un contenedor, la creación de estos procesos es diferente y cuando intenta eliminar el proceso en el programa tearDown() en realidad mata al proceso hijo y mantiene al padre con vida, por lo que el tearDown() no cierra el navegador.

La solución es editar la "grid_configuration".yml" archivo cambiando '* Firefox' para la ruta absoluta del archivo ejecutable del navegador (siempre con * al principio)

0

Si está utilizando Python al final de su uso tearDown super(unittest2.TestCase,self).tearDown()

8

Mi solución fue utilizar driver.quit() (esto se auto cerrar el navegador Firefox) en lugar de driver.close() -. a pesar de que sólo había una ventana de Firefox abierto, que yo sepa

0

Usando MSTest, llamaba driver.Quit() en el TestCleanup pero no dejo terminar con una carga de ventanas de Firefox abiertas al final de las pruebas.

He encontrado que una NoSuchElementException parece evitar que el conductor llamar con éxito quit tan envuelto el TestCleanup con un try/finally:

[TestCleanup] 
     public void TestCleanUp() 
     { 
      try 
      { 
       driver.FindElement(By.Id("ctl00_btnClearSession")).Click(); 
       WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
       wait.Until((d) => { return d.FindElement(By.Id("ctl00_btnClearSession")).Displayed; }); 
      } 
      finally { 
       driver.Quit(); 
      } 
     } 

Este trabajó con el problema seguía teniendo pero puede darse el caso de que yo Tengo que ajustar todos mis TestMethods con try/finally también. Esto está lejos de ser ideal, pero ya no tengo ventanas abiertas cuando hago esto.

0

Tuve el mismo problema. Estoy ejecutando Selenium como parte de mis pruebas de unidad de Visual Studio y estaba teniendo el mismo problema con los navegadores Firefox que no se cierran al final de las pruebas.

Dos cosas fijas esto por mí:

1) que ha actualizado la carpeta/núcleo debajo de la página web con una versión actualizada.

2) Descubrí que el selenio llamaba a mi método de configuración en una clase base dos veces. En contra de la intuición (al menos para mí) parece que el selenio llama automáticamente al método de configuración en una clase principal. Si intentas llamarlo en una configuración de una clase secundaria (es decir, con algo como base.setup()) se ejecutará dos veces, y abrirá ventanas de Firefox que no se puede cerrar. Eliminé las llamadas a base.setup() y todos mis problemas de ventanas adicionales se resolvieron.

0

Pocos días desde tercera cumpleaños de la pregunta que otra solución oscura se someten:

Mi Firefox estaba en una ubicación personalizada. Como no quería cuidar un argumento de JVM personalizado cada vez que ejecutaba localmente mis pruebas de Selenium, puse un script de paso en /usr/local/bin. Presumiblemente Selenium estaba matando el proceso que comenzó (mi script), no el navegador.

Así que he vuelto a utilizar el argumento de JVM para lugares de explorador personalizado:

-Dwebdriver.firefox.bin="/path/to/firefox"

Cuestiones relacionadas