Как мне смоделировать кнопку возврата браузера в Capybara? - PullRequest
30 голосов
/ 08 октября 2010

У нас есть проблема на нашем сайте электронной коммерции, когда пользователи время от времени нажимают кнопку «Оформить заказ» дважды, а с их карты взимается плата дважды.

Это достаточно распространенная ошибка, которую легко исправить, но я бы хотел протестировать решение в нашей настройке капибары. После того, как я вызвал click_button ('checkout'), могу ли я притвориться, что я пользователь нажимаю кнопку назад в браузере, а затем вызвать click_button ('checkout') второй раз?

Ответы [ 5 ]

37 голосов
/ 22 февраля 2011

Вы можете попробовать:

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

Для этого потребуется запустить senario в драйвере, поддерживающем javascript (selenium / celerity / akephalos)

9 голосов
/ 07 мая 2015

Вы можете использовать page.driver.go_back, , если вы используете webkit в качестве драйвера javascript для капибары через гем capybara-webkit. Также требуется :js => true для scenario.

4 голосов
/ 03 февраля 2017

По крайней мере с capybara 2.10 и selenium-webdriver 2.53 это работает:

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

Это в основном ярлык для ответа jbarr . Подробнее см. Документацию на капибару в go_back.

Кстати: встречная часть page.go_forward.

2 голосов
/ 08 октября 2010

Я использовал этот метод в Webrat. Я уверен, что нечто подобное для Капибары подойдет.

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

Примечание: метод redirect_to: back у меня не работал по любой причине.

1 голос
/ 08 мая 2012

Спасибо! Этот вопрос и ответ мне очень помогли!

Чтобы добавить ответ @Jake Mallory, селен теперь является частью капибары, и вы можете довольно легко запустить javascript в тесте, добавив :js => true (и, возможно, еще пару твиков), как описано в этих двух уроках:

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

...