如何模拟Capybara中的浏览器后退按钮?

时间:2010-10-08 06:18:37

标签: ruby-on-rails ruby testing capybara

我们的电子商务网站存在一个问题,即用户偶尔会两次点击“结帐”,并且会对卡进行两次充值。

这是一个常见的错误,容易修复,但我想在我们的水豚设置中测试解决方案。一旦我调用click_button('checkout'),我是否可以假装我是用户点击浏览器后退按钮然后再次调用click_button('checkout')?

5 个答案:

答案 0 :(得分:37)

您可能想尝试:

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

这需要在支持javascript的驱动程序中运行场景(selenium / celerity / akephalos)

答案 1 :(得分:9)

您可以通过page.driver.go_back gem使用capybara-webkit,如果您正在使用webkit作为您的capybara javascript驱动程序。 :js => true还需要scenario

答案 2 :(得分:4)

至少使用capybara 2.10selenium-webdriver 2.53这有效:

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

它基本上是jbarr's答案的捷径。有关详细信息,请参阅capybara documentation on go_back

顺便说一句:对应部分是page.go_forward

答案 3 :(得分:2)

我在Webrat中使用过这种方法。我相信Capybara会有类似的东西。

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

旁注:无论出于何种原因,“redirect_to:back”方法对我都不起作用。

答案 4 :(得分:1)

谢谢!这个问题和答案对我帮助很大!

只是为了添加@Jake Mallory的答案,selenium现在是capybara的一部分,你可以通过添加:js => true(可能还有几个调整)在测试中相当容易地运行javascript,如这两个教程中所述:

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