在capybara webkit驱动程序中的javascript确认对话框

时间:2014-02-06 01:14:44

标签: ruby-on-rails ruby rspec capybara capybara-webkit

所以我想测试用户使用capybara和rspec删除他们的帐户:

scenario "User wants to delete their account" do
  click_link "Account"
  click_link "Delete My Account"
  expect(page).to have_text("You're account was deleted.")
end

只有问题是当用户点击“删除我的帐户”时会出现js确认对话框。为确认此对话框,我执行了以下操作:

  1. 安装capybara-webkit
  2. Capybara.javascript_driver = :webkit添加到我的spec_helper.rb
  3. :js => true添加到scenario "User wants to delete their account" do
  4. 现在似乎无法添加:js => true。我收到错误Capybara::ElementNotFound: Unable to find link "Account",在它正常工作之前,js: true会干扰这些水豚方法吗?我的配置错了吗?

3 个答案:

答案 0 :(得分:0)

:js => true告诉Capybara将JavaScript驱动程序用于您的规范;需要运行必须执行JavaScript作为其功能的一部分的页面。在您的情况下,JS确认对话框将需要它。

但是......还有其他一些事情需要注意:

  1. 您的链接标题为“帐户”,您正在查找“帐户设置”。那是一个错字吗?
  2. 我认为您无法与vanilla浏览器确认对话框(即带有确认按钮的警报框)进行交互。我知道你在使用Poltergeist驱动程序时不能使用

答案 1 :(得分:0)

在点击“删除我的帐户”之前验证访问路径。

scenario "User wants to delete their account" do
  click_link "Account"
  expect(current_path).to eq '/my_accout'
  click_link "Delete My Account"
  expect(page).to have_text("You're account was deleted.")
end

答案 2 :(得分:-1)

重要的是,相关链接位于没有鼠标悬停事件时无法看到的下拉列表中。为了解决这个问题,我在点击链接之前用javascript打开了下拉列表。

page.execute_script('$(".dropdown-toggle").dropdown("toggle");')