我正在尝试使用 Cucumber on Rails 测试 JS 确认对话框。我有一个 window.onbeforeunload 事件处理程序,如果您尝试离开页面,它会提示您一个确认对话框,但我不知道如何测试它,有人知道如何做到这一点吗?
5 回答
您可以使用 selenium 的各种功能来捕获警报/确认。它们不能直接用于 webrat selenium 实现,但在使用 webrat 时,config.mode = :selenium
它们可以按如下方式使用:
Then /^I should see a JS alert$/ do
selenium.is_alert_present.should be_true
end
# or
Then /^I should see a "Are you sure?" JS confirm dialog$/ do
selenium.get_alert.should eql("Are you sure?")
end
# you can also click the OK/Cancel buttons on confirm boxes with
selenium.chooseOkOnNextConfirmation();
#and
selenium.chooseCancelOnNextConfirmation();
可能没有最好的测试,但会给你一个想法。selenium 在内部覆盖了 JS 的 alert() 和 confirm() 函数,因此它可以捕获此信息。
您可以在selenium 常见问题解答或 gem 服务器上找到更多文档
请参阅http://selenium-client.rubyforge.org/classes/Selenium/Client/Idiomatic.html中的方法定义
您可以在 Cucumber 步骤定义中使用 selenium 辅助对象调用它们——例如,
Then /^I should see a JS confirm dialog saying "([^\"]*)"$/ do |statement|
selenium.confirmation.should eql(statement)
end
您可以使用 Webrat 或 Selenium 和 Cucumber 来测试它。
我的猜测是你想要模拟浏览器或自动浏览器测试,
在这种情况下,您可以使用 Webrat 或 Webrat::Selenium 或简单地将 Selenium 与 Cucumber 一起使用。
我之前使用 Selenium 和 Cucumber 对此进行了测试,但似乎找不到代码,如果我这样做了,我会编辑它。
高温高压
我建议使用螺丝单元来测试页面上的 javascript 行为。您还可以查看 Relevance 的 blue-ridge 插件,它结合了螺丝单元并添加了对命令行和浏览器 js 测试的支持。您可以在 github 上的相关性/blue-ridge 下找到它。(我还没有代表发布多个链接 :(
使用螺旋单元和/或蓝脊驱动黄瓜测试将是一个有趣的练习,而且可能并不难实现。
这个要点包含使用任何 Capybara 驱动程序在 Rails 2 和 3 中测试 JS 确认对话框的步骤,应该很容易适应警报框。