Skip to content

Instantly share code, notes, and snippets.

@mikepack
Created March 20, 2013 20:04
Show Gist options
  • Save mikepack/5207962 to your computer and use it in GitHub Desktop.
Save mikepack/5207962 to your computer and use it in GitHub Desktop.
This is a comparision of handling JavaScript alert/confirm/prompt notifications with Capybara.
This is a comparision of handling JavaScript alert/confirm/prompt notifications with Capybara.
Proposed consolidated API in Capybara:
There are two styles of notification handling: proactive or reactive.
- Proactive is used in headless environments to queue up responses.
- Reactive is used in environments with actual notifications that mandate a response (eg selenium).
alert - # Reactive
page.driver.accept_alert
# Shared
page.driver.alert_messages
confirm - # Proactive
page.driver.confirm_responses(true, false, true)
page.driver.accept_confirms
page.driver.reject_confirms
# Reactive
page.driver.accept_confirm
page.driver.reject_confirm
# Shared
page.driver.confirm_messages
prompt - # Proactive
page.driver.prompt_responses('One', 'Two')
page.driver.accept_prompts
page.driver.reject_prompts
# Reactive
page.driver.respond_to_prompt('One')
page.driver.accept_prompt
page.driver.reject_prompt
# Shared
page.driver.prompt_messages
Rack::Test
alert - not supported
confirm - not supported
prompt - not supported
Selenium
alert - page.driver.browser.switch_to.alert.accept
confirm - confirm = page.driver.browser.switch_to.alert
confirm.accept
confirm.dismiss
prompt - prompt = page.driver.browser.switch_to.alert
prompt.send_keys('My Response')
prompt.accept
capybara-webkit
alert - page.driver.alert_messages
page.driver.browser.alert_messages
confirm - page.driver.confirm_messages
page.driver.browser.confirm_messages
* page.driver.accept_js_confirms!
* page.driver.browser.accept_js_confirms
* page.driver.dismiss_js_confirms!
* page.driver.browser.reject_js_confirms
prompt - page.driver.prompt_messages
page.driver.browser.prompt_messages
Accepting/Dismissing the prompt
- By the nature of prompts, accepting is the same as clicking
OK without filling out a response.
---------------------------------------------------------
* page.driver.accept_js_prompts!
* page.driver.browser.accept_js_prompts
* page.driver.dismiss_js_prompts!
* page.driver.browser.reject_js_prompts
Setting the prompt
---------------------------------------------------------
* page.driver.js_prompt_input = 'My Response'
* page.driver.accept_js_prompts!
* page.driver.browser.set_prompt_text_to('My Response')
* page.driver.browser.accept_js_prompts
Clearing the prompt
- Unnecessary, can be accomplished with:
page.driver.js_prompt_input = ''
---------------------------------------------------------
* page.driver.js_prompt_input = nil
* page.driver.accept_js_prompts!
* page.driver.browser.clear_prompt_text
* page.driver.browser.accept_js_prompts
potergeist
This API is in proposition.
alert - page.driver.js_alert_messages
page.driver.browser.js_alert_messages
confirm - page.driver.js_confirm_messages
page.driver.browser.js_confirm_messages
page.driver.js_confirm_set_responses(true, false, true)
page.driver.browser.js_confirm_responses([true, false, true])
prompt - page.driver.js_prompt_messages
page.driver.browser.js_prompt_messages
page.driver.js_prompt_set_responses('My Response', 'Another Response')
page.driver.browser.js_prompt_responses(['My Response', 'Another Response'])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment