我们的电子商务网站存在一个问题,即用户偶尔会两次点击“结帐”,并且会对卡进行两次充值。
这是一个常见的错误,容易修复,但我想在我们的水豚设置中测试解决方案。一旦我调用click_button('checkout'),我是否可以假装我是用户点击浏览器后退按钮然后再次调用click_button('checkout')?
答案 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.10
和selenium-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