我使用Capybara和Chrome作为默认的硒浏览器。

测试:

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


我在测试中遇到此错误:

Failure/Error: visit '/users'
 Selenium::WebDriver::Error::UnhandledAlertError:
   unexpected alert open


我在测试中尝试了以下方法:

page.driver.browser.switch_to.confirm
page.driver.browser.switch_to.accept
page.driver.browser.confirm.accept


我应该在测试中尝试其他任何变化吗?

最佳答案

尝试将将启动警报提示的代码包装在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


我有点担心,您在删除资源时想使用警报而不是确认,但这取决于您。警报只是告诉您即将发生的事情,与此同时,确认消息使用户可以通过单击“取消”而不是“确定”来改变主意。如果使用确认模式而不是警报模式,则需要将accept_alert部分更改为accept_confirm

查看the modal documentation rubydoc以获得更多信息。

10-06 12:50
查看更多