Подтвердить что ты не робот

Как я могу имитировать кнопку браузера в Capybara?

У нас есть проблема на нашем сайте электронной коммерции, где пользователи время от времени попадают в "checkout" дважды, и их карточка дважды взимается.

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

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

Боковое примечание: метод "redirect_to: back" не работал у меня по какой-либо причине.

Ответ 4

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

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

В основном это ярлык для ответа jbarr's. Подробнее см. документацию capybara на go_back.

BTW: счетная часть page.go_forward.

Ответ 5

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

Чтобы добавить к ответу @Jake Mallory, селен теперь является частью capybara, и вы можете довольно легко запустить 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