Как подтвердить всплывающее окно 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 # Это будет отклонять/отклонять модальное окно