2010-10-08 16 views
30

Mamy problem w naszej witrynie e-commerce, w której użytkownicy od czasu do czasu dwukrotnie trafiają na "kasę" i dwukrotnie obciążają swoją kartę.Jak mogę zasymulować przycisk wstecz przeglądarki w Capybara?

To dość powszechny błąd i łatwe do naprawienia, ale chciałbym przetestować to rozwiązanie w naszej konfiguracji kapibara. Kiedy zadzwonię do click_button ("kasy"), czy mogę udawać, że jestem użytkownikiem, który kliknął przycisk powrotu przeglądarki, a następnie zadzwonić po raz drugi do przycisku click_button ("kasy")?

Odpowiedz

2

Użyłem tej metody w Webrat. Jestem pewien, że coś podobnego na Capybara zadziałałoby.

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

Nota boczna: metoda "redirect_to: back" nie zadziałała dla mnie z jakiegokolwiek powodu.

+1

za wyjątkiem tego, że ponownie załaduje poprzednią stronę (w przeciwieństwie do przycisku wstecz przeglądarki), mam nadzieję, że ponownie uzyskam dostęp do źródła. –

36

Możesz też spróbować:

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

To będzie wymagało prowadzenia senario w javascript zdolnym kierowcą (selen/Celerity/akephalos)

1

dzięki! To pytanie i odpowiedź bardzo mi pomogły!

Wystarczy dodać do @Jake odpowiedź Mallory'ego, selen jest obecnie częścią kapibary i można dość łatwo uruchomić JavaScript w teście dodając :js => true (i ewentualnie jeszcze kilka poprawek), jak opisano w tych dwóch ćwiczeń:

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

8

można użyć page.driver.go_back, jeśli używasz WebKit jako kapibary javascript kierowca poprzez capybara-webkit gem. Wymaga także :js => true dla scenario.

+0

Działa również przy użyciu Selenium jako sterownika JavaScript Capybara. – ctc

2

Przynajmniej z capybara2.10 i selenium-webdriver to działa:

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

Jest to w zasadzie skrótu jbarr's odpowiedź. Aby uzyskać szczegółowe informacje, patrz: capybara documentation on go_back.

BTW: Część licznika to page.go_forward.

Powiązane problemy