Как подтвердить всплывающее окно javascript с Capybara?
Я пробовал несколько примеров, найденных в Интернете, но не повезло. Я хочу подтвердить подтверждающее сообщение ссылки удаления. Последней попыткой был код ниже, но это привело к ошибке Capybara:: NotSupportedByDriverError.
def confirm_dialog
page.evaluate_script('window.confirm = function() { return true; }')
end
Ответы
Ответ 1
Прежде всего переключитесь на использование Selenium в качестве драйвера, поставив тег @javascript перед вашим сценарием.
Следующий код на шаге огурца затем подтвердит диалог:
page.driver.browser.switch_to.alert.accept
# or
page.driver.browser.switch_to.alert.dismiss
# or
page.driver.browser.switch_to.alert.text
Как сказал @NobbZ, этот вопрос был задан и ответил до этого: Как проверить диалог подтверждения с Cucumber?.
Также доступна дополнительная документация по селену: http://code.google.com/p/selenium/wiki/RubyBindings#JavaScript_dialogs
Ответ 2
Добавление ответа для тех, кто делает это в 2016 году и далее. Теперь вы можете использовать Capybara, чтобы принять поле подтверждения. Вы делаете это, обертывая код, который вызывает окно подтверждения, отображаемое в accept_confirm.
accept_confirm do
click_link 'Destroy'
end
Ответ 3
для capybara-webkit:
page.driver.browser.accept_js_confirms
page.driver.browser.reject_js_confirms
который все еще работает, но в документации также говорится:
page.driver.accept_js_confirms!
page.driver.accept_js_confirms!
См. https://github.com/thoughtbot/capybara-webkit, поиск "accept_js_confirms"
Ответ 4
Мне пришлось использовать спящий режим в тесте webkit, так как он терпел неудачу каждый, а затем в противном случае.
Вот что я придумал после чтения всяких сообщений:
if page.driver.class == Capybara::Selenium::Driver
page.driver.browser.switch_to.alert.accept
elsif page.driver.class == Capybara::Webkit::Driver
sleep 1 # prevent test from failing by waiting for popup
page.driver.browser.accept_js_confirms
else
raise "Unsupported driver"
end
Ответ 5
У меня были проблемы с синхронизацией с диалоговыми окнами браузера в среде CI, поэтому я должен опросить диалоговое окно, прежде чем принимать его:
def accept_browser_dialog
wait = Selenium::WebDriver::Wait.new(:timeout => 30)
wait.until {
begin
page.driver.browser.switch_to.alert
true
rescue Selenium::WebDriver::Error::NoAlertPresentError
false
end
}
page.driver.browser.switch_to.alert.accept
end
Ответ 6
Я бы предположил, что вы должны добавить selenium в свой gem файл и настроить его и capybara, что capybara использует селен в качестве драйвера.
Я также думаю, что Как проверить диалог подтверждения с Cucumber? очень похож на ваш вопрос, особенно принятый ответ.
Ответ 7
попробуйте добавить :js => true
к вашему тесту.
Функция метаданных RSpecs может использоваться для переключения на другой драйвер. Используйте: js = > true для переключения на драйвер javascript или: driver для переключения на один конкретный драйвер. Например:
it 'will use the default js driver' :js => true do
...
end
Ответ 8
В Capybara очень просто принять окно модели. Даже мы можем сделать то же самое в селене, но его немного сложно для людей, которые не знают о селене.
page.accept_modal # Это примет модальное окно
page.dismiss_modal # Это будет отклонять/отклонять модальное окно