Rspec + Capybara : How to click on alert box
I have gone through the post of capybara + click on alert box but nothing seems to be work. Following is my scenario:
Scenario: When I click update button An alert box appears which contains "OK" and "Cancel" button. Click on "Ok" then new form appears.
I am writing request specs i.e. using rspec and capybara. Main problem is to click on the alert box: Following is my code:
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
But executing script gives me following error:
Failure/Error: page.evaluate_script('data-confirm = function() { return true; }') Selenium::WebDriver::Error::UnexpectedJavascriptError: invalid assignment left-hand side # ./spec/requests/user_upgrades_spec.rb:30
For the second example i.e.
page.driver.browser.switch_to.alert.accept
My code :
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_开发者_C百科to.alert.accept end end
I get error:
Failure/Error: page.driver.browser.switch_to.alert.accept Selenium::WebDriver::Error::UnhandledError:
Please let me know how to proceed further
You can click on an alert box like this:
page.driver.browser.switch_to.alert.accept
Updated answer here, since the options above seem to have all been deprecated.
Capybara::Session#accept_alert seems to be the best way to accomplish this now, where the action that will trigger the alert should be passed in a block. http://www.rubydoc.info/github/jnicklas/capybara/Capybara/Session:accept_alert
e.g.:
page.accept_alert 'Alert text here' do
click_button('Search')
end
page.accept_alert
worked for me using Selenium. Other drivers will probably have their own syntax.
As Jillian Foley mentioned, it seems that other answers have been deprecated.
For WebKit:
page.accept_confirm { click_button "Upgrade" }
For Selenium:
page.driver.browser.switch_to.alert.accept
Try this line if you want to click on the ok button of the alert box:
page.evaluate_script('window.confirm = function() { return true; }')
Don't forget to mark your test with the javascript flag
it "update user to trainer", js: true do
...
end
and enable Capybara.javascript_driver with :webkit or :selenium in your spec_helper file
I know this is old but this now works in poltergeist too:
page.accept_alert
精彩评论