Cucumber + testing JS alert

2019-03-12 15:59发布

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?

5条回答
我命由我不由天
2楼-- · 2019-03-12 16:10

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

查看更多
Viruses.
3楼-- · 2019-03-12 16:22

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
查看更多
Deceive 欺骗
4楼-- · 2019-03-12 16:28

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.

查看更多
聊天终结者
5楼-- · 2019-03-12 16:32

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

查看更多
Fickle 薄情
6楼-- · 2019-03-12 16:32

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.

查看更多
登录 后发表回答