Rails + Capybara:Selenium Driver的'意外警报打开'

iam*_*ake 13 selenium ruby-on-rails capybara ruby-on-rails-4

我使用Capybara和Chrome作为我的默认selenium浏览器.

测试:

it "is successful with deleting a user", js: true do
  visit '/users'
  expect(User.count).to eq(1)
  expect(user.email).to eq("ryan@drake.com")
  expect(page).to have_content("Manage Users")
  click_link 'Delete User'
  page.driver.browser.confirm.accept
  user.reload
  visit '/users'
  expect(User.count).to eq(0)
end
Run Code Online (Sandbox Code Playgroud)

我的测试得到了这个错误:

Failure/Error: visit '/users'
 Selenium::WebDriver::Error::UnhandledAlertError:
   unexpected alert open
Run Code Online (Sandbox Code Playgroud)

我在测试中尝试了以下内容:

page.driver.browser.switch_to.confirm
page.driver.browser.switch_to.accept
page.driver.browser.confirm.accept
Run Code Online (Sandbox Code Playgroud)

我应该尝试我的测试的任何其他变化?

Rob*_*ise 25

尝试包装将在accept_alert块内启动警报提示的代码,如下所示:

it "is successful with deleting a user", js: true do
  visit '/users'
  expect(User.count).to eq(1)
  expect(user.email).to eq("ryan@drake.com")
  expect(page).to have_content("Manage Users")

  # Change is here:
  accept_alert do
    click_link 'Delete User'
  end

  user.reload
  visit '/users'
  expect(User.count).to eq(0)
end
Run Code Online (Sandbox Code Playgroud)

我有点担心你在删除资源时想要使用警报而不是确认,但这取决于你.警报只会告诉您某些事情会发生,同时确认允许用户通过点击取消而不是OK来改变主意.如果使用确认模式而不是警报模态,则accept_alert需要将零件更改为accept_confirm.

查看模态文档rubydoc以获取更多信息.