J'ai parcouru le poste de capybara + cliquez sur la boîte d'alerte mais rien ne semble fonctionner. Voici mon scénario:
Scénario: Lorsque je clique sur le bouton de mise à jour Une boîte d'alerte apparaît contenant le bouton "OK" et "Annuler". Cliquez sur "Ok" puis un nouveau formulaire apparaît.
J'écris des spécifications de demande, c'est-à-dire en utilisant rspec et capybara. Le problème principal est de cliquer sur la boîte 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 l'exécution du script me donne l'erreur suivante:
Echec/Erreur: page.evaluate_script ('data-confirm = function () {return true;}') Selenium :: WebDriver :: Error :: UnexpectedJavascriptError: affectation non valide côté gauche # ./spec/requests/user_upgrades_spec.rb : 30
Pour le deuxième exemple, c'est-à-dire.
page.driver.browser.switch_to.alert.accept
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
Je reçois une erreur:
Échec/erreur: page.driver.browser.switch_to.alert.accept Selenium :: WebDriver :: Error :: UnhandledError:
Veuillez me faire savoir comment continuer
Vous pouvez cliquer sur une boîte d'alerte comme celle-ci:
page.driver.browser.switch_to.alert.accept
Réponse mise à jour ici, car les options ci-dessus semblent toutes obsolètes.
Capybara :: Session # accept_alert semble être le meilleur moyen d'y parvenir maintenant, où l'action qui déclenchera l'alerte devrait être passée dans un bloc. http://www.rubydoc.info/github/jnicklas/capybara/Capybara/Session:accept_alert
par exemple.:
page.accept_alert 'Alert text here' do
click_button('Search')
end
page.accept_alert
travaillé pour moi en utilisant du sélénium. D'autres pilotes auront probablement leur propre syntaxe.
Comme Jillian Foley l'a mentionné, il semble que d'autres réponses soient obsolètes.
Essayez cette ligne si vous souhaitez cliquer sur le bouton ok de la boîte d'alerte:
page.evaluate_script('window.confirm = function() { return true; }')
N'oubliez pas de marquer votre test avec le drapeau javascript
it "update user to trainer", js: true do
...
end
et activez Capybara.javascript_driver avec: webkit ou: Selenium dans votre fichier spec_helper
Pour WebKit:
page.accept_confirm { click_button "Upgrade" }
Pour le sélénium:
page.driver.browser.switch_to.alert.accept
Je sais que c'est vieux mais cela fonctionne maintenant aussi dans poltergeist:
page.accept_alert