ruby-on-rails - 如何告诉 capybara-webkit 不要忽略确认框(或者只是测试它们的内容)

标签 ruby-on-rails ruby-on-rails-3 cucumber capybara capybara-webkit

所以我有一个场景:

Given I signed in to my business account
And there is one customer named "Samantha Seeley"
When I go to the customers management page
Then "Delete" should show a confirmation dialog saying "Are you sure?"

链接很简单:

<%= link_to 'Delete' customer_path(customer), method: :delete, confirm: 'Are you sure?' do %>

所以当我在 Chrome 中点击链接时,这段代码确实会出现一个确认对话框,但是使用这样的页面渲染:

Then /^"(.*?)" should show a confirmation dialog saying "(.*?)"$/ do |arg1, arg2|
  click_on arg1
  page.driver.render "tmp/screenshot.jpg"
end

我相信我可以从屏幕截图中确认 javascript 似乎没有被评估(没有显示确认对话框)。不过这个假设可能是错误的,我不确定。

感谢您的帮助。

最佳答案

GitHub 上也提出了类似的问题:https://github.com/thoughtbot/capybara-webkit/issues/84

结论是使用类似这样的东西,这是由Jesse Cooke建议的和 Ken Collins :

def handle_js_confirm(accept=true)
  page.evaluate_script "window.original_confirm_function = window.confirm"
  page.evaluate_script "window.confirm = function(msg) { return #{!!accept}; }"
  yield
ensure
  page.evaluate_script "window.confirm = window.original_confirm_function"
end

这不会帮助您测试确认对话框的内容(尽管它可以很容易地扩展到这样做),但它可以让您测试当用户单击“确定”或“取消”时会发生什么。

在这种特定情况下,您需要一个确认对话框,因为您使用的是生成确认对话框的 Rails 助手。值得考虑这是否需要在您自己的应用程序中进行测试;已经有 tests in Rails to cover it .

关于ruby-on-rails - 如何告诉 capybara-webkit 不要忽略确认框(或者只是测试它们的内容),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10765045/

相关文章:

ruby-on-rails - Rails 3本地化路线并显示资源

ruby-on-rails-3 - 无法连接到 rails 3.2 中的两个 postgres 数据库。

ruby-on-rails - 使用 Cucumber 进行测试的 "strange"(可能是 "extreme"或 "crazy")方法

ruby-on-rails - Ruby on Rails 中的堆栈级别太深错误

ruby-on-rails - Elasticsearch 实现为微服务

ruby-on-rails - Webpacker 部署到生产环境时未为 Rails 5.2 中的某些应用程序创建 list

ruby-on-rails - 如何确保同一个作业不会同时运行两次?

ruby-on-rails - 如何在 Rails 中的 Web 请求中对长进程进行子线程化

Ruby Selenium Net::ReadTimeout

ruby-on-rails-3 - Cucumber+Capybara 中的语法错误