2010-10-08 15 views
30

Wir haben ein Problem auf unserer E-Commerce-Website, wo Nutzer gelegentlich zweimal auf "Kasse" klicken und ihre Karte zweimal aufgeladen wird.Wie kann ich den Browser zurück Knopf in Capybara simulieren?

Es ist ein häufig genug Fehler und einfach zu beheben, aber ich möchte die Lösung in unserem Capybara-Setup testen. Wenn ich click_button ('checkout') angerufen habe, kann ich dann so tun, als ob ich ein Benutzer bin, der den Zurück-Button des Browsers drückt und dann click_button ('checkout') ein zweites Mal aufruft?

Antwort

2

Ich habe diese Methode in Webrat verwendet. Ich bin sicher, dass etwas Ähnliches für Capybara funktionieren würde.

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

Side Anmerkung: die "redirect_to: back" -Verfahren aus irgendeinem Grund nicht für mich arbeiten.

+1

mit der Ausnahme, dass die vorherige Seite neu geladen wird (im Gegensatz zur Zurück-Schaltfläche des Browsers), hoffe ich, einfach auf die Quelle zuzugreifen. –

36

Möchten Sie folgendes versuchen:

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

erfordern Dies wird die senario in einen JavaScript-fähigen Treiber (Selen/celerity/akephalos)

1

Dank läuft! Diese Frage und Antwort hat mir sehr geholfen!

einfach hinzuzufügen Mallory Antwort auf @Jake, Selen ist jetzt Teil von Capybara und Sie können ziemlich leicht Javascript im Test laufen durch :js => true Zugabe (und möglicherweise noch ein paar Tweaks), wie in diesen beiden Tutorials beschrieben:

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

können Sie page.driver.go_back, verwenden wenn Sie webkit als capybara-JavaScript-Fahrer über das capybara-webkit gem verwenden. Erfordert auch :js => true für die scenario.

+0

Funktioniert bei Verwendung von Selen als Capybara JavaScript-Treiber. – ctc

2

Mindestens mit capybara2.10 und selenium-webdriver dies funktioniert:

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

Es ist im Grunde eine Abkürzung für jbarr's Antwort. Für weitere Einzelheiten siehe die capybara documentation on go_back.

BTW: Das Gegenstück ist page.go_forward.

Verwandte Themen