35 votes

Comment puis-je simuler le bouton retour du navigateur dans Capybara ?

Sur notre site de commerce électronique, il arrive que les utilisateurs cliquent deux fois sur le bouton "Commander" et que leur carte soit débitée deux fois.

C'est un bogue assez courant et facile à corriger, mais j'aimerais tester la solution dans notre configuration capybara. Une fois que j'ai appelé click_button('checkout'), puis-je faire semblant d'être un utilisateur qui appuie sur le bouton retour du navigateur et appeler click_button('checkout') une deuxième fois ?

40voto

Jake Mallory Points 251

Vous pouvez essayer :

When(/^I go back$/) do
  page.evaluate_script('window.history.back()')
end

Pour cela, il faudra exécuter le scénario dans un pilote capable d'utiliser javascript (selenium/celerity/akephalos).

9voto

jbarr Points 13

Vous pouvez utiliser page.driver.go_back , si vous utilisez webkit comme pilote javascript de capybara via l'option capybara-webkit la gemme. Il faut aussi :js => true pour le scenario .

7voto

Alex Points 233

Au moins avec capybara 2.10 y selenium-webdriver 2.53 ça marche :

When(/^I go back$/) do
  page.go_back
end

Il s'agit essentiellement d'un raccourci pour de jbarr réponse. Pour plus de détails, voir le documentation sur le capybara sur go_back .

BTW : La contrepartie est page.go_forward .

1voto

Nate Bird Points 2237

J'ai utilisé cette méthode chez Webrat. Je suis sûr que quelque chose de similaire pour le Capybara fonctionnerait.

When(/^I go back$/) do
  visit request.env['HTTP_REFERER']
end

Remarque : la méthode "redirect_to :back" n'a pas fonctionné pour moi, pour une raison quelconque.

0voto

Tamar Points 1673

Merci ! Cette question et cette réponse m'ont beaucoup aidé !

Pour compléter la réponse de @Jake Mallory, selenium fait maintenant partie de capybara et vous pouvez assez facilement exécuter un javascript dans le test en ajoutant :js => true (et éventuellement quelques ajustements supplémentaires) comme décrit dans ces deux tutoriels :

http://www.opinionatedprogrammer.com/2011/02/capybara-and-selenium-with-rspec-and-rails-3/ http://railscasts.com/episodes/257-request-specs-and-capybara?view=asciicast

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X