Rspec + Capybara: как нажать на окно оповещения - PullRequest
37 голосов
/ 03 августа 2011

Я прошел пост Капибара + нажмите на окно оповещения, но ничего не работает.Вот мой сценарий:

Сценарий : Когда я нажимаю кнопку обновления, появляется окно с предупреждением, содержащее кнопки «ОК» и «Отмена».Нажмите «ОК», после чего появится новая форма.

  1. Я пишу спецификации запроса, т.е. использую rspec и capybara.Основная проблема состоит в том, чтобы нажать на окно предупреждения: Ниже приведен мой код:

     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
    

    Но выполнение скрипта выдает мне следующую ошибку:

    Ошибка / Ошибка: page.evaluate_script ('data-verify = function () {return true;} ') Selenium :: WebDriver :: Error :: UnexpectedJavascriptError: неверное назначение левой стороны # ./spec/requests/user_upgrades_spec.rb:30

  2. Для второго примера, например

    page.driver.browser.switch_to.alert.accept

    Мой код:

     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 
    

Я получаю сообщение об ошибке:

Сбой / Ошибка: page.driver.browser.switch_to.alert.accept Selenium :: WebDriver :: Error :: UnhandledError:

Пожалуйста, дайте мне знать, что делать дальше

Ответы [ 6 ]

29 голосов
/ 03 августа 2011

Вы можете нажать на окно предупреждения, как это:

page.driver.browser.switch_to.alert.accept
25 голосов
/ 20 октября 2014

Обновленный ответ здесь, поскольку вышеприведенные параметры, похоже, устарели.

Capybara :: Session # accept_alert, кажется, лучший способ сделать это сейчас, когда действие, которое вызовет предупреждение, должно быть передано в блоке. http://www.rubydoc.info/github/jnicklas/capybara/Capybara/Session:accept_alert

например:.

page.accept_alert 'Alert text here' do
    click_button('Search')
end
19 голосов
/ 06 декабря 2014
page.accept_alert

работал для меня, используя Selenium. Другие драйверы, вероятно, будут иметь собственный синтаксис.

Как упоминала Джиллиан Фоли, другие ответы устарели.

13 голосов
/ 28 декабря 2011

Попробуйте эту строку, если вы хотите нажать на кнопку ОК в окне предупреждения:

page.evaluate_script('window.confirm = function() { return true; }')

Не забудьте пометить ваш тест флагом javascript

it "update user to trainer", js: true do
    ...
end

и включите Capybara.javascript_driver с помощью: webkit или: selenium в вашем файле spec_helper

10 голосов
/ 03 ноября 2015

Для WebKit:

page.accept_confirm { click_button "Upgrade" }

Для Selenium:

page.driver.browser.switch_to.alert.accept
2 голосов
/ 13 июня 2017

Я знаю, что это старо, но теперь оно работает и в полтергейсте:

page.accept_alert
...