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 ?
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 ?
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
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')
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
En capybara-webkit prend également en charge cette fonction.
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.