jarib-celerity 0.0.6.18 → 0.0.6.19

Sign up to get free protection for your applications and to get access to all the features.
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