web-dev-qa-db-fra.com

Rspec + Capybara: comment cliquer sur la boîte d'alerte

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.

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

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

38
Amit Kulkarni

Vous pouvez cliquer sur une boîte d'alerte comme celle-ci:

page.driver.browser.switch_to.alert.accept
30
solnic

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
26
Jillian Foley
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.

20
B Seven

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

13
chrisvanhill

Pour WebKit:

page.accept_confirm { click_button "Upgrade" }

Pour le sélénium:

page.driver.browser.switch_to.alert.accept
11
HectorPerez

Je sais que c'est vieux mais cela fonctionne maintenant aussi dans poltergeist:

page.accept_alert
2
stujo