2011-09-11 13 views
10

Estoy escribiendo pruebas de pepino para probar la funcionalidad de tipo "Recordarme" del usuario, y para hacerlo en la vida real, el usuario cerraría su navegador, volvería a abrir su navegador y volvería al sitio.¿Simula el cierre/reapertura del navegador en pepino/capibara?

Mi prueba hasta ahora se ve así:

Scenario: 'Remember me' checked 
    Given I have checked "Remember me" 
    And I am logged in as "[email protected]" 
    When I close and re-open my browser 
    And I come back to the dashboard 
    Then I should be on the dashboard 

Sin embargo no sé qué rellenar para la definición de paso 'Al cerrar y volver a abrir el navegador'.

¿Alguien sabe cómo me gustaría hacer esto (o si esto no es lo que debería hacer, cómo debería ser que las pruebas?)

+0

¿Encontró la respuesta para usted la pregunta? estamos intentando probar el uso de LocalStorage y nuestra aplicación fuera de línea. a veces tenemos que volver a abrir el navegador o abrir en otro navegador (podría ser el mismo navegador pero con datos locales limpios de almacenamiento y cookies vacías). ya hemos creado la horquilla de otra horquilla (soporte html5) y se fusionó con capybara-webkit (0.7.2) con soporte localStorage. Pero ahora tenemos problemas para volver a abrir los pasos del navegador. – oivoodoo

+0

¿Encontró la respuesta a su pregunta? –

+0

No encontré una respuesta, pero finalmente terminé descartando la prueba. ¡Lo siento! – sevenseacat

Respuesta

1

Puede borrar las cookies.

When /^I clear cookies$/ do 
    browser = Capybara.current_session.driver.browser 
    browser.manage.delete_all_cookies 
end 
+2

Creo que los escenarios son compatibles para verificar que la cookie esté configurada y se lea correctamente en las diferentes sesiones, por lo que borrar las cookies podría romper la prueba. –

2

Yo uso Show me the cookies.

Agregar al paquete con gem 'show_me_the_cookies' y luego añadir World(ShowMeTheCookies) en su features/support/env.rb

A continuación, sólo definir un paso:

When /^I reopen the browser$/ do 
    expire_cookies 
    visit [ current_path, page.driver.request.env['QUERY_STRING'] ].reject(&:blank?).join('?') 
end 
0

yo estaba tratando de probar la Lo mismo, haz que funcione así:

When(/^I close and reopen the browser$/) do 
    # Get cookies we want to keep 
    remember_me_cookie = page.driver.browser.manage.cookie_named('remember_user_token') 

    # Close the window and delete the cookies 
    page.driver.quit 

    # Reopen the window 
    page.driver.switch_to_window(page.driver.current_window_handle) 

    # Go to our domain and add our cookies back in 
    visit('/') 
    remember_me_cookie.nil? ? @current_user = nil : page.driver.browser.manage.add_cookie(remember_me_cookie) 

    # Refresh the domain to activate the cookies 
    visit('/') 
end 

algunas cosas:

  • page.driver.quit elimina las cookies, es por eso que estoy haciendo la danza con las galletas
  • Traté de cerrar la ventana usando page.driver.close_window(page.driver.current_window_handle), a continuación, cambiar de nuevo a ella con page.driver.switch_to_window(handle) pero que no lo hicieron trabajar
  • traté de cerrar la ventana usando page.driver.close_window(page.driver.current_window_handle), se puede cambiar a una nueva ventana page.driver.switch_to_window(page.driver.open_new_window) pero eso no funcionó

siento que no soy realmente entendiendo cómo la relación browser/window está funcionando en Capybara. También parece que copiar las cookies es una especie de trampa en mi prueba de integración. Es de esperar que haya una mejor manera de lograr todo esto en futuras versiones.

Cuestiones relacionadas