78 votes

Comment confirmer un popup javascript avec Capybara?

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
 

57voto

Peter Nixey Points 4153

Tout d'abord passer à l'utilisation de Sélénium, comme le pilote en mettant @balise javascript en face de votre scénario.

Le code suivant dans votre concombre étape puis confirmez 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 dit, cette question a été posée et répondue avant ici: Comment tester une boîte de dialogue de confirmation avec le Concombre?.

Plus de sélénium de la documentation disponible ici aussi: http://code.google.com/p/selenium/wiki/RubyBindings#JavaScript_dialogs

16voto

magicgod Points 301

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".

10voto

Stephan Seidt Points 51

J'ai eu des problèmes de synchronisation avec les dialogues de navigateur dans un environnement CI, alors je suis à la recherche d'un 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
 

6voto

yagudaev Points 1286

J'ai dû utiliser un test de sommeil dans le test Webkit, car il échouerait toujours et autrement.

Voici ce que je suis venu après avoir lu les messages 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
 

2voto

NobbZ Points 400

J'imagine que vous devez ajouter sélénium à votre fichier de gemmes et le configurer, et capybara que capybara utilise le sélénium comme moteur.

Je pense aussi que Comment tester un dialogue de confirmation avec Cucumber? est très similaire à votre question, en particulier la réponse acceptée.

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