Rspec + Capybara: как нажать на поле оповещения

Я прошел через почту capybara + щелчок на окне предупреждения, но ничего не работает. Ниже приведен мой сценарий:

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

  • Я пишу спецификации запросов, то есть используя 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
    

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

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

  • Для второго примера i.e.

    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:: Ошибка:: UnhandledError:

Пожалуйста, дайте мне знать, как продолжить дальше

Ответ 1

Вы можете щелкнуть мышью на окне предупреждения следующим образом:

page.driver.browser.switch_to.alert.accept

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

page.accept_alert

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

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

Ответ 5

Для WebKit:

page.accept_confirm { click_button "Upgrade" }

Для селена:

page.driver.browser.switch_to.alert.accept

Ответ 6

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

page.accept_alert