J'ai essayé plusieurs exemples trouvés en ligne, mais sans succès. Je cherche à confirmer le message de confirmation d'un lien de suppression. La dernière tentative était le code ci-dessous, mais cela a entraîné une erreur Capybara :: NotSupportedByDriverError.
def confirm_dialog
page.evaluate_script('window.confirm = function() { return true; }')
end
Commencez tout d'abord par utiliser Selenium comme pilote en plaçant une balise @javascript devant votre scénario.
Le code suivant dans votre étape de concombre confirmera alors le dialogue:
page.driver.browser.switch_to.alert.accept
# or
page.driver.browser.switch_to.alert.dismiss
# or
page.driver.browser.switch_to.alert.text
Comme @NobbZ l'a dit, cette question a déjà été posée et répondue ici: Comment tester une boîte de dialogue de confirmation avec Cucumber? .
Plus de documentation Selenium disponible ici aussi: http://code.google.com/p/Selenium/wiki/RubyBindings#JavaScript_dialogs
Ajout d'une réponse pour ceux qui ont frappé cela en 2016 et au-delà. Vous pouvez désormais utiliser Capybara directement pour accepter une boîte de confirmation. Pour ce faire, vous encapsulez le code qui fait apparaître la boîte de confirmation dans la fonction accept_confirm .
accept_confirm do
click_link 'Destroy'
end
pour capybara-webkit:
page.driver.browser.accept_js_confirms
page.driver.browser.reject_js_confirms
qui fonctionne toujours, mais la documentation dit aussi:
page.driver.accept_js_confirms!
page.driver.accept_js_confirms!
Voir https://github.com/thoughtbot/capybara-webkit , recherchez "accept_js_confirms"
J'ai eu des problèmes de synchronisation avec les boîtes de dialogue du navigateur dans un environnement CI, donc je recherche une boîte de dialogue avant de l'accepter:
def accept_browser_dialog
wait = Selenium::WebDriver::Wait.new(:timeout => 30)
wait.until {
begin
page.driver.browser.switch_to.alert
true
rescue Selenium::WebDriver::Error::NoAlertPresentError
false
end
}
page.driver.browser.switch_to.alert.accept
end
J'ai dû utiliser un sommeil dans le test de webkit car il échouerait de toute façon et ensuite sinon.
Voici ce que j'ai trouvé après avoir lu les articles de tout le monde:
if page.driver.class == Capybara::Selenium::Driver
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.accept_js_confirms
else
raise "Unsupported driver"
end
À Capybara, il est très simple d'accepter la fenêtre du modèle. Même nous pouvons faire de même dans le sélénium, mais c'est un peu difficile pour les gens qui ne connaissent pas le sélénium.
page.accept_modal #This acceptera la fenêtre modale
page.dismiss_modal #Cela rejettera/rejetera la fenêtre modale
Je suppose que vous devez ajouter Selenium à votre fichier gem et le configurer et capybara que capybara utilise Selenium comme pilote.
Je pense aussi que Comment tester une boîte de dialogue de confirmation avec Cucumber? est très similaire à votre question, en particulier la réponse acceptée.
essayez d'ajouter :js => true
à votre test.
La fonction de métadonnées de RSpec peut être utilisée pour basculer vers un autre pilote. Utilisez: js => true pour basculer vers le pilote javascript, ou fournissez une option: driver pour basculer vers un pilote spécifique. Par exemple:
it 'will use the default js driver' :js => true do
...
end