commonwatir 1.6.2 → 1.6.5
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +5 -5
- data/Manifest.txt +14 -14
- data/README.txt +48 -48
- data/Rakefile +11 -9
- data/lib/commonwatir.rb +3 -0
- data/lib/watir/assertions.rb +44 -44
- data/lib/watir/browser.rb +149 -130
- data/lib/watir/browsers.rb +12 -12
- data/lib/watir/exceptions.rb +47 -47
- data/lib/watir/matches.rb +17 -17
- data/lib/watir/options.rb +52 -51
- data/lib/watir/testcase.rb +58 -58
- data/lib/watir/waiter.rb +91 -91
- data/lib/watir.rb +6 -6
- metadata +10 -8
- data/lib/watir-common.rb +0 -3
data/History.txt
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
=== 0.0.1 / 2008-08-28
|
2
|
-
|
3
|
-
* Created
|
4
|
-
|
5
|
-
|
1
|
+
=== 0.0.1 / 2008-08-28
|
2
|
+
|
3
|
+
* Created
|
4
|
+
|
5
|
+
|
data/Manifest.txt
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
History.txt
|
2
|
-
Manifest.txt
|
3
|
-
README.txt
|
4
|
-
Rakefile
|
5
|
-
lib/watir.rb
|
6
|
-
lib/
|
7
|
-
lib/watir/assertions.rb
|
8
|
-
lib/watir/browser.rb
|
9
|
-
lib/watir/browsers.rb
|
10
|
-
lib/watir/exceptions.rb
|
11
|
-
lib/watir/matches.rb
|
12
|
-
lib/watir/options.rb
|
13
|
-
lib/watir/testcase.rb
|
14
|
-
lib/watir/waiter.rb
|
1
|
+
History.txt
|
2
|
+
Manifest.txt
|
3
|
+
README.txt
|
4
|
+
Rakefile
|
5
|
+
lib/watir.rb
|
6
|
+
lib/commonwatir.rb
|
7
|
+
lib/watir/assertions.rb
|
8
|
+
lib/watir/browser.rb
|
9
|
+
lib/watir/browsers.rb
|
10
|
+
lib/watir/exceptions.rb
|
11
|
+
lib/watir/matches.rb
|
12
|
+
lib/watir/options.rb
|
13
|
+
lib/watir/testcase.rb
|
14
|
+
lib/watir/waiter.rb
|
data/README.txt
CHANGED
@@ -1,48 +1,48 @@
|
|
1
|
-
=
|
2
|
-
|
3
|
-
* FIX (url)
|
4
|
-
|
5
|
-
== DESCRIPTION:
|
6
|
-
|
7
|
-
Common code used by Watir and FireWatir
|
8
|
-
|
9
|
-
== FEATURES/PROBLEMS:
|
10
|
-
|
11
|
-
* FIX (list of features or problems)
|
12
|
-
|
13
|
-
== SYNOPSIS:
|
14
|
-
|
15
|
-
FIX (code sample of usage)
|
16
|
-
|
17
|
-
== REQUIREMENTS:
|
18
|
-
|
19
|
-
* FIX (list of requirements)
|
20
|
-
|
21
|
-
== INSTALL:
|
22
|
-
|
23
|
-
* sudo gem install
|
24
|
-
|
25
|
-
== LICENSE:
|
26
|
-
|
27
|
-
(The MIT License)
|
28
|
-
|
29
|
-
Copyright (c) 2008 Bret Pettichord
|
30
|
-
|
31
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
32
|
-
a copy of this software and associated documentation files (the
|
33
|
-
'Software'), to deal in the Software without restriction, including
|
34
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
35
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
36
|
-
permit persons to whom the Software is furnished to do so, subject to
|
37
|
-
the following conditions:
|
38
|
-
|
39
|
-
The above copyright notice and this permission notice shall be
|
40
|
-
included in all copies or substantial portions of the Software.
|
41
|
-
|
42
|
-
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
43
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
44
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
45
|
-
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
46
|
-
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
47
|
-
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
48
|
-
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
1
|
+
= commonwatir
|
2
|
+
|
3
|
+
* FIX (url)
|
4
|
+
|
5
|
+
== DESCRIPTION:
|
6
|
+
|
7
|
+
Common code used by Watir and FireWatir
|
8
|
+
|
9
|
+
== FEATURES/PROBLEMS:
|
10
|
+
|
11
|
+
* FIX (list of features or problems)
|
12
|
+
|
13
|
+
== SYNOPSIS:
|
14
|
+
|
15
|
+
FIX (code sample of usage)
|
16
|
+
|
17
|
+
== REQUIREMENTS:
|
18
|
+
|
19
|
+
* FIX (list of requirements)
|
20
|
+
|
21
|
+
== INSTALL:
|
22
|
+
|
23
|
+
* sudo gem install commonwatir
|
24
|
+
|
25
|
+
== LICENSE:
|
26
|
+
|
27
|
+
(The MIT License)
|
28
|
+
|
29
|
+
Copyright (c) 2008, 2009 Bret Pettichord
|
30
|
+
|
31
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
32
|
+
a copy of this software and associated documentation files (the
|
33
|
+
'Software'), to deal in the Software without restriction, including
|
34
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
35
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
36
|
+
permit persons to whom the Software is furnished to do so, subject to
|
37
|
+
the following conditions:
|
38
|
+
|
39
|
+
The above copyright notice and this permission notice shall be
|
40
|
+
included in all copies or substantial portions of the Software.
|
41
|
+
|
42
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
43
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
44
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
45
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
46
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
47
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
48
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'hoe'
|
3
|
-
require './lib/
|
4
|
-
|
5
|
-
Hoe.
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
1
|
+
require 'rubygems'
|
2
|
+
require 'hoe'
|
3
|
+
require './lib/commonwatir.rb'
|
4
|
+
|
5
|
+
Hoe.spec 'commonwatir' do
|
6
|
+
self.version = CommonWatir::VERSION
|
7
|
+
self.rubyforge_name = 'wtr'
|
8
|
+
self.developer('Bret Pettichord', 'bret@pettichord.com')
|
9
|
+
self.extra_deps << ['user-choices', '>= 0']
|
10
|
+
self.url = 'http://www.watir.com'
|
11
|
+
end
|
data/lib/commonwatir.rb
ADDED
data/lib/watir/assertions.rb
CHANGED
@@ -1,44 +1,44 @@
|
|
1
|
-
require 'test/unit/assertions'
|
2
|
-
|
3
|
-
module Watir
|
4
|
-
# Verification methods
|
5
|
-
module Assertions
|
6
|
-
include Test::Unit::Assertions
|
7
|
-
|
8
|
-
# Log a failure if the boolean is true. The message is the failure
|
9
|
-
# message logged.
|
10
|
-
# Whether true or false, the assertion count is incremented.
|
11
|
-
def verify boolean, message = 'verify failed.'
|
12
|
-
add_assertion
|
13
|
-
add_failure message.to_s, caller unless boolean
|
14
|
-
end
|
15
|
-
|
16
|
-
def verify_equal expected, actual, message=nil
|
17
|
-
full_message = build_message(message, <<EOT, expected, actual)
|
18
|
-
<?> expected but was
|
19
|
-
<?>.
|
20
|
-
EOT
|
21
|
-
verify(expected == actual, full_message)
|
22
|
-
end
|
23
|
-
def verify_match pattern, string, message=nil
|
24
|
-
pattern = case(pattern)
|
25
|
-
when String
|
26
|
-
Regexp.new(Regexp.escape(pattern))
|
27
|
-
else
|
28
|
-
pattern
|
29
|
-
end
|
30
|
-
full_message = build_message(message, "<?> expected to be =~\n<?>.", string, pattern)
|
31
|
-
verify(string =~ pattern, full_message)
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
37
|
-
module Test::Unit::Assertions
|
38
|
-
def assert_false(boolean, message=nil)
|
39
|
-
_wrap_assertion do
|
40
|
-
assert_block("assert should not be called with a block.") { !block_given? }
|
41
|
-
assert_block(build_message(message, "<?> is not false.", boolean)) { !boolean }
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
1
|
+
require 'test/unit/assertions'
|
2
|
+
|
3
|
+
module Watir
|
4
|
+
# Verification methods
|
5
|
+
module Assertions
|
6
|
+
include Test::Unit::Assertions
|
7
|
+
|
8
|
+
# Log a failure if the boolean is true. The message is the failure
|
9
|
+
# message logged.
|
10
|
+
# Whether true or false, the assertion count is incremented.
|
11
|
+
def verify boolean, message = 'verify failed.'
|
12
|
+
add_assertion
|
13
|
+
add_failure message.to_s, caller unless boolean
|
14
|
+
end
|
15
|
+
|
16
|
+
def verify_equal expected, actual, message=nil
|
17
|
+
full_message = build_message(message, <<EOT, expected, actual)
|
18
|
+
<?> expected but was
|
19
|
+
<?>.
|
20
|
+
EOT
|
21
|
+
verify(expected == actual, full_message)
|
22
|
+
end
|
23
|
+
def verify_match pattern, string, message=nil
|
24
|
+
pattern = case(pattern)
|
25
|
+
when String
|
26
|
+
Regexp.new(Regexp.escape(pattern))
|
27
|
+
else
|
28
|
+
pattern
|
29
|
+
end
|
30
|
+
full_message = build_message(message, "<?> expected to be =~\n<?>.", string, pattern)
|
31
|
+
verify(string =~ pattern, full_message)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
module Test::Unit::Assertions
|
38
|
+
def assert_false(boolean, message=nil)
|
39
|
+
_wrap_assertion do
|
40
|
+
assert_block("assert should not be called with a block.") { !block_given? }
|
41
|
+
assert_block(build_message(message, "<?> is not false.", boolean)) { !boolean }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/watir/browser.rb
CHANGED
@@ -1,130 +1,149 @@
|
|
1
|
-
# watir/browser
|
2
|
-
require 'watir/options'
|
3
|
-
module Watir
|
4
|
-
|
5
|
-
=begin rdoc
|
6
|
-
|
7
|
-
Watir is a family of open-source drivers for automating web browsers. You
|
8
|
-
can use it to write tests that are easy to read and maintain.
|
9
|
-
|
10
|
-
Watir drives browsers the same way people do. It clicks links, fills in forms,
|
11
|
-
presses buttons. Watir also checks results, such as whether expected text
|
12
|
-
appears on a page.
|
13
|
-
|
14
|
-
The Watir family currently includes support for Internet Explorer (on Windows),
|
15
|
-
Firefox (on Windows, Mac and Linux) and Safari (on Mac).
|
16
|
-
|
17
|
-
Project Homepage: http://wtr.rubyforge.org
|
18
|
-
|
19
|
-
This Browser module provides a generic interface
|
20
|
-
that tests can use to access any browser. The actual browser (and thus
|
21
|
-
the actual Watir driver) is determined at runtime based on configuration
|
22
|
-
settings.
|
23
|
-
|
24
|
-
require 'watir'
|
25
|
-
browser = Watir::Browser.new
|
26
|
-
browser.goto 'http://google.com'
|
27
|
-
browser.text_field(:name, 'q').set 'pickaxe'
|
28
|
-
browser.button(:name, 'btnG').click
|
29
|
-
if browser.text.include? 'Programming Ruby'
|
30
|
-
puts 'Text was found'
|
31
|
-
else
|
32
|
-
puts 'Text was not found'
|
33
|
-
end
|
34
|
-
|
35
|
-
A comprehensive summary of the Watir API can be found here
|
36
|
-
http://wiki.openqa.org/display/WTR/Methods+supported+by+Element
|
37
|
-
|
38
|
-
There are two ways to configure the browser that will be used by your tests.
|
39
|
-
|
40
|
-
One is to set the +watir_browser+ environment variable to +ie+ or +firefox+.
|
41
|
-
(How you do this depends on your platform.)
|
42
|
-
|
43
|
-
The other is to create a file that looks like this.
|
44
|
-
|
45
|
-
browser: ie
|
46
|
-
|
47
|
-
And then to add this line to your script, after the require statement and
|
48
|
-
before you invoke Browser.new.
|
49
|
-
|
50
|
-
Watir.options_file = 'path/to/the/file/you/just/created'
|
51
|
-
|
52
|
-
=end rdoc
|
53
|
-
|
54
|
-
module Browser
|
55
|
-
@@browser_classes = {}
|
56
|
-
@@sub_options = {}
|
57
|
-
@@default = nil
|
58
|
-
class << self
|
59
|
-
|
60
|
-
# Create a new instance of a browser driver, as determined by the
|
61
|
-
# configuration settings. (Don't be fooled: this is not actually
|
62
|
-
# an instance of Browser class.)
|
63
|
-
def new
|
64
|
-
set_sub_options
|
65
|
-
klass.new
|
66
|
-
end
|
67
|
-
# Create a new instance as with #new and start the browser on the
|
68
|
-
# specified url.
|
69
|
-
def start url
|
70
|
-
set_sub_options
|
71
|
-
klass.start url
|
72
|
-
end
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
end
|
129
|
-
|
130
|
-
|
1
|
+
# watir/browser
|
2
|
+
require 'watir/options'
|
3
|
+
module Watir
|
4
|
+
|
5
|
+
=begin rdoc
|
6
|
+
|
7
|
+
Watir is a family of open-source drivers for automating web browsers. You
|
8
|
+
can use it to write tests that are easy to read and maintain.
|
9
|
+
|
10
|
+
Watir drives browsers the same way people do. It clicks links, fills in forms,
|
11
|
+
presses buttons. Watir also checks results, such as whether expected text
|
12
|
+
appears on a page.
|
13
|
+
|
14
|
+
The Watir family currently includes support for Internet Explorer (on Windows),
|
15
|
+
Firefox (on Windows, Mac and Linux) and Safari (on Mac).
|
16
|
+
|
17
|
+
Project Homepage: http://wtr.rubyforge.org
|
18
|
+
|
19
|
+
This Browser module provides a generic interface
|
20
|
+
that tests can use to access any browser. The actual browser (and thus
|
21
|
+
the actual Watir driver) is determined at runtime based on configuration
|
22
|
+
settings.
|
23
|
+
|
24
|
+
require 'watir'
|
25
|
+
browser = Watir::Browser.new
|
26
|
+
browser.goto 'http://google.com'
|
27
|
+
browser.text_field(:name, 'q').set 'pickaxe'
|
28
|
+
browser.button(:name, 'btnG').click
|
29
|
+
if browser.text.include? 'Programming Ruby'
|
30
|
+
puts 'Text was found'
|
31
|
+
else
|
32
|
+
puts 'Text was not found'
|
33
|
+
end
|
34
|
+
|
35
|
+
A comprehensive summary of the Watir API can be found here
|
36
|
+
http://wiki.openqa.org/display/WTR/Methods+supported+by+Element
|
37
|
+
|
38
|
+
There are two ways to configure the browser that will be used by your tests.
|
39
|
+
|
40
|
+
One is to set the +watir_browser+ environment variable to +ie+ or +firefox+.
|
41
|
+
(How you do this depends on your platform.)
|
42
|
+
|
43
|
+
The other is to create a file that looks like this.
|
44
|
+
|
45
|
+
browser: ie
|
46
|
+
|
47
|
+
And then to add this line to your script, after the require statement and
|
48
|
+
before you invoke Browser.new.
|
49
|
+
|
50
|
+
Watir.options_file = 'path/to/the/file/you/just/created'
|
51
|
+
|
52
|
+
=end rdoc
|
53
|
+
|
54
|
+
module Browser
|
55
|
+
@@browser_classes = {}
|
56
|
+
@@sub_options = {}
|
57
|
+
@@default = nil
|
58
|
+
class << self
|
59
|
+
|
60
|
+
# Create a new instance of a browser driver, as determined by the
|
61
|
+
# configuration settings. (Don't be fooled: this is not actually
|
62
|
+
# an instance of Browser class.)
|
63
|
+
def new
|
64
|
+
set_sub_options
|
65
|
+
klass.new
|
66
|
+
end
|
67
|
+
# Create a new instance as with #new and start the browser on the
|
68
|
+
# specified url.
|
69
|
+
def start url
|
70
|
+
set_sub_options
|
71
|
+
klass.start url
|
72
|
+
end
|
73
|
+
# Attach to an existing browser.
|
74
|
+
def attach(how, what)
|
75
|
+
set_sub_options
|
76
|
+
klass.attach(how, what)
|
77
|
+
end
|
78
|
+
def set_options options
|
79
|
+
return unless defined?(klass.set_options)
|
80
|
+
klass.set_options options
|
81
|
+
end
|
82
|
+
def options
|
83
|
+
return {} unless defined?(klass.options)
|
84
|
+
klass.options
|
85
|
+
end
|
86
|
+
|
87
|
+
def klass
|
88
|
+
key = Watir.options[:browser]
|
89
|
+
eval @@browser_classes[key] # this triggers the autoload
|
90
|
+
end
|
91
|
+
private :klass
|
92
|
+
# Add support for the browser option, using the specified class,
|
93
|
+
# provided as a string. Optionally, additional options supported by
|
94
|
+
# the class can be specified as an array of symbols. Options specified
|
95
|
+
# by the user and included in this list will be passed (as a hash) to
|
96
|
+
# the set_options class method (if defined) before creating an instance.
|
97
|
+
def support hash_args
|
98
|
+
option = hash_args[:name]
|
99
|
+
class_string = hash_args[:class]
|
100
|
+
additional_options = hash_args[:options]
|
101
|
+
library = hash_args[:library]
|
102
|
+
gem = hash_args[:gem] || library
|
103
|
+
|
104
|
+
@@browser_classes[option] = class_string
|
105
|
+
@@sub_options[option] = additional_options
|
106
|
+
|
107
|
+
autoload class_string, library
|
108
|
+
activate_gem gem, option
|
109
|
+
end
|
110
|
+
|
111
|
+
def default
|
112
|
+
@@default
|
113
|
+
end
|
114
|
+
# Specifies a default browser. Must be specified before options are parsed.
|
115
|
+
def default= option
|
116
|
+
@@default = option
|
117
|
+
end
|
118
|
+
# Returns the names of the browsers that are supported by this module.
|
119
|
+
# These are the options for 'watir_browser' (env var) or 'browser:' (yaml).
|
120
|
+
def browser_names
|
121
|
+
@@browser_classes.keys
|
122
|
+
end
|
123
|
+
|
124
|
+
private
|
125
|
+
def autoload class_string, library
|
126
|
+
mod, klass = class_string.split('::')
|
127
|
+
eval "module ::#{mod}; autoload :#{klass}, '#{library}'; end"
|
128
|
+
end
|
129
|
+
# Activate the gem (if installed). The default browser will be set
|
130
|
+
# to the first gem that activates.
|
131
|
+
def activate_gem gem_name, option
|
132
|
+
begin
|
133
|
+
gem gem_name
|
134
|
+
@@default ||= option
|
135
|
+
rescue Gem::LoadError
|
136
|
+
end
|
137
|
+
end
|
138
|
+
def set_sub_options
|
139
|
+
sub_options = @@sub_options[Watir.options[:browser]]
|
140
|
+
return if sub_options.nil?
|
141
|
+
specified_options = Watir.options.reject {|k, v| !sub_options.include? k}
|
142
|
+
self.set_options specified_options
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
end
|
148
|
+
|
149
|
+
require 'watir/browsers'
|
data/lib/watir/browsers.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
# watir/browsers
|
2
|
-
# Define browsers supported by Watir
|
3
|
-
|
4
|
-
Watir::Browser.support :name => 'ie', :class => 'Watir::IE',
|
5
|
-
:library => 'watir/ie', :gem => 'watir',
|
6
|
-
:options => [:speed, :visible]
|
7
|
-
|
8
|
-
Watir::Browser.support :name => 'firefox', :class => 'FireWatir::Firefox',
|
9
|
-
:library => 'firewatir'
|
10
|
-
|
11
|
-
Watir::Browser.support :name => 'safari', :class => 'Watir::Safari',
|
12
|
-
:library => 'safariwatir'
|
1
|
+
# watir/browsers
|
2
|
+
# Define browsers supported by Watir
|
3
|
+
|
4
|
+
Watir::Browser.support :name => 'ie', :class => 'Watir::IE',
|
5
|
+
:library => 'watir/ie', :gem => 'watir',
|
6
|
+
:options => [:speed, :visible]
|
7
|
+
|
8
|
+
Watir::Browser.support :name => 'firefox', :class => 'FireWatir::Firefox',
|
9
|
+
:library => 'firewatir'
|
10
|
+
|
11
|
+
Watir::Browser.support :name => 'safari', :class => 'Watir::Safari',
|
12
|
+
:library => 'safariwatir'
|
data/lib/watir/exceptions.rb
CHANGED
@@ -1,48 +1,48 @@
|
|
1
|
-
module Watir
|
2
|
-
module Exception
|
3
|
-
|
4
|
-
# Root class for all Watir Exceptions
|
5
|
-
class WatirException < RuntimeError
|
6
|
-
def initialize(message="")
|
7
|
-
super(message)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
# This exception is thrown if an attempt is made to access an object that doesn't exist
|
12
|
-
class UnknownObjectException < WatirException; end
|
13
|
-
# This exception is thrown if an attempt is made to access an object that is in a disabled state
|
14
|
-
class ObjectDisabledException < WatirException; end
|
15
|
-
# This exception is thrown if an attempt is made to access a frame that cannot be found
|
16
|
-
class UnknownFrameException< WatirException; end
|
17
|
-
# This exception is thrown if an attempt is made to access a form that cannot be found
|
18
|
-
class UnknownFormException< WatirException; end
|
19
|
-
# This exception is thrown if an attempt is made to access an object that is in a read only state
|
20
|
-
class ObjectReadOnlyException < WatirException; end
|
21
|
-
# This exception is thrown if an attempt is made to access an object when the specified value cannot be found
|
22
|
-
class NoValueFoundException < WatirException; end
|
23
|
-
# This exception gets raised if part of finding an object is missing
|
24
|
-
class MissingWayOfFindingObjectException < WatirException; end
|
25
|
-
# this exception is raised if an attempt is made to access a table cell that doesnt exist
|
26
|
-
class UnknownCellException < WatirException; end
|
27
|
-
# This exception is thrown if the window cannot be found
|
28
|
-
class NoMatchingWindowFoundException < WatirException; end
|
29
|
-
# This exception is thrown if an attemp is made to acces the status bar of the browser when it doesnt exist
|
30
|
-
class NoStatusBarException < WatirException; end
|
31
|
-
# This exception is thrown if an http error, such as a 404, 500 etc is encountered while navigating
|
32
|
-
class NavigationException < WatirException; end
|
33
|
-
# This exception is raised if a timeout is exceeded
|
34
|
-
class TimeOutException < WatirException
|
35
|
-
def initialize(duration, timeout)
|
36
|
-
@duration, @timeout = duration, timeout
|
37
|
-
end
|
38
|
-
attr_reader :duration, :timeout
|
39
|
-
end
|
40
|
-
|
41
|
-
# Return an error message for when unable to locate the element
|
42
|
-
def self.message_for_unable_to_locate(how, what)
|
43
|
-
result = "using #{how.inspect}"
|
44
|
-
result << ", #{what.inspect}" if what
|
45
|
-
"Unable to locate element, #{result}"
|
46
|
-
end
|
47
|
-
end
|
1
|
+
module Watir
|
2
|
+
module Exception
|
3
|
+
|
4
|
+
# Root class for all Watir Exceptions
|
5
|
+
class WatirException < RuntimeError
|
6
|
+
def initialize(message="")
|
7
|
+
super(message)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
# This exception is thrown if an attempt is made to access an object that doesn't exist
|
12
|
+
class UnknownObjectException < WatirException; end
|
13
|
+
# This exception is thrown if an attempt is made to access an object that is in a disabled state
|
14
|
+
class ObjectDisabledException < WatirException; end
|
15
|
+
# This exception is thrown if an attempt is made to access a frame that cannot be found
|
16
|
+
class UnknownFrameException< WatirException; end
|
17
|
+
# This exception is thrown if an attempt is made to access a form that cannot be found
|
18
|
+
class UnknownFormException< WatirException; end
|
19
|
+
# This exception is thrown if an attempt is made to access an object that is in a read only state
|
20
|
+
class ObjectReadOnlyException < WatirException; end
|
21
|
+
# This exception is thrown if an attempt is made to access an object when the specified value cannot be found
|
22
|
+
class NoValueFoundException < WatirException; end
|
23
|
+
# This exception gets raised if part of finding an object is missing
|
24
|
+
class MissingWayOfFindingObjectException < WatirException; end
|
25
|
+
# this exception is raised if an attempt is made to access a table cell that doesnt exist
|
26
|
+
class UnknownCellException < WatirException; end
|
27
|
+
# This exception is thrown if the window cannot be found
|
28
|
+
class NoMatchingWindowFoundException < WatirException; end
|
29
|
+
# This exception is thrown if an attemp is made to acces the status bar of the browser when it doesnt exist
|
30
|
+
class NoStatusBarException < WatirException; end
|
31
|
+
# This exception is thrown if an http error, such as a 404, 500 etc is encountered while navigating
|
32
|
+
class NavigationException < WatirException; end
|
33
|
+
# This exception is raised if a timeout is exceeded
|
34
|
+
class TimeOutException < WatirException
|
35
|
+
def initialize(duration, timeout)
|
36
|
+
@duration, @timeout = duration, timeout
|
37
|
+
end
|
38
|
+
attr_reader :duration, :timeout
|
39
|
+
end
|
40
|
+
|
41
|
+
# Return an error message for when unable to locate the element
|
42
|
+
def self.message_for_unable_to_locate(how, what)
|
43
|
+
result = "using #{how.inspect}"
|
44
|
+
result << ", #{what.inspect}" if what
|
45
|
+
"Unable to locate element, #{result}"
|
46
|
+
end
|
47
|
+
end
|
48
48
|
end
|
data/lib/watir/matches.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
|
-
class String
|
2
|
-
def matches(x)
|
3
|
-
return self == x
|
4
|
-
end
|
5
|
-
end
|
6
|
-
|
7
|
-
class Regexp
|
8
|
-
def matches(x)
|
9
|
-
return self.match(x)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
class Integer
|
14
|
-
def matches(x)
|
15
|
-
return self == x
|
16
|
-
end
|
17
|
-
end
|
1
|
+
class String
|
2
|
+
def matches(x)
|
3
|
+
return self == x
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
class Regexp
|
8
|
+
def matches(x)
|
9
|
+
return self.match(x)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class Integer
|
14
|
+
def matches(x)
|
15
|
+
return self == x
|
16
|
+
end
|
17
|
+
end
|
data/lib/watir/options.rb
CHANGED
@@ -1,51 +1,52 @@
|
|
1
|
-
# watir/options
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
@@
|
8
|
-
|
9
|
-
|
10
|
-
#
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
# they
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
:
|
39
|
-
:
|
40
|
-
|
41
|
-
:
|
42
|
-
:
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
@user_choices
|
49
|
-
|
50
|
-
|
51
|
-
end
|
1
|
+
# watir/options
|
2
|
+
require 'rubygems'
|
3
|
+
|
4
|
+
require 'user-choices'
|
5
|
+
|
6
|
+
module Watir
|
7
|
+
@@options_file = nil
|
8
|
+
@@options = nil
|
9
|
+
class << self
|
10
|
+
# Specify the location of a yaml file containing Watir options. Must be
|
11
|
+
# specified before the options are parsed.
|
12
|
+
def options_file= file
|
13
|
+
@@options_file = file
|
14
|
+
end
|
15
|
+
def options_file
|
16
|
+
@@options_file
|
17
|
+
end
|
18
|
+
def options= x
|
19
|
+
@@options = x
|
20
|
+
end
|
21
|
+
# Return the Watir options, as a hash. If they haven't been parsed yet,
|
22
|
+
# they will be now.
|
23
|
+
def options
|
24
|
+
@@options ||= Watir::Options.new.execute
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class Options < UserChoices::Command
|
29
|
+
include UserChoices
|
30
|
+
def add_sources builder
|
31
|
+
builder.add_source EnvironmentSource, :with_prefix, 'watir_'
|
32
|
+
if Watir.options_file
|
33
|
+
builder.add_source YamlConfigFileSource, :from_complete_path,
|
34
|
+
Watir.options_file
|
35
|
+
end
|
36
|
+
end
|
37
|
+
def add_choices builder
|
38
|
+
builder.add_choice :browser,
|
39
|
+
:type => Watir::Browser.browser_names,
|
40
|
+
:default => Watir::Browser.default
|
41
|
+
builder.add_choice :speed,
|
42
|
+
:type => ['slow', 'fast', 'zippy'],
|
43
|
+
:default => 'fast'
|
44
|
+
builder.add_choice :visible,
|
45
|
+
:type => :boolean
|
46
|
+
end
|
47
|
+
def execute
|
48
|
+
@user_choices[:speed] = @user_choices[:speed].to_sym
|
49
|
+
@user_choices
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/lib/watir/testcase.rb
CHANGED
@@ -1,58 +1,58 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require 'watir/assertions'
|
3
|
-
|
4
|
-
module Watir
|
5
|
-
|
6
|
-
class TestCase < Test::Unit::TestCase
|
7
|
-
include Watir::Assertions
|
8
|
-
@@order = :sequentially
|
9
|
-
def initialize name
|
10
|
-
throw :invalid_test if name == :default_test && self.class == Watir::TestCase
|
11
|
-
super
|
12
|
-
end
|
13
|
-
class << self
|
14
|
-
attr_accessor :test_methods, :order
|
15
|
-
def test_methods
|
16
|
-
@test_methods ||= []
|
17
|
-
end
|
18
|
-
def order
|
19
|
-
@order || @@order
|
20
|
-
end
|
21
|
-
def default_order= order
|
22
|
-
@@order = order
|
23
|
-
end
|
24
|
-
def sorted_test_methods
|
25
|
-
case order
|
26
|
-
when :alphabetically then test_methods.sort
|
27
|
-
when :sequentially then test_methods
|
28
|
-
when :reversed_sequentially then test_methods.reverse
|
29
|
-
when :reversed_alphabetically then test_methods.sort.reverse
|
30
|
-
else raise ArgumentError, "Execute option not supported: #{@order}"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
def suite
|
34
|
-
suite = Test::Unit::TestSuite.new(name)
|
35
|
-
sorted_test_methods.each do |test|
|
36
|
-
catch :invalid_test do
|
37
|
-
suite << new(test)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
if (suite.empty?)
|
41
|
-
catch :invalid_test do
|
42
|
-
suite << new(:default_test)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
return suite
|
46
|
-
end
|
47
|
-
def method_added id
|
48
|
-
name = id.id2name
|
49
|
-
test_methods << name if name =~ /^test./
|
50
|
-
end
|
51
|
-
def execute order
|
52
|
-
@order = order
|
53
|
-
end
|
54
|
-
end
|
55
|
-
public :add_assertion
|
56
|
-
end
|
57
|
-
|
58
|
-
end
|
1
|
+
require 'test/unit'
|
2
|
+
require 'watir/assertions'
|
3
|
+
|
4
|
+
module Watir
|
5
|
+
|
6
|
+
class TestCase < Test::Unit::TestCase
|
7
|
+
include Watir::Assertions
|
8
|
+
@@order = :sequentially
|
9
|
+
def initialize name
|
10
|
+
throw :invalid_test if name == :default_test && self.class == Watir::TestCase
|
11
|
+
super
|
12
|
+
end
|
13
|
+
class << self
|
14
|
+
attr_accessor :test_methods, :order
|
15
|
+
def test_methods
|
16
|
+
@test_methods ||= []
|
17
|
+
end
|
18
|
+
def order
|
19
|
+
@order || @@order
|
20
|
+
end
|
21
|
+
def default_order= order
|
22
|
+
@@order = order
|
23
|
+
end
|
24
|
+
def sorted_test_methods
|
25
|
+
case order
|
26
|
+
when :alphabetically then test_methods.sort
|
27
|
+
when :sequentially then test_methods
|
28
|
+
when :reversed_sequentially then test_methods.reverse
|
29
|
+
when :reversed_alphabetically then test_methods.sort.reverse
|
30
|
+
else raise ArgumentError, "Execute option not supported: #{@order}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
def suite
|
34
|
+
suite = Test::Unit::TestSuite.new(name)
|
35
|
+
sorted_test_methods.each do |test|
|
36
|
+
catch :invalid_test do
|
37
|
+
suite << new(test)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
if (suite.empty?)
|
41
|
+
catch :invalid_test do
|
42
|
+
suite << new(:default_test)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
return suite
|
46
|
+
end
|
47
|
+
def method_added id
|
48
|
+
name = id.id2name
|
49
|
+
test_methods << name if name =~ /^test./
|
50
|
+
end
|
51
|
+
def execute order
|
52
|
+
@order = order
|
53
|
+
end
|
54
|
+
end
|
55
|
+
public :add_assertion
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
data/lib/watir/waiter.rb
CHANGED
@@ -1,92 +1,92 @@
|
|
1
|
-
require 'watir/exceptions'
|
2
|
-
|
3
|
-
module Watir
|
4
|
-
|
5
|
-
def wait_until(*args)
|
6
|
-
Waiter.wait_until(*args) {yield}
|
7
|
-
end
|
8
|
-
|
9
|
-
class TimeKeeper
|
10
|
-
attr_reader :sleep_time
|
11
|
-
def initialize
|
12
|
-
@sleep_time = 0.0
|
13
|
-
end
|
14
|
-
def sleep seconds
|
15
|
-
@sleep_time += Kernel.sleep seconds
|
16
|
-
end
|
17
|
-
def now
|
18
|
-
Time.now
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
class Waiter
|
23
|
-
# This is an interface to a TimeKeeper which proxies
|
24
|
-
# calls to "sleep" and "Time.now".
|
25
|
-
# Useful for unit testing Waiter.
|
26
|
-
attr_accessor :timer
|
27
|
-
|
28
|
-
# How long to wait between each iteration through the wait_until
|
29
|
-
# loop. In seconds.
|
30
|
-
attr_accessor :polling_interval
|
31
|
-
|
32
|
-
# Timeout for wait_until.
|
33
|
-
attr_accessor :timeout
|
34
|
-
|
35
|
-
@@default_polling_interval = 0.5
|
36
|
-
@@default_timeout = 60.0
|
37
|
-
|
38
|
-
def initialize(timeout=@@default_timeout,
|
39
|
-
polling_interval=@@default_polling_interval)
|
40
|
-
@timeout = timeout
|
41
|
-
@polling_interval = polling_interval
|
42
|
-
@timer = TimeKeeper.new
|
43
|
-
end
|
44
|
-
|
45
|
-
# Execute the provided block until either (1) it returns true, or
|
46
|
-
# (2) the timeout (in seconds) has been reached. If the timeout is reached,
|
47
|
-
# a TimeOutException will be raised. The block will always
|
48
|
-
# execute at least once.
|
49
|
-
#
|
50
|
-
# waiter = Waiter.new(5)
|
51
|
-
# waiter.wait_until {puts 'hello'}
|
52
|
-
#
|
53
|
-
# This code will print out "hello" for five seconds, and then raise a
|
54
|
-
# Watir::TimeOutException.
|
55
|
-
def wait_until # block
|
56
|
-
start_time = now
|
57
|
-
until yield do
|
58
|
-
if (duration = now - start_time) > @timeout
|
59
|
-
raise Watir::Exception::TimeOutException.new(duration, @timeout),
|
60
|
-
"Timed out after #{duration} seconds."
|
61
|
-
end
|
62
|
-
sleep @polling_interval
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
# Execute the provided block until either (1) it returns true, or
|
67
|
-
# (2) the timeout (in seconds) has been reached. If the timeout is reached,
|
68
|
-
# a TimeOutException will be raised. The block will always
|
69
|
-
# execute at least once.
|
70
|
-
#
|
71
|
-
# Waiter.wait_until(5) {puts 'hello'}
|
72
|
-
#
|
73
|
-
# This code will print out "hello" for five seconds, and then raise a
|
74
|
-
# Watir::TimeOutException.
|
75
|
-
|
76
|
-
# IDEA: wait_until: remove defaults from Waiter.wait_until
|
77
|
-
def self.wait_until(timeout=@@default_timeout,
|
78
|
-
polling_interval=@@default_polling_interval)
|
79
|
-
waiter = new(timeout, polling_interval)
|
80
|
-
waiter.wait_until { yield }
|
81
|
-
end
|
82
|
-
|
83
|
-
private
|
84
|
-
def sleep seconds
|
85
|
-
@timer.sleep seconds
|
86
|
-
end
|
87
|
-
def now
|
88
|
-
@timer.now
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
1
|
+
require 'watir/exceptions'
|
2
|
+
|
3
|
+
module Watir
|
4
|
+
|
5
|
+
def wait_until(*args)
|
6
|
+
Waiter.wait_until(*args) {yield}
|
7
|
+
end
|
8
|
+
|
9
|
+
class TimeKeeper
|
10
|
+
attr_reader :sleep_time
|
11
|
+
def initialize
|
12
|
+
@sleep_time = 0.0
|
13
|
+
end
|
14
|
+
def sleep seconds
|
15
|
+
@sleep_time += Kernel.sleep seconds
|
16
|
+
end
|
17
|
+
def now
|
18
|
+
Time.now
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class Waiter
|
23
|
+
# This is an interface to a TimeKeeper which proxies
|
24
|
+
# calls to "sleep" and "Time.now".
|
25
|
+
# Useful for unit testing Waiter.
|
26
|
+
attr_accessor :timer
|
27
|
+
|
28
|
+
# How long to wait between each iteration through the wait_until
|
29
|
+
# loop. In seconds.
|
30
|
+
attr_accessor :polling_interval
|
31
|
+
|
32
|
+
# Timeout for wait_until.
|
33
|
+
attr_accessor :timeout
|
34
|
+
|
35
|
+
@@default_polling_interval = 0.5
|
36
|
+
@@default_timeout = 60.0
|
37
|
+
|
38
|
+
def initialize(timeout=@@default_timeout,
|
39
|
+
polling_interval=@@default_polling_interval)
|
40
|
+
@timeout = timeout
|
41
|
+
@polling_interval = polling_interval
|
42
|
+
@timer = TimeKeeper.new
|
43
|
+
end
|
44
|
+
|
45
|
+
# Execute the provided block until either (1) it returns true, or
|
46
|
+
# (2) the timeout (in seconds) has been reached. If the timeout is reached,
|
47
|
+
# a TimeOutException will be raised. The block will always
|
48
|
+
# execute at least once.
|
49
|
+
#
|
50
|
+
# waiter = Waiter.new(5)
|
51
|
+
# waiter.wait_until {puts 'hello'}
|
52
|
+
#
|
53
|
+
# This code will print out "hello" for five seconds, and then raise a
|
54
|
+
# Watir::TimeOutException.
|
55
|
+
def wait_until # block
|
56
|
+
start_time = now
|
57
|
+
until yield do
|
58
|
+
if (duration = now - start_time) > @timeout
|
59
|
+
raise Watir::Exception::TimeOutException.new(duration, @timeout),
|
60
|
+
"Timed out after #{duration} seconds."
|
61
|
+
end
|
62
|
+
sleep @polling_interval
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Execute the provided block until either (1) it returns true, or
|
67
|
+
# (2) the timeout (in seconds) has been reached. If the timeout is reached,
|
68
|
+
# a TimeOutException will be raised. The block will always
|
69
|
+
# execute at least once.
|
70
|
+
#
|
71
|
+
# Waiter.wait_until(5) {puts 'hello'}
|
72
|
+
#
|
73
|
+
# This code will print out "hello" for five seconds, and then raise a
|
74
|
+
# Watir::TimeOutException.
|
75
|
+
|
76
|
+
# IDEA: wait_until: remove defaults from Waiter.wait_until
|
77
|
+
def self.wait_until(timeout=@@default_timeout,
|
78
|
+
polling_interval=@@default_polling_interval)
|
79
|
+
waiter = new(timeout, polling_interval)
|
80
|
+
waiter.wait_until { yield }
|
81
|
+
end
|
82
|
+
|
83
|
+
private
|
84
|
+
def sleep seconds
|
85
|
+
@timer.sleep seconds
|
86
|
+
end
|
87
|
+
def now
|
88
|
+
@timer.now
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
92
|
end # module
|
data/lib/watir.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
# The 'watir' library loads the common watir code, common to all watir
|
2
|
-
# implementations. The 'watir/browser' library will autoload the actual
|
3
|
-
# implementations.
|
4
|
-
|
5
|
-
require 'watir/waiter'
|
6
|
-
require 'watir/browser'
|
1
|
+
# The 'watir' library loads the common watir code, common to all watir
|
2
|
+
# implementations. The 'watir/browser' library will autoload the actual
|
3
|
+
# implementations.
|
4
|
+
|
5
|
+
require 'watir/waiter'
|
6
|
+
require 'watir/browser'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: commonwatir
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bret Pettichord
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-11-10 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -30,11 +30,11 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 2.3.3
|
34
34
|
version:
|
35
35
|
description: Common code used by Watir and FireWatir
|
36
36
|
email:
|
37
|
-
- bret@
|
37
|
+
- bret@pettichord.com
|
38
38
|
executables: []
|
39
39
|
|
40
40
|
extensions: []
|
@@ -49,7 +49,7 @@ files:
|
|
49
49
|
- README.txt
|
50
50
|
- Rakefile
|
51
51
|
- lib/watir.rb
|
52
|
-
- lib/
|
52
|
+
- lib/commonwatir.rb
|
53
53
|
- lib/watir/assertions.rb
|
54
54
|
- lib/watir/browser.rb
|
55
55
|
- lib/watir/browsers.rb
|
@@ -59,7 +59,9 @@ files:
|
|
59
59
|
- lib/watir/testcase.rb
|
60
60
|
- lib/watir/waiter.rb
|
61
61
|
has_rdoc: true
|
62
|
-
homepage:
|
62
|
+
homepage: http://www.watir.com
|
63
|
+
licenses: []
|
64
|
+
|
63
65
|
post_install_message:
|
64
66
|
rdoc_options:
|
65
67
|
- --main
|
@@ -81,9 +83,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
81
83
|
requirements: []
|
82
84
|
|
83
85
|
rubyforge_project: wtr
|
84
|
-
rubygems_version: 1.
|
86
|
+
rubygems_version: 1.3.5
|
85
87
|
signing_key:
|
86
|
-
specification_version:
|
88
|
+
specification_version: 3
|
87
89
|
summary: Common code used by Watir and FireWatir
|
88
90
|
test_files: []
|
89
91
|
|
data/lib/watir-common.rb
DELETED