Rspec + Capybara : Comment cliquez sur boîte d'alerte
Je suis passé par le poste de capybara + clic sur la zone d'alerte, mais rien ne semble fonctionner. Voici mon scénario:
Scénario: Lorsque je clique sur le bouton mise à jour, Une boîte d'alerte s'affiche qui contient "OK" et "Annuler". Cliquez sur "Ok" puis sur nouveau formulaire s'affiche.
-
Je suis en train d'écrire des specs de requête c'est à dire à l'aide de rspec et le capybara. Principal problème est de cliquer sur la zone d'alerte: voici mon code:
context "update" do before(:all) do Capybara.current_driver = :selenium end after(:all) do Capybara.use_default_driver end it "update user to trainer" do click_button('Search') sleep 3 page.evaluate_script('data-confirm = function() { return true; }') page.click('OK') click_button('Upgrade') end end
Mais de l'exécution du script me donne l'erreur suivante:
Panne/Erreur: page.evaluate_script('data-confirm = function() { return true; }') Sélénium::WebDriver::Erreur::UnexpectedJavascriptError: invalid attribution de gauche # ./spec/demandes/user_upgrades_spec.rb:30
-
Pour le deuxième exemple, c'est à dire
page.le pilote.le navigateur.switch_to.l'alerte.accepter
Mon code :
context "update" do before(:all) do Capybara.current_driver = :selenium end after(:all) do Capybara.use_default_driver end it "update user to trainer" do click_button('Search') sleep 3 click_button('Upgrade') page.driver.browser.switch_to.alert.accept end end
J'obtiens l'erreur:
Panne/Erreur: page.le pilote.le navigateur.switch_to.l'alerte.accepter le Sélénium::WebDriver::Erreur::UnhandledError:
S'il vous plaît laissez-moi savoir comment aller plus loin
- Vous ne pouvez pas le nom d'une variable JavaScript avec des tirets.
data-confirm = function ...
est illégal. Il ressemble à(foo - bar) = function() { ... }
. C'est leleft-hand side # ...user_upgrades_spec.rb:30
erreur. Nom de vos variables JavaScript avec camelCase. - stackoverflow.com/questions/27384040/...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez cliquer sur une boîte d'alerte comme ceci:
Mise à jour de réponse ici, étant donné que les options ci-dessus semblent avoir tous été désapprouvée.
Capybara::Session#accept_alert semble être le meilleur moyen pour y parvenir maintenant, où l'action qui va déclencher l'alerte doit être transmis dans un bloc.
http://www.rubydoc.info/github/jnicklas/capybara/Capybara/Session:accept_alert
par exemple:
undefined method
accept_alert "pour #<Capybara::Session>" même si par les docs, c'est une méthode pourCapybara::Session
. Toutes les pensées?accept_alert
a été introduit dans Capybara 2.4.1. Considère que l'exécution debundle update capybara
travaillé pour moi, en utilisant le Sélénium. D'autres pilotes ont probablement leur propre syntaxe.
Que Jillian Foley mentionné, il semble que d'autres réponses ont été dépréciés.
accept_alert
.Essayer cette ligne si vous le souhaitez, cliquez sur le bouton ok de la boîte d'alerte:
N'oubliez pas de marquer votre test avec le javascript drapeau
et activer le Capybara.javascript_driver avec :webkit ou :le sélénium dans votre fichier spec_helper.rb
Pour WebKit:
Pour Le Sélénium:
Je sais que c'est vieux, mais cela fonctionne à présent en lutin trop: