jarib-celerity 0.0.6.18 → 0.0.6.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Manifest.txt ADDED
@@ -0,0 +1,82 @@
1
+ History.txt
2
+ License.txt
3
+ Manifest.txt
4
+ README.rdoc
5
+ Rakefile
6
+ celerity.gemspec
7
+ lib/celerity.rb
8
+ lib/celerity/browser.rb
9
+ lib/celerity/clickable_element.rb
10
+ lib/celerity/collections.rb
11
+ lib/celerity/container.rb
12
+ lib/celerity/default_viewer.rb
13
+ lib/celerity/disabled_element.rb
14
+ lib/celerity/element.rb
15
+ lib/celerity/element_collection.rb
16
+ lib/celerity/element_locator.rb
17
+ lib/celerity/elements/button.rb
18
+ lib/celerity/elements/file_field.rb
19
+ lib/celerity/elements/form.rb
20
+ lib/celerity/elements/frame.rb
21
+ lib/celerity/elements/image.rb
22
+ lib/celerity/elements/label.rb
23
+ lib/celerity/elements/link.rb
24
+ lib/celerity/elements/meta.rb
25
+ lib/celerity/elements/non_control_elements.rb
26
+ lib/celerity/elements/option.rb
27
+ lib/celerity/elements/radio_check.rb
28
+ lib/celerity/elements/select_list.rb
29
+ lib/celerity/elements/table.rb
30
+ lib/celerity/elements/table_cell.rb
31
+ lib/celerity/elements/table_elements.rb
32
+ lib/celerity/elements/table_row.rb
33
+ lib/celerity/elements/text_field.rb
34
+ lib/celerity/exception.rb
35
+ lib/celerity/htmlunit.rb
36
+ lib/celerity/htmlunit/commons-codec-1.4.jar
37
+ lib/celerity/htmlunit/commons-collections-3.2.1.jar
38
+ lib/celerity/htmlunit/commons-httpclient-3.1.jar
39
+ lib/celerity/htmlunit/commons-io-1.4.jar
40
+ lib/celerity/htmlunit/commons-lang-2.4.jar
41
+ lib/celerity/htmlunit/commons-logging-1.1.1.jar
42
+ lib/celerity/htmlunit/cssparser-0.9.5.jar
43
+ lib/celerity/htmlunit/htmlunit-2.6-SNAPSHOT.jar
44
+ lib/celerity/htmlunit/htmlunit-core-js-2.6-SNAPSHOT.jar
45
+ lib/celerity/htmlunit/nekohtml-1.9.13-20090820.100833-15.jar
46
+ lib/celerity/htmlunit/sac-1.3.jar
47
+ lib/celerity/htmlunit/serializer-2.7.1.jar
48
+ lib/celerity/htmlunit/xalan-2.7.1.jar
49
+ lib/celerity/htmlunit/xercesImpl-2.9.1.jar
50
+ lib/celerity/htmlunit/xml-apis-1.3.04.jar
51
+ lib/celerity/identifier.rb
52
+ lib/celerity/ignoring_web_connection.rb
53
+ lib/celerity/input_element.rb
54
+ lib/celerity/listener.rb
55
+ lib/celerity/resources/no_viewer.png
56
+ lib/celerity/short_inspect.rb
57
+ lib/celerity/util.rb
58
+ lib/celerity/version.rb
59
+ lib/celerity/viewer_connection.rb
60
+ lib/celerity/watir_compatibility.rb
61
+ lib/celerity/xpath_support.rb
62
+ spec/browser_authentication_spec.rb
63
+ spec/browser_spec.rb
64
+ spec/clickable_element_spec.rb
65
+ spec/default_viewer_spec.rb
66
+ spec/element_spec.rb
67
+ spec/filefield_spec.rb
68
+ spec/htmlunit_spec.rb
69
+ spec/index_offset_spec.rb
70
+ spec/listener_spec.rb
71
+ spec/spec_helper.rb
72
+ tasks/benchmark.rake
73
+ tasks/deployment.rake
74
+ tasks/environment.rake
75
+ tasks/fix.rake
76
+ tasks/jar.rake
77
+ tasks/rdoc.rake
78
+ tasks/rspec.rake
79
+ tasks/simple_ci.rake
80
+ tasks/snapshot.rake
81
+ tasks/website.rake
82
+ tasks/yard.rake
@@ -1,17 +1,16 @@
1
- Celerity
2
- ========
1
+ = Celerity
3
2
 
4
- * [http://celerity.rubyforge.org/](http://celerity.rubyforge.org/)
3
+ * http://celerity.rubyforge.org/
5
4
 
6
- Description
7
- ------------
5
+ == Description
8
6
 
9
- Celerity is a JRuby wrapper around HtmlUnit a headless Java browser with
7
+ Celerity is a JRuby library for easy and fast functional test automation for web applications.
8
+
9
+ It is a JRuby wrapper around HtmlUnit – a headless Java browser with
10
10
  JavaScript support. It provides a simple API for programmatic navigation through
11
11
  web applications. Celerity aims at being API compatible with Watir.
12
12
 
13
- Features
14
- --------
13
+ == Features
15
14
 
16
15
  * *Fast*: No time-consuming GUI rendering or unessential downloads
17
16
  * *Scalable*: Java threads lets you run tests in parallel
@@ -19,24 +18,21 @@ Features
19
18
  * *Portable*: Cross-platform thanks to the JVM
20
19
  * *Unintrusive*: No browser window interrupting your workflow (runs in background)
21
20
 
22
- Requirements
23
- ------------
21
+ == Requirements
24
22
 
25
23
  * JRuby 1.2.0 or higher
26
24
  * Java 6
27
25
 
28
- Install
29
- -------
26
+ == Install
30
27
 
31
- `jruby -S gem install celerity`
28
+ jruby -S gem install celerity
32
29
 
33
- or from GitHub (updated frequently)
30
+ or from GitHub (updated frequently)
34
31
 
35
- `jruby -S gem install jarib-celerity`
32
+ jruby -S gem install jarib-celerity
36
33
 
37
34
 
38
- Example
39
- -------
35
+ == Example
40
36
 
41
37
  require "rubygems"
42
38
  require "celerity"
@@ -48,26 +44,22 @@ Example
48
44
 
49
45
  puts "yay" if browser.text.include? 'celerity.rubyforge.org'
50
46
 
51
- Source
52
- ------
47
+ == Source
53
48
 
54
49
  The source code is available on [GitHub](http://github.com/jarib/celerity/tree/master).
55
50
 
56
51
 
57
- Wiki & Bug Tracker
58
- -------------------
52
+ == Wiki & Bug Tracker
59
53
 
60
54
  * [Wiki](http://github.com/jarib/celerity/wikis)
61
55
  * [Bug Tracker](http://github.com/jarib/celerity/issues)
62
56
 
63
- Related projects
64
- ----------------
57
+ == Related projects
65
58
 
66
59
  * [WatirSpec](http://github.com/jarib/watirspec/tree/master)
67
60
  * [Celerity Viewers](http://github.com/jarib/celerity-viewers)
68
61
 
69
- License
70
- -------
62
+ == License
71
63
 
72
64
  Celerity - JRuby wrapper for HtmlUnit
73
65
  Copyright (c) 2008 FINN.no AS
data/Rakefile CHANGED
@@ -1,12 +1,27 @@
1
- $:.unshift("#{File.dirname(__FILE__)}/lib")
2
-
3
- if File.exist?('config') # are we in a git clone
4
- require 'config/requirements'
5
- require 'config/hoe' # setup Hoe + all gem configuration
6
- Dir['tasks/**/*.rake'].each { |rake| load rake }
7
- else # in gem dir
8
- load 'tasks/jar.rake'
9
- load 'tasks/rdoc.rake'
10
- end
1
+ require 'rubygems'
2
+ gem 'hoe', '>= 2.3.0'
3
+ require 'hoe'
4
+ %w[fileutils rubigen].each { |f| require f }
5
+
6
+ require "lib/celerity/version"
11
7
 
8
+ Hoe.plugin :newgem # newgem 1.5.2+
9
+ Hoe.plugin :website
12
10
 
11
+ # Generate all the Rake tasks
12
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
13
+ Hoe.spec 'celerity' do
14
+ author << "Jari Bakken" << "T. Alexander Lystad" << "Knut Johannes Dahle"
15
+ email << "jari.bakken@finn.no"
16
+ extra_dev_deps << ['sinatra', '>= 0.9.4']
17
+ version = Celerity::VERSION
18
+ end
19
+
20
+ Dir['tasks/**/*.rake'].each do |rake|
21
+ begin
22
+ load rake
23
+ rescue LoadError
24
+ end
25
+ end
26
+ # load 'tasks/jar.rake'
27
+ # load 'tasks/rdoc.rake'
data/celerity.gemspec ADDED
@@ -0,0 +1,40 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{celerity}
5
+ s.version = "0.0.6.19"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Jari Bakken", "T. Alexander Lystad", "Knut Johannes Dahle"]
9
+ s.date = %q{2009-09-04}
10
+ s.description = %q{Celerity is a JRuby library for easy and fast functional test automation for web applications.
11
+
12
+ It is a JRuby wrapper around HtmlUnit – a headless Java browser with
13
+ JavaScript support. It provides a simple API for programmatic navigation through
14
+ web applications. Celerity aims at being API compatible with Watir.}
15
+ s.email = ["jari.bakken@finn.no"]
16
+ s.extra_rdoc_files = ["History.txt", "License.txt", "Manifest.txt"]
17
+ s.files = ["History.txt", "License.txt", "Manifest.txt", "README.rdoc", "Rakefile", "celerity.gemspec", "lib/celerity.rb", "lib/celerity/browser.rb", "lib/celerity/clickable_element.rb", "lib/celerity/collections.rb", "lib/celerity/container.rb", "lib/celerity/default_viewer.rb", "lib/celerity/disabled_element.rb", "lib/celerity/element.rb", "lib/celerity/element_collection.rb", "lib/celerity/element_locator.rb", "lib/celerity/elements/button.rb", "lib/celerity/elements/file_field.rb", "lib/celerity/elements/form.rb", "lib/celerity/elements/frame.rb", "lib/celerity/elements/image.rb", "lib/celerity/elements/label.rb", "lib/celerity/elements/link.rb", "lib/celerity/elements/meta.rb", "lib/celerity/elements/non_control_elements.rb", "lib/celerity/elements/option.rb", "lib/celerity/elements/radio_check.rb", "lib/celerity/elements/select_list.rb", "lib/celerity/elements/table.rb", "lib/celerity/elements/table_cell.rb", "lib/celerity/elements/table_elements.rb", "lib/celerity/elements/table_row.rb", "lib/celerity/elements/text_field.rb", "lib/celerity/exception.rb", "lib/celerity/htmlunit.rb", "lib/celerity/htmlunit/commons-codec-1.4.jar", "lib/celerity/htmlunit/commons-collections-3.2.1.jar", "lib/celerity/htmlunit/commons-httpclient-3.1.jar", "lib/celerity/htmlunit/commons-io-1.4.jar", "lib/celerity/htmlunit/commons-lang-2.4.jar", "lib/celerity/htmlunit/commons-logging-1.1.1.jar", "lib/celerity/htmlunit/cssparser-0.9.5.jar", "lib/celerity/htmlunit/htmlunit-2.6-SNAPSHOT.jar", "lib/celerity/htmlunit/htmlunit-core-js-2.6-SNAPSHOT.jar", "lib/celerity/htmlunit/nekohtml-1.9.13-20090820.100833-15.jar", "lib/celerity/htmlunit/sac-1.3.jar", "lib/celerity/htmlunit/serializer-2.7.1.jar", "lib/celerity/htmlunit/xalan-2.7.1.jar", "lib/celerity/htmlunit/xercesImpl-2.9.1.jar", "lib/celerity/htmlunit/xml-apis-1.3.04.jar", "lib/celerity/identifier.rb", "lib/celerity/ignoring_web_connection.rb", "lib/celerity/input_element.rb", "lib/celerity/listener.rb", "lib/celerity/resources/no_viewer.png", "lib/celerity/short_inspect.rb", "lib/celerity/util.rb", "lib/celerity/version.rb", "lib/celerity/viewer_connection.rb", "lib/celerity/watir_compatibility.rb", "lib/celerity/xpath_support.rb", "spec/browser_authentication_spec.rb", "spec/browser_spec.rb", "spec/clickable_element_spec.rb", "spec/default_viewer_spec.rb", "spec/element_spec.rb", "spec/filefield_spec.rb", "spec/htmlunit_spec.rb", "spec/index_offset_spec.rb", "spec/listener_spec.rb", "spec/spec_helper.rb", "tasks/benchmark.rake", "tasks/deployment.rake", "tasks/environment.rake", "tasks/fix.rake", "tasks/jar.rake", "tasks/rdoc.rake", "tasks/rspec.rake", "tasks/simple_ci.rake", "tasks/snapshot.rake", "tasks/website.rake", "tasks/yard.rake"]
18
+ s.homepage = %q{http://celerity.rubyforge.org/}
19
+ s.rdoc_options = ["--main", "README.rdoc"]
20
+ s.require_paths = ["lib"]
21
+ s.rubyforge_project = %q{celerity}
22
+ s.rubygems_version = %q{1.3.5}
23
+ s.summary = %q{Celerity is a JRuby library for easy and fast functional test automation for web applications}
24
+
25
+ if s.respond_to? :specification_version then
26
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
27
+ s.specification_version = 3
28
+
29
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
30
+ s.add_development_dependency(%q<sinatra>, [">= 0.9.4"])
31
+ s.add_development_dependency(%q<hoe>, [">= 2.3.3"])
32
+ else
33
+ s.add_dependency(%q<sinatra>, [">= 0.9.4"])
34
+ s.add_dependency(%q<hoe>, [">= 2.3.3"])
35
+ end
36
+ else
37
+ s.add_dependency(%q<sinatra>, [">= 0.9.4"])
38
+ s.add_dependency(%q<hoe>, [">= 2.3.3"])
39
+ end
40
+ end
data/lib/celerity.rb CHANGED
@@ -32,8 +32,8 @@ module Celerity
32
32
  DIR = File.expand_path(File.dirname(__FILE__) + "/celerity")
33
33
  end
34
34
 
35
- require "celerity/htmlunit"
36
35
  require "celerity/version"
36
+ require "celerity/htmlunit"
37
37
  require "celerity/exception"
38
38
  require "celerity/clickable_element"
39
39
  require "celerity/disabled_element"
@@ -520,6 +520,10 @@ module Celerity
520
520
  listener.add_listener(type, &block)
521
521
  end
522
522
 
523
+ def remove_listener(type, &block)
524
+ listener.remove_listener(type, &block)
525
+ end
526
+
523
527
  #
524
528
  # Specify a boolean value to click either 'OK' or 'Cancel' in any confirm
525
529
  # dialogs that might show up during the duration of the given block.
@@ -3,6 +3,13 @@ module Celerity
3
3
  Jars.each { |jar| require(jar) }
4
4
 
5
5
  include_class org.apache.commons.httpclient.Cookie
6
+
7
+ module JsxHelper
8
+ def method_missing(meth, *args, &blk)
9
+ m = ["jsxGet_#{meth}", "jsx_get_#{meth}"].find { |m| respond_to?(m) }
10
+ m ? __send__(m) : super
11
+ end
12
+ end
6
13
  end
7
14
 
8
15
  module HtmlUnit
@@ -50,12 +57,9 @@ class Java::ComGargoylesoftwareHtmlunitHtml::HtmlElement
50
57
  end
51
58
 
52
59
  class Java::ComGargoylesoftwareHtmlunitJavascriptHostHtml::HTMLElement
53
- def method_missing(meth, *args, &blk)
54
- m = ["jsxGet_#{meth}", "jsx_get_#{meth}"].find { |m| respond_to?(m) }
55
- if m
56
- __send__ m
57
- else
58
- super
59
- end
60
- end
60
+ include Celerity::JsxHelper
61
+ end
62
+
63
+ class Java::ComGargoylesoftwareHtmlunitJavascriptHostCss::CSSStyleDeclaration
64
+ include Celerity::JsxHelper
61
65
  end
@@ -1,10 +1,3 @@
1
- module Celerity #:nodoc:
2
- module VERSION #:nodoc:
3
- MAJOR = 0
4
- MINOR = 0
5
- TINY = 6
6
- PATCH = 18 # Set to nil for official release
7
-
8
- STRING = [MAJOR, MINOR, TINY, PATCH].compact.join('.')
9
- end
10
- end
1
+ module Celerity
2
+ VERSION = "0.0.6.19"
3
+ end
@@ -0,0 +1,16 @@
1
+ require File.dirname(__FILE__) + '/watirspec/spec_helper'
2
+
3
+ describe "Browser" do
4
+
5
+ describe "#credentials=" do
6
+ it "sets the basic authentication credentials" do
7
+ browser.goto(WatirSpec.host + "/authentication")
8
+ browser.text.should_not include("ok")
9
+
10
+ browser.credentials = "foo:bar"
11
+
12
+ browser.goto(WatirSpec.host + "/authentication")
13
+ browser.text.should include("ok")
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,300 @@
1
+ require File.dirname(__FILE__) + '/watirspec/spec_helper'
2
+
3
+ describe "Browser" do
4
+ describe "#new" do
5
+ it "raises TypeError if argument is not a Hash" do
6
+ lambda { Browser.new(:foo) }.should raise_error(TypeError)
7
+ end
8
+
9
+ it "raises ArgumentError if given bad arguments for :render key" do
10
+ lambda { Browser.new(:render => :foo) }.should raise_error(ArgumentError)
11
+ end
12
+
13
+ it "raises ArgumentError if given bad arguments for :browser key" do
14
+ lambda { Browser.new(:browser => 'foo') }.should raise_error(ArgumentError)
15
+ end
16
+
17
+ it "raises ArgumentError if given an unknown option" do
18
+ lambda { Browser.new(:foo => 1) }.should raise_error(ArgumentError)
19
+ end
20
+
21
+ it "should hold the init options" do
22
+ browser.options.should == WatirSpec.browser_args.first
23
+ end
24
+
25
+ it "should use the specified proxy" do
26
+ # TODO: find a better way to test this with rack
27
+ require 'webrick/httpproxy'
28
+
29
+ received = false
30
+ blk = lambda { received = true }
31
+ s = WEBrick::HTTPProxyServer.new(:Port => 2001, :ProxyContentHandler => blk)
32
+ Thread.new { s.start }
33
+
34
+ b = Browser.new(WatirSpec.browser_args.first.merge(:proxy => "localhost:2001"))
35
+ b.goto(WatirSpec.host)
36
+ s.shutdown
37
+
38
+ received.should be_true
39
+ end
40
+
41
+ it "should use the specified user agent" do
42
+ b = Browser.new(WatirSpec.browser_args.first.merge(:user_agent => "Celerity"))
43
+ b.goto(WatirSpec.host + "/header_echo")
44
+ b.text.should include('"HTTP_USER_AGENT"=>"Celerity"')
45
+ b.close
46
+ end
47
+
48
+ it "does not try to find a viewer if created with :viewer => false" do
49
+ ViewerConnection.should_not_receive(:create)
50
+
51
+ b = Browser.new(:viewer => false)
52
+ b.close
53
+ end
54
+
55
+ it "tries to find a viewer if created with :viewer => nil" do
56
+ ViewerConnection.should_receive(:create).with("127.0.0.1", 6429)
57
+
58
+ b = Browser.new(:viewer => nil)
59
+ b.close
60
+ end
61
+
62
+ it "tries to find a viewer on the specified host/port with :viewer => String" do
63
+ ViewerConnection.should_receive(:create).with("localhost", 1234)
64
+
65
+ b = Browser.new(:viewer => "localhost:1234")
66
+ b.close
67
+ end
68
+ end
69
+
70
+ describe "#html" do
71
+ %w(shift_jis iso-2022-jp euc-jp).each do |charset|
72
+ it "returns decoded #{charset.upcase} when :charset specified" do
73
+ browser = Browser.new(WatirSpec.browser_args.first.merge(:charset => charset.upcase))
74
+ browser.goto(WatirSpec.files + "/#{charset}_text.html")
75
+ # Browser#text is automagically transcoded into the right charset, but Browser#html isn't.
76
+ browser.html.should =~ /本日は晴天なり。/
77
+ browser.close
78
+ end
79
+ end
80
+ end
81
+
82
+ describe "#response_headers" do
83
+ it "returns the response headers (as a hash)" do
84
+ browser.goto(WatirSpec.host + "/non_control_elements.html")
85
+ browser.response_headers.should be_kind_of(Hash)
86
+ browser.response_headers['Date'].should be_kind_of(String)
87
+ browser.response_headers['Content-Type'].should be_kind_of(String)
88
+ end
89
+ end
90
+
91
+ describe "#content_type" do
92
+ it "returns the content type" do
93
+ browser.goto(WatirSpec.host + "/non_control_elements.html")
94
+ browser.content_type.should =~ /\w+\/\w+/
95
+ end
96
+ end
97
+
98
+ describe "#io" do
99
+ it "returns the io object of the content" do
100
+ browser.goto(WatirSpec.files + "/non_control_elements.html")
101
+ browser.io.should be_kind_of(IO)
102
+ browser.io.read.should == File.read("#{WatirSpec.html}/non_control_elements.html")
103
+ end
104
+ end
105
+
106
+ describe "#goto" do
107
+ it "raises UnexpectedPageException if the content type is not understood" do
108
+ lambda { browser.goto(WatirSpec.host + "/octet_stream") }.should raise_error(UnexpectedPageException)
109
+ end
110
+ end
111
+
112
+ describe "#cookies" do
113
+ it "returns set cookies as a Ruby hash" do
114
+ cookies = browser.cookies
115
+ cookies.should be_instance_of(Hash)
116
+ cookies.should be_empty
117
+
118
+ browser.goto(WatirSpec.host + "/set_cookie")
119
+
120
+ cookies = browser.cookies
121
+ cookies.size.should == 1
122
+ cookies[WatirSpec::Server.host]['monster'].should == "/"
123
+ end
124
+ end
125
+
126
+ describe "#clear_cookies" do
127
+ it "clears all cookies" do
128
+ b = WatirSpec.new_browser
129
+ b.cookies.should be_empty
130
+
131
+ b.goto(WatirSpec.host + "/set_cookie")
132
+ b.cookies.size.should == 1
133
+ b.clear_cookies
134
+ b.cookies.should be_empty
135
+
136
+ b.close
137
+ end
138
+ end
139
+
140
+ describe "add_cookie" do
141
+ it "adds a cookie with the given domain, name and value" do
142
+ browser.add_cookie("example.com", "foo", "bar")
143
+ cookies = browser.cookies
144
+ cookies.should be_instance_of(Hash)
145
+ cookies.should have_key('example.com')
146
+ cookies['example.com']['foo'].should == 'bar'
147
+
148
+ browser.clear_cookies
149
+ end
150
+
151
+ it "adds a cookie with the specified options" do
152
+ browser.add_cookie("example.com", "foo", "bar", :path => "/foobar", :max_age => 1000)
153
+ cookies = browser.cookies
154
+ cookies.should be_instance_of(Hash)
155
+ cookies['example.com']['foo'].should == 'bar'
156
+ end
157
+ end
158
+
159
+ describe "remove_cookie" do
160
+ it "removes the cookie for the given domain and name" do
161
+ b = WatirSpec.new_browser
162
+ b.goto(WatirSpec.host + "/set_cookie")
163
+
164
+ b.remove_cookie(WatirSpec::Server.host, "monster")
165
+ b.cookies.should be_empty
166
+
167
+ b.close
168
+ end
169
+
170
+ it "raises an error if no such cookie exists" do
171
+ lambda { browser.remove_cookie("bogus.com", "bar") }.should raise_error(CookieNotFoundError)
172
+ end
173
+ end
174
+
175
+ describe "#wait" do
176
+ it "should wait for javascript timers to finish" do
177
+ alerts = 0
178
+ browser.add_listener(:alert) { alerts += 1 }
179
+ browser.goto(WatirSpec.files + "/timeout.html")
180
+ browser.div(:id, 'alert').click
181
+ browser.wait.should be_true
182
+ alerts.should == 1
183
+ end
184
+ end
185
+
186
+ describe "#wait_while" do
187
+ it "waits until the specified condition becomes false" do
188
+ browser.goto(WatirSpec.files + "/timeout.html")
189
+ browser.div(:id, "change").click
190
+ browser.wait_while { browser.contains_text("Trigger change") }
191
+ browser.div(:id, "change").text.should == "all done"
192
+ end
193
+
194
+ it "returns the value returned from the block" do
195
+ browser.wait_while { false }.should == false
196
+ end
197
+ end
198
+
199
+ describe "#wait_until" do
200
+ it "waits until the condition becomes true" do
201
+ browser.goto(WatirSpec.files + "/timeout.html")
202
+ browser.div(:id, "change").click
203
+ browser.wait_until { browser.contains_text("all done") }
204
+ end
205
+
206
+ it "returns the value returned from the block" do
207
+ browser.wait_until { true }.should == true
208
+ end
209
+ end
210
+
211
+ describe "#element_by_xpath" do
212
+ it "returns usable elements even though they're not supported" do
213
+ browser.goto(WatirSpec.files + "/forms_with_input_elements.html")
214
+
215
+ el = browser.element_by_xpath("//link")
216
+ el.should be_instance_of(Celerity::Element)
217
+ el.rel.should == "stylesheet"
218
+ end
219
+ end
220
+
221
+ describe "#focused_element" do
222
+ it "returns the element that currently has the focus" do
223
+ b = WatirSpec.new_browser
224
+ b.goto(WatirSpec.files + "/forms_with_input_elements.html")
225
+ b.focused_element.id.should == "new_user_first_name"
226
+
227
+ b.close
228
+ end
229
+ end
230
+
231
+ describe "#status_code" do
232
+ it "returns the status code of the last request" do
233
+ browser.goto(WatirSpec.files + "/forms_with_input_elements.html")
234
+ browser.status_code.should == 200
235
+
236
+ browser.goto(WatirSpec.host + "/doesnt_exist")
237
+ browser.status_code.should == 404
238
+ end
239
+ end
240
+
241
+ describe "#status_code_exceptions" do
242
+ it "raises status code exceptions if set to true" do
243
+ browser.status_code_exceptions = true
244
+ lambda do
245
+ browser.goto(WatirSpec.host + "/doesnt_exist")
246
+ end.should raise_error(NavigationException)
247
+ end
248
+ end
249
+
250
+ describe "#javascript_exceptions" do
251
+ it "raises javascript exceptions if set to true" do
252
+ browser.goto(WatirSpec.files + "/forms_with_input_elements.html")
253
+ browser.javascript_exceptions = true
254
+ lambda do
255
+ browser.execute_script("no_such_function()")
256
+ end.should raise_error
257
+ end
258
+ end
259
+
260
+ describe "#add_listener" do
261
+ it "should click OK for confirm() calls" do
262
+ browser.goto(WatirSpec.files + "/forms_with_input_elements.html")
263
+ browser.add_listener(:confirm) { }
264
+ browser.execute_script("confirm()").should == true
265
+ end
266
+ end
267
+
268
+ describe "#add_checker" do
269
+
270
+ # watir only supports a lambda instance as argument, celerity supports both
271
+ it "runs the given block on each page load" do
272
+ output = ''
273
+
274
+ browser.add_checker { |browser| output << browser.text }
275
+ browser.goto(WatirSpec.files + "/non_control_elements.html")
276
+
277
+ output.should include('Dubito, ergo cogito, ergo sum')
278
+ end
279
+ end
280
+
281
+
282
+ describe "#confirm" do
283
+ it "clicks 'OK' for a confirm() call" do
284
+ browser.goto(WatirSpec.files + "/forms_with_input_elements.html")
285
+
286
+ browser.confirm(true) do
287
+ browser.execute_script('confirm()').should be_true
288
+ end
289
+ end
290
+
291
+ it "clicks 'cancel' for a confirm() call" do
292
+ browser.goto(WatirSpec.files + "/forms_with_input_elements.html")
293
+
294
+ browser.confirm(false) do
295
+ browser.execute_script('confirm()').should be_false
296
+ end
297
+ end
298
+ end
299
+
300
+ end