35

我们的电子商务网站存在一个问题,用户偶尔会点击两次“结帐”,并且他们的卡被收取了两次费用。

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

4

5 回答 5

40

您可能想尝试:

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

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

于 2011-02-22T04:08:38.443 回答
9

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

于 2015-05-06T21:23:27.927 回答
6

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

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

这基本上是jbarr答案的捷径。有关详细信息,请参阅 上的水豚文档go_back

顺便说一句:柜台部分是page.go_forward

于 2017-02-03T13:18:41.007 回答
1

我在 Webrat 中使用过这种方法。我敢肯定对 Capybara 类似的东西会起作用。

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

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

于 2010-10-08T14:06:40.027 回答
0

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

只是为了添加到@Jake Mallory 的答案,硒现在是水豚的一部分,您可以通过添加 :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?视图=asciicast

于 2012-05-08T17:20:36.517 回答