如何使用Cucumber测试确认对话框?

Yuv*_*rmi 86 integration-testing automated-tests capybara

我正在使用带有Cucumber和Capybara的Ruby on Rails.

我将如何测试一个简单的确认命令("你确定吗?")?

另外,我在哪里可以找到有关此问题的进一步文档?

Der*_*ins 133

selenium驱动程序现在支持这一点

从Capybara你可以像这样访问它:

page.driver.browser.switch_to.alert.accept
Run Code Online (Sandbox Code Playgroud)

要么

page.driver.browser.switch_to.alert.dismiss
Run Code Online (Sandbox Code Playgroud)

要么

 page.driver.browser.switch_to.alert.text
Run Code Online (Sandbox Code Playgroud)

  • 对于其他任何人 - 请注意,Derek的答案确实有效,我发现官方Selenium文档中的代码没有(黄瓜/ Selenium).请注意Derek的答案中存在`page.driver.browser` (2认同)

The*_*heo 61

不幸的是,似乎在Capybara没有办法做到这一点.但是,如果您使用Selenium驱动程序(以及可能支持JavaScript的其他驱动程序)运行测试,则可以破解它.在执行将调出确认对话框的操作之前,覆盖该confirm方法以始终返回true.这样,对话框将永远不会显示,您的测试可以继续,就像用户按下OK按钮一样.如果要模拟反向,只需将其更改为false即可.

page.evaluate_script('window.confirm = function() { return true; }')
page.click('Remove')
Run Code Online (Sandbox Code Playgroud)


小智 39

我已经实现了以下两个网络步骤/features/step_definitions/web_steps.rb:

When /^I confirm popup$/ do
  page.driver.browser.switch_to.alert.accept    
end

When /^I dismiss popup$/ do
  page.driver.browser.switch_to.alert.dismiss
end
Run Code Online (Sandbox Code Playgroud)


Jon*_*ood 8

如果您想专门测试正在显示的消息,这是一种特别苛刻的方法.我并不赞同它是美丽的代码,但它完成了工作.您需要加载http://plugins.jquery.com/node/1386/release,或者如果您不想使用jQuery,则将其更改为本地执行cookie.

使用这种故事:

Given I am on the menu page for the current booking
And a confirmation box saying "The menu is £3.50 over budget. Click Ok to confirm anyway, or Cancel if you want to make changes." should pop up
And I want to click "Ok"
When I press "Confirm menu"
Then the confirmation box should have been displayed
Run Code Online (Sandbox Code Playgroud)

而这些步骤

Given /^a confirmation box saying "([^"]*)" should pop up$/ do |message|
  @expected_message = message
end

Given /^I want to click "([^"]*)"$/ do |option|
  retval = (option == "Ok") ? "true" : "false"

  page.evaluate_script("window.confirm = function (msg) {
    $.cookie('confirm_message', msg)
    return #{retval}
  }")
end

Then /^the confirmation box should have been displayed$/ do
  page.evaluate_script("$.cookie('confirm_message')").should_not be_nil
  page.evaluate_script("$.cookie('confirm_message')").should eq(@expected_message)
  page.evaluate_script("$.cookie('confirm_message', null)")
end
Run Code Online (Sandbox Code Playgroud)

  • 酷解!我把它翻了一下,对我来说感觉更自然:https://gist.github.com/727614 (2认同)