86 votes

Comment tester un dialogue de confirmation avec Cucumber ?

J'utilise Ruby on Rails avec Cucumber et Capybara.

Comment tester une simple commande de confirmation ("Are you sure ?") ?

Par ailleurs, où puis-je trouver de la documentation supplémentaire sur cette question ?

133voto

Derek Ekins Points 5524

Le pilote sélénium prend désormais en charge cette

À partir de Capybara, vous pouvez y accéder de la manière suivante :

page.driver.browser.switch_to.alert.accept

ou

page.driver.browser.switch_to.alert.dismiss

ou

 page.driver.browser.switch_to.alert.text

61voto

Theo Points 60103

Il semble qu'il n'y ait aucun moyen de le faire dans Capybara, malheureusement. Mais si vous exécutez vos tests avec le pilote Selenium (et probablement d'autres pilotes qui supportent JavaScript), vous pouvez le faire. Juste avant d'effectuer l'action qui ferait apparaître la boîte de dialogue de confirmation, remplacez la fonction confirm pour qu'elle renvoie toujours la valeur "true". Ainsi, la boîte de dialogue ne sera jamais affichée et vos tests pourront se poursuivre comme si l'utilisateur avait appuyé sur le bouton OK. Si vous souhaitez simuler l'inverse, il vous suffit de modifier la méthode pour qu'elle renvoie false.

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

39voto

Dynamick Points 456

J'ai mis en œuvre ces deux étapes web dans /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

8voto

Jon Wood Points 1654

Si vous souhaitez tester spécifiquement le message affiché, voici un moyen particulièrement astucieux de le faire. Ce n'est pas du beau code, mais c'est ce qu'il faut faire. Vous devez charger http://plugins.jquery.com/node/1386/release ou modifiez-le pour qu'il traite les cookies de manière native si vous ne souhaitez pas utiliser jQuery.

Utilisez ce genre d'histoire :

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

Et ces étapes

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

2voto

regulatethis Points 1138

En capybara-webkit prend également en charge cette fonction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X