views:

963

answers:

4

Hi,

I'm trying to test a JS confirmation dialog with Cucumber on Rails. I have a window.onbeforeunload event handler that will prompt you with a confirmation dialog if you try to navigate away from the page but I have no idea how to test it, anyone have an idea on how this can be done?

A: 

You can use Webrat or Selenium with Cucumber to test this.

My guess is that you want Simulated Browser or Automated Browser testing,

You can use Webrat or Webrat::Selenium or simply Selenium with Cucumber in such cases.

I have tested this using Selenium and Cucumber before, but can't seem to find the code, will edit the post it if i do.

HTH

Rishav Rastogi
A: 

I would recommend using screw-unit for testing javascript behavior on a page. You can also take a look at Relevance's blue-ridge plugin which incorporates screw-unit and adds support for command line and in browser js testing. You can find it on github under relevance/blue-ridge. (I don't have the rep yet to post more than one link :(

It would be an interesting exercise to use screw-unit and/or blue-ridge to drive cucumber tests, and probably not that hard to pull off.

Jeff Whitmire
+3  A: 

There are various functions of selenium you can use to capture alerts/confirms. They are not directly available with the webrat selenium implementation, but when using webrat's config.mode = :selenium they can be used as follows:

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();

There are probably not the greatest tests, but gives you an idea. Internally selenium overrides the alert() and confirm() functions of JS so it can captures this information.

You can find more docs on the selenium faq or on your gem server

Rob
+1  A: 

See the method definitions in http://selenium-client.rubyforge.org/classes/Selenium/Client/Idiomatic.html

You can invoke them with the selenium helper object in your Cucumber step definitions -- e.g.,

Then /^I should see a JS confirm dialog saying "([^\"]*)"$/ do |statement|    
  selenium.confirmation.should eql(statement)                               
end
Brian Noguchi