Ответ 1
Вы можете попробовать:
When(/^I go back$/) do
page.evaluate_script('window.history.back()')
end
Для этого потребуется запустить senario в драйвере, поддерживающем javascript (selenium/celerity/akephalos)
У нас есть проблема на нашем сайте электронной коммерции, где пользователи время от времени попадают в "checkout" дважды, и их карточка дважды взимается.
Это довольно распространенная ошибка и ее легко исправить, но я бы хотел протестировать решение в нашей настройке capybara. Как только я вызвал click_button ('checkout'), возможно ли, чтобы я сделал вид, что я нажимаю кнопку браузера назад, а затем снова вызываю click_button ('checkout')?
Вы можете попробовать:
When(/^I go back$/) do
page.evaluate_script('window.history.back()')
end
Для этого потребуется запустить senario в драйвере, поддерживающем javascript (selenium/celerity/akephalos)
Вы можете использовать page.driver.go_back
, если вы используете webkit в качестве драйвера javascript capybara с помощью драгоценного камня capybara-webkit
. Также требуется :js => true
для scenario
.
Я использовал этот метод в Webrat. Я уверен, что что-то подобное для Capybara будет работать.
When(/^I go back$/) do
visit request.env['HTTP_REFERER']
end
Боковое примечание: метод "redirect_to: back" не работал у меня по какой-либо причине.
По крайней мере, с 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
.
Спасибо! Этот вопрос и ответ мне очень помогли!
Чтобы добавить к ответу @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