2011-09-11 3 views
10

J'écris des tests de concombre pour tester la fonctionnalité de type «Se souvenir de moi» de l'utilisateur, et pour le faire dans la vraie vie, l'utilisateur ferme son navigateur, rouvre son navigateur et revient sur le site.Simuler la fermeture/réouverture du navigateur dans concombre/capybara?

Mon test semble si loin comme ceci:

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 

Cependant, je ne sais pas quoi remplir pour le « Quand je ferme et rouvrir le navigateur » étape définition.

Est-ce que quelqu'un sait comment je faire (ou si ce n'est pas ce que je devrais faire, comment je devrais être le tester?)

+0

Avez-vous trouvé la réponse à votre question? nous essayons de tester l'utilisation de localStorage et notre application hors ligne. parfois, nous devons rouvrir le navigateur ou ouvrir dans un autre navigateur (il pourrait s'agir du même navigateur mais avec des données locales propres et des cookies vides). nous avons déjà créé fork d'une autre fourchette (support html5) et fusionné avec capybara-webkit (0.7.2) avec support localStorage. Mais maintenant nous avons des problèmes avec les étapes du navigateur rouvrir. – oivoodoo

+0

Avez-vous trouvé la réponse à votre question? –

+0

Je n'ai pas trouvé de réponse, mais j'ai fini par abandonner le test. Pardon! – sevenseacat

Répondre

1

Vous pouvez simplement effacer les cookies.

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

Je pense que les scénarios permettent de vérifier que le cookie est défini et lu correctement à travers différentes sessions, de sorte que l'effacement des cookies pourrait briser le test. –

2

J'utilise Show me the cookies.

Ajouter au groupe avec gem 'show_me_the_cookies' puis ajoutez World(ShowMeTheCookies) dans votre features/support/env.rb

Ensuite, il suffit de définir une étape:

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

J'ai essayé de tester la même chose, a obtenu le travail comme ceci:

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 

Quelques choses:

  • page.driver.quit supprime les biscuits, c'est pourquoi je fais la danse avec les biscuits
  • I Tried la fermeture de la fenêtre à l'aide page.driver.close_window(page.driver.current_window_handle), puis de passer revenir avec page.driver.switch_to_window(handle) mais cela n'a pas travailler
  • J'ai essayé de fermer la fenêtre à l'aide page.driver.close_window(page.driver.current_window_handle), puis de passer à une nouvelle fenêtre page.driver.switch_to_window(page.driver.open_new_window) mais cela ne fonctionne pas

Je me sens comme je ne suis pas vraiment comprendre comment la relation browser/window fonctionne à Capybara. En outre, il semble que la copie sur les cookies est une sorte de tricher mon test d'intégration. J'espère qu'il y aura une meilleure façon de réaliser tout cela dans les futures versions.

Questions connexes