How do I confirm a javascript popup with Capybara?

2019-01-21 16:00发布

I've tried several examples found online, but with no luck. I am looking to confirm the confirm message of a delete link. The last attempt was the code below, but that resulted in an Capybara::NotSupportedByDriverError error.

def confirm_dialog
  page.evaluate_script('window.confirm = function() { return true; }')
end

8条回答
Deceive 欺骗
2楼-- · 2019-01-21 16:08

Adding an answer for those hitting this in 2016 and beyond. You can now use Capybara directly to accept a confirmation box. You do this by wrapping the code that cause the confirmation box to appear in the accept_confirm function.

accept_confirm do
  click_link 'Destroy'
end
查看更多
We Are One
3楼-- · 2019-01-21 16:11

try to add :js => true to your test.

RSpec’s metadata feature can be used to switch to a different driver. Use :js => true to switch to the javascript driver, or provide a :driver option to switch to one specific driver. For example:

it 'will use the default js driver' :js => true do
  ...
end
查看更多
姐就是有狂的资本
4楼-- · 2019-01-21 16:19

for capybara-webkit:

page.driver.browser.accept_js_confirms
page.driver.browser.reject_js_confirms

which is still working, but the documentation says also:

page.driver.accept_js_confirms!
page.driver.accept_js_confirms!

See https://github.com/thoughtbot/capybara-webkit , search "accept_js_confirms"

查看更多
Viruses.
5楼-- · 2019-01-21 16:19

I had to use a sleep in the webkit test since it would fail everynow and then otherwise.

Here is what I came up with after reading everyones posts:

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
查看更多
ら.Afraid
6楼-- · 2019-01-21 16:25

In Capybara its very simple to accept the model window. Even we can do the same in selenium but its little tough for people who are not aware about selenium.

page.accept_modal #This will accept the modal window

page.dismiss_modal #This will Reject/Dismiss the modal window

查看更多
ゆ 、 Hurt°
7楼-- · 2019-01-21 16:26

I would guess that you have to add selenium to your gem-file and configure it and capybara that capybara uses selenium as the driver.

I think also that How to test a confirm dialog with Cucumber? is very similar to your question, especially the accepted answer.

查看更多
登录 后发表回答