Bart Jedrocha
Bart Jedrocha

Reputation: 11570

Cucumber + testing JS alert

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?

Upvotes: 15

Views: 4845

Answers (5)

Joel Cogen
Joel Cogen

Reputation: 488

This gist has steps to test a JS confirm dialog in Rails 2 and 3 with any Capybara driver, should be easy to adapt to an alert box.

Upvotes: 0

Brian Noguchi
Brian Noguchi

Reputation: 11

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

Upvotes: 1

Rob
Rob

Reputation: 7099

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

Upvotes: 6

Jeff Whitmire
Jeff Whitmire

Reputation: 770

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.

Upvotes: 0

Rishav Rastogi
Rishav Rastogi

Reputation: 15492

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

Upvotes: 0

Related Questions