Pregunta

Estoy usando Ruby on Rails con pepino y Carpincho.

¿Cómo hago para probar un comando confirmar sencilla ( "¿Está seguro?")?

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

¿Fue útil?

Solución

Parece que no hay manera de hacerlo en capibara, por desgracia. Pero si se está ejecutando sus pruebas con el conductor selenio (y probablemente otros conductores que soportan JavaScript), puede entrar ilegalmente en él. Justo antes de realizar la acción que aparezca el diálogo de confirmación, reemplazar el método confirm para volver siempre es cierto. De esa manera no se mostrará el cuadro de diálogo, y sus pruebas puede continuar como si el usuario hubiera pulsado el botón OK. Si desea simular la inversa, sólo tiene que cambiar para volver falsa.

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

Otros consejos

El conductor ahora es compatible con este

A partir de capibara que accedería a ello como esto:

page.driver.browser.switch_to.alert.accept

o

page.driver.browser.switch_to.alert.dismiss

o

 page.driver.browser.switch_to.alert.text

He aplicado 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

Si desea probar específicamente el mensaje que se muestra, esto es una forma particularmente hacky para hacerlo. No estoy de acuerdo como código hermoso, pero hace el trabajo. Tendrá que cargar http://plugins.jquery.com/node/1386/release, o cambiarlo a hacer galletas de forma nativa si no quiere jQuery.

Utilice 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

La actualización de esta para las versiones actuales de carpincho. La mayoría de los conductores Capybara hoy el soporte de la API modal. Para aceptar un referente confirman que haría

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

Esto se puede utilizar en pepino con algo como

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

que haga clic en el botón de llamada y luego aceptar un cuadro Confirmar con msg texto coincidente

El capibara-webkit apoya conductor esto también.

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

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

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

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

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

@browser.alert.ok
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top