2010-10-08 25 views
30

Tenemos un problema en nuestro sitio de comercio electrónico en el que los usuarios ocasionalmente presionan "pagar" dos veces y se les carga la tarjeta dos veces.¿Cómo puedo simular el botón Atrás del navegador en Capibara?

Es un error bastante común y fácil de arreglar, pero me gustaría probar la solución en nuestra configuración de capibara. Una vez que he llamado a click_button ('checkout'), ¿es posible que pretenda que soy un usuario presionando el botón "volver atrás" de los navegadores y luego llamo a "click_button" ("checkout") por segunda vez?

Respuesta

2

He usado este método en Webrat. Estoy seguro de que algo similar para Capibara funcionaría.

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

Nota al margen: el método "redirect_to: back" no funcionó para mí por la razón que sea.

+1

excepto que volverá a cargar la página anterior (a diferencia del botón de retroceso del navegador), espero acceder nuevamente a la fuente. –

36

Es posible que desee probar:

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

Para ello será necesario ejecutar el senario en un piloto capaz Javascript (selenio/celeridad/akephalos)

1

Gracias! ¡Esta pregunta y respuesta me ayudó mucho!

Sólo para añadir a @Jake respuesta de Mallory, el selenio es ahora parte de capibara y se puede ejecutar con bastante facilidad Javascript en la prueba mediante la adición de :js => true (y, posiblemente, un par de retoques más) como se describe en estos dos tutoriales:

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

puede utilizar page.driver.go_back, si está utilizando webkit como su capibara Javascript conductor a través del capybara-webkit joya. También requiere :js => true para el scenario.

+0

Funciona cuando se usa Selenium como el controlador de JavaScript Capybara también. – ctc

2

Al menos con capybara2.10 y selenium-webdriver esto funciona:

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

Se trata básicamente de un acceso directo para jbarr's respuesta. Para obtener más información, consulte el capybara documentation on go_back.

BTW: La parte contraria es page.go_forward.

Cuestiones relacionadas