如何testing与黄瓜确认对话框?

我正在使用Ruby on Rails与黄瓜和水豚。

我将如何去testing一个简单的确认命令(“你确定吗?”)?

另外,我在哪里可以find关于这个问题的进一步文件?

似乎不幸的是,在水豚,没有办法做到这一点。 但是,如果您使用Selenium驱动程序(以及可能支持JavaScript的其他驱动程序)运行testing,则可以对其进行破解。 在执行可能会出现确认对话框的操作之前,请重写confirm方法以始终返回true。 这样,对话框将永远不会显示,并且您的testing可以继续,就好像用户按下了“确定”button一样。 如果您想模拟相反,只需将其更改为返回false。

 page.evaluate_script('window.confirm = function() { return true; }') page.click('Remove') 

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

从水豚你可以这样访问它:

 page.driver.browser.switch_to.alert.accept 

要么

 page.driver.browser.switch_to.alert.dismiss 

要么

  page.driver.browser.switch_to.alert.text 

我在/features/step_definitions/web_steps.rb实现了这两个Web步骤:

 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 

如果你想特别testing显示的信息,这是一个特别的方法。 我不认为它是美丽的代码,但它完成了工作。 您需要加载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 

和这些步骤

 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 

更新当前版本的水豚。 大多数水豚司机今天支持模式API。 要接受确认模式,你会这样做

 accept_confirm do # dismiss_confirm if not accepting click_link 'delete' # whatever action triggers the modal to appear end 

这可以用在黄瓜类似的东西

 When /^(?:|I )press "([^"]*)" and confirm "([^"]*)"$/ do |button, msg| accept_confirm msg do click_button(button) end end 

这将点击指定的button,然后接受与文本匹配味精确认框

水豚-webkit驱动程序也支持这一点。

 Scenario: Illustrate an example has dialog confirm with text # When I confirm the browser dialog with tile "Are you sure?" # ===================================================================== my step definition here: And(/^I confirm the browser dialog with title "([^"]*)"$/) do |title| if page.driver.class == Capybara::Selenium::Driver page.driver.browser.switch_to.alert.text.should eq(title) page.driver.browser.switch_to.alert.accept elsif page.driver.class == Capybara::Webkit::Driver sleep 1 # prevent test from failing by waiting for popup page.driver.browser.confirm_messages.should eq(title) page.driver.browser.accept_js_confirms else raise "Unsupported driver" end end 

Prickle增加了一些方便的方法来处理selenium和webkit中的popup窗口

这个要点有步骤来testing任何Capybara驱动程序在Rails 2和3 JS确认对话框。

这是以前答案的改编,但不需要jQuery Cookie插件。

试了上面的答案,没有运气。 最后这为我工作:

 @browser.alert.ok