Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I simulate the browser back button in Capybara?

We have a issue on our e-commerce site where users occasionally hit "checkout" twice and have their card charged twice.

It's a common enough bug and easy to fix, but I'd like to test the solution in our capybara setup. Once I've called click_button('checkout'), is it possible for me to pretend I'm a user hitting the browsers back button and then call click_button('checkout') a second time?

like image 321
James Healy Avatar asked Oct 08 '10 06:10

James Healy


4 Answers

You may want to try:

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

This will require running the senario in a javascript capable driver (selenium/celerity/akephalos)

like image 188
Jake Mallory Avatar answered Nov 19 '22 10:11

Jake Mallory


You can use page.driver.go_back, if you are using webkit as your capybara javascript driver via the capybara-webkit gem. Also requires :js => true for the scenario.

like image 38
jbarr Avatar answered Nov 19 '22 12:11

jbarr


At least with capybara 2.10 and selenium-webdriver 2.53 this works:

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

It's basically a shortcut for jbarr's answer. For details more see the capybara documentation on go_back .

BTW: The counter part is page.go_forward.

like image 7
apepper Avatar answered Nov 19 '22 12:11

apepper


I've used this method in Webrat. I'm sure something similar for Capybara would work.

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

Side note: the "redirect_to :back" method didn't work for me for whatever reason.

like image 1
Nate Bird Avatar answered Nov 19 '22 10:11

Nate Bird