【问题标题】:Rails + Capybara: 'Unexpected Alert Open' for Selenium DriverRails + Capybara:Selenium 驱动程序的“意外警报打开”
【发布时间】:2015-03-31 03:13:06
【问题描述】:

我使用 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

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

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

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 selenium capybara


    【解决方案1】:

    尝试将启动警报提示的代码封装在 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_alertpart 更改为 accept_confirm

    查看the modal documentation rubydoc 了解更多信息。

    【讨论】:

      【解决方案2】:

      我也遇到了同样的错误。

      查看rubydoc.info的capybara文档,发现以下方法可以解决问题:

      accept_confirm: "执行区块,接受确认。"

      dismiss_confirm: "执行区块,解除确认。"

      【讨论】:

        猜你喜欢
        • 2017-07-22
        • 2015-01-02
        • 1970-01-01
        • 1970-01-01
        • 2013-10-10
        • 2021-11-01
        • 1970-01-01
        • 2022-09-29
        相关资源
        最近更新 更多