rails rack_test feature example automated-tests capybara integration-testing

automated-tests - rack_test - capybara vs selenium



¿Cómo probar un diálogo de confirmación con Pepino? (10)

Actualizando esto para las versiones actuales de Capybara. La mayoría de los conductores de Capybara hoy soportan la API modal. Para aceptar un modal de confirmación, lo harías

accept_confirm do # dismiss_confirm if not accepting click_link ''delete'' # whatever action triggers the modal to appear end

Esto se puede usar en Pepino con algo como

When /^(?:|I )press "([^"]*)" and confirm "([^"]*)"$/ do |button, msg| accept_confirm msg do click_button(button) end end

que hará clic en el botón nombrado y luego aceptará un cuadro de confirmación con texto que coincida con el mensaje

Estoy usando Ruby on Rails con Cucumber and Capybara.

¿Cómo voy a probar un comando de confirmación simple ("¿Estás seguro?")?

Además, ¿dónde podría encontrar más documentación sobre este tema?



El controlador de selenio ahora es compatible con esto

Desde Capibara accederías así:

page.driver.browser.switch_to.alert.accept

o

page.driver.browser.switch_to.alert.dismiss

o

page.driver.browser.switch_to.alert.text


Implementé estos dos pasos web en /features/step_definitions/web_steps.rb :

When /^I confirm popup$/ do page.driver.browser.switch_to.alert.accept end When /^I dismiss popup$/ do page.driver.browser.switch_to.alert.dismiss end


Probé las respuestas anteriores sin suerte. Al final, esto funcionó para mí:

@browser.alert.ok


Si desea probar específicamente el mensaje que se muestra, aquí hay una manera particularmente hacky de hacerlo. No lo respaldo como código bonito, pero hace el trabajo bien. Tendrá que cargar http://plugins.jquery.com/node/1386/release , o cambiarlo para hacer cookies de forma nativa si no desea jQuery.

Usa este tipo de historia:

Given I am on the menu page for the current booking And a confirmation box saying "The menu is £3.50 over budget. Click Ok to confirm anyway, or Cancel if you want to make changes." should pop up And I want to click "Ok" When I press "Confirm menu" Then the confirmation box should have been displayed

Y estos pasos

Given /^a confirmation box saying "([^"]*)" should pop up$/ do |message| @expected_message = message end Given /^I want to click "([^"]*)"$/ do |option| retval = (option == "Ok") ? "true" : "false" page.evaluate_script("window.confirm = function (msg) { $.cookie(''confirm_message'', msg) return #{retval} }") end Then /^the confirmation box should have been displayed$/ do page.evaluate_script("$.cookie(''confirm_message'')").should_not be_nil page.evaluate_script("$.cookie(''confirm_message'')").should eq(@expected_message) page.evaluate_script("$.cookie(''confirm_message'', null)") end


Esta esencia tiene pasos para probar un diálogo de confirmación de JS en Rails 2 y 3 con cualquier controlador de Capybara.

Es una adaptación de una respuesta anterior, pero no necesita el complemento jQuery Cookie.


Prickle agrega algunos prácticos métodos de conveniencia para trabajar con ventanas emergentes en selenio y webkit


Parece que no hay forma de hacerlo en Capibara, desafortunadamente. Pero si está ejecutando sus pruebas con el controlador Selenium (y probablemente otros controladores compatibles con JavaScript), puede hackearlo. Justo antes de realizar la acción que mostraría el diálogo de confirmación, anule el método de confirm para que siempre devuelva verdadero. De esa forma, el cuadro de diálogo nunca se mostrará, y sus pruebas pueden continuar como si el usuario hubiera presionado el botón OK. Si desea simular lo contrario, simplemente cámbielo para devolver falso.

page.evaluate_script(''window.confirm = function() { return true; }'') page.click(''Remove'')


Scenario: Illustrate an example has dialog confirm with text # When I confirm the browser dialog with tile "Are you sure?" # ===================================================================== my step definition here: And(/^I confirm the browser dialog with title "([^"]*)"$/) do |title| if page.driver.class == Capybara::Selenium::Driver page.driver.browser.switch_to.alert.text.should eq(title) page.driver.browser.switch_to.alert.accept elsif page.driver.class == Capybara::Webkit::Driver sleep 1 # prevent test from failing by waiting for popup page.driver.browser.confirm_messages.should eq(title) page.driver.browser.accept_js_confirms else raise "Unsupported driver" end end