2010-10-08 20 views
30

Abbiamo un problema sul nostro sito di e-commerce in cui gli utenti occasionalmente eseguono "checkout" due volte e fanno pagare due volte la loro carta.Come posso simulare il pulsante Indietro del browser in Capybara?

È un errore abbastanza comune e facile da risolvere, ma mi piacerebbe testare la soluzione nella nostra configurazione di capybara. Una volta che ho chiamato click_button ('checkout'), posso fingere che io sia un utente che preme il pulsante indietro del browser e poi chiamare click_button ('checkout') una seconda volta?

risposta

2

Ho usato questo metodo in Webrat. Sono sicuro che qualcosa di simile per Capybara avrebbe funzionato.

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

Nota a margine: il "redirect_to: torna" metodo non ha funzionato per me per qualsiasi motivo.

+1

eccetto che ricaricherà la pagina precedente (a differenza del pulsante Indietro del browser), spero di accedere nuovamente alla fonte. –

36

Si consiglia di provare:

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

Questo richiederà l'esecuzione del senario in un driver in grado javascript (selenio/Celerity/akephalos)

1

Grazie! Questa domanda e risposta mi ha aiutato molto!

Giusto per aggiungere alla @Jake risposta di Mallory, il selenio è ora parte di capibara e si può abbastanza facilmente eseguire javascript nel test con l'aggiunta di :js => true (e forse un altro paio di ritocchi), come descritto in questi due tutorial:

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

È possibile utilizzare page.driver.go_back, se si utilizza webKit come capibara javascript conducente tramite il capybara-webkit gemma. Richiede anche :js => true per il scenario.

+0

Funziona quando si utilizza Selenium come driver JavaScript Capybara. – ctc

2

Almeno con capybara2.10 e selenium-webdriver questo funziona:

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

Si tratta fondamentalmente di una scorciatoia per jbarr's risposta. Per maggiori dettagli vedi lo capybara documentation on go_back.

BTW: la parte del contatore è page.go_forward.

Problemi correlati