2012-05-25 13 views
8

Así que cuando corro mis pruebas individualmente, funcionan muy bien. Sin embargo, cuando ejecuto mi característica (pruebas múltiples) mi código está fallando.
Esto se debe a que cuando existe el carpincho, no todas las ventanas se cierran y, por lo tanto, mis controladores de selenio no saben qué ventana usar.¿Puedes cerrar todas las ventanas abiertas en capibara?

Básicamente, lo que está sucediendo es que mi prueba está abriendo varias ventanas. Esto está sucediendo porque mis pruebas están haciendo clic en enlaces que abren nuevas ventanas y verifican el contenido en las nuevas ventanas. Aunque digo page.quit al final de cada prueba, esta función no cierra todas las ventanas abiertas (cierra la ventana activa pero no la ventana original). Cuando se ejecuta la segunda prueba, utiliza la ventana de creación original, pero cuando abre la nueva ventana emergente, utiliza la ventana incorrecta.

¿Cómo puedo asegurarme de que se utiliza un nuevo navegador durante cada prueba y que todas las ventanas de la prueba anterior están cerradas?
Actualmente estoy usando page.reset! y page.quit.
No estoy seguro, pero ¿puedo decir session.quit para cerrar todas las ventanas abiertas del navegador?

Respuesta

1

intente lo siguiente:

page.driver.browser.window_handles.each do |handle| 
    page.driver.browser.switch_to.window(handle) 
    page.quit 
end 

(creo que va a trabajar, pero no he tenido la oportunidad de probarlo.)

+1

Esto no funcionará, la función 'salir' no existe. Lo mismo con Close. – Jason

+1

Esto no funciona – Jason

+0

Esto funciona al azar sin embargo.Esta vez me dio 'Failure/Error: no se pudo encontrar la línea coincidente desde el backtrace Selenium :: WebDriver :: Error :: NoSuchWindowError: ejecución de getUrl failed; No se pudo encontrar la ventana' – Ava

3

utilizo este pedazo de código para acceder a los pop-ups y cerca de ellos después de . No debe haber mucha diferencia

within_window(page.driver.browser.window_handles.last) do 
    click buttons and stuff... 
    ... 
    page.driver.browser.close #closes popup 
end 

creo que sirve

+0

Esto no funciona porque todos los recursos se pierden y la 2da prueba falla diciendo "navegador no encontrado" o algo similar. – Jason

8

funciona este código:

page.execute_script "window.close();" 

acabo de ejecutar este mientras que en la ventana que desea cerrar.

+0

Este código no funciona si está usando un complemento como formularios sucios y tiene un formulario sucio en la pantalla, en ese caso el javascript muestra una alerta "¿está seguro?" Y la página no se cierra. Mucho mejor para hacer "página.respuesta" antes de ejecutar la prueba – Rob

+0

'page.execute_script" window.close(); "' no funciona para mí. Debería estar sin ';', es decir 'page.execute_script" window.close() "' –

3
page.driver.browser.window_handles.each do |handle| 
    page.driver.browser.switch_to.window(handle) 
    page.execute_script "window.close()" 

end 

Hizo el encanto para mí. Combinación de respuestas de @Jason y @ Justin.

Gracias!

1

Prueba esto:

tab_id = page.driver.find_window("http://google.com.au") 
page.driver.browser.switch_to.window(tab_id) 
page.driver.quit 

Esto funcionó para mí.

0

Añadir esto a sus pruebas de función, que va a restablecer las cookies de sesión y comenzar la prueba en una página en blanco:

# Window washing - use a clean window before every example 
before(:example) do 
    page.reset! 
end 
1

el fin de tener todas las afirmaciones en el archivo de especificación, me pasé el control a nueva página (ventana), después de la ejecución de las afirmaciones que cerrado nueva página y control pasó a la página original como abajo:

after(:each) do 
    expect(@static_page.has_logo?).to eq(true) # assertion in new page 
    page.execute_script('window.close()') # close new page 
    switch_to_window(windows.first) # return control to first page 
end 
Cuestiones relacionadas