watir-classic 3.3.0 → 3.4.0
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/CHANGES +17 -0
- data/Gemfile.lock +9 -8
- data/LICENSE +1 -0
- data/README.rdoc +6 -7
- data/Rakefile +3 -1
- data/VERSION +1 -1
- data/lib/watir-classic.rb +0 -5
- data/lib/watir-classic/browser.rb +58 -35
- data/lib/watir-classic/browsers.rb +1 -1
- data/lib/watir-classic/container.rb +39 -33
- data/lib/watir-classic/cookies.rb +32 -2
- data/lib/watir-classic/core.rb +0 -1
- data/lib/watir-classic/dialogs/alert.rb +12 -0
- data/lib/watir-classic/dialogs/file_field.rb +11 -0
- data/lib/watir-classic/drag_and_drop_helper.rb +14 -0
- data/lib/watir-classic/element.rb +292 -257
- data/lib/watir-classic/element_collection.rb +26 -8
- data/lib/watir-classic/element_extensions.rb +22 -16
- data/lib/watir-classic/exceptions.rb +4 -4
- data/lib/watir-classic/form.rb +52 -49
- data/lib/watir-classic/frame.rb +23 -14
- data/lib/watir-classic/ie-class.rb +363 -315
- data/lib/watir-classic/ie-process.rb +1 -0
- data/lib/watir-classic/ie.rb +0 -17
- data/lib/watir-classic/image.rb +58 -64
- data/lib/watir-classic/input_elements.rb +224 -219
- data/lib/watir-classic/link.rb +14 -15
- data/lib/watir-classic/locator.rb +12 -7
- data/lib/watir-classic/matches.rb +7 -3
- data/lib/watir-classic/modal_dialog.rb +38 -26
- data/lib/watir-classic/non_control_elements.rb +29 -0
- data/lib/watir-classic/options.rb +10 -15
- data/lib/watir-classic/page-container.rb +30 -48
- data/lib/watir-classic/process.rb +4 -2
- data/lib/watir-classic/screenshot.rb +6 -0
- data/lib/watir-classic/supported_elements.rb +36 -14
- data/lib/watir-classic/table.rb +81 -71
- data/lib/watir-classic/util.rb +9 -11
- data/lib/watir-classic/wait.rb +17 -4
- data/lib/watir-classic/wait_helper.rb +15 -2
- data/lib/watir-classic/win32.rb +2 -1
- data/lib/watir-classic/window.rb +35 -7
- data/lib/watir-classic/xpath_locator.rb +1 -0
- data/lib/watir-classic/yard/global_macros.rb +7 -0
- data/spec/frame_spec.rb +17 -0
- metadata +5 -7
- data/lib/watir-classic/close_all.rb +0 -31
- data/lib/watir-classic/contrib/enabled_popup.rb +0 -21
- data/lib/watir-classic/contrib/ie-new-process.rb +0 -27
- data/lib/watir-classic/contrib/page_checker.rb +0 -29
- data/watir.gif +0 -0
data/CHANGES
CHANGED
@@ -1,3 +1,20 @@
|
|
1
|
+
== 3.4.0 - 2013/01/06
|
2
|
+
|
3
|
+
* All deprecated methods will print out warnings.
|
4
|
+
* Documentation overhaul - http://rubydoc.info/github/watir/watir-classic/frames
|
5
|
+
* Element#flash returns self instead of nil.
|
6
|
+
* Fix frame locator in Frame#attach_command (issue #45).
|
7
|
+
* Remove :zero_based_indexing option - from now on all index options are starting from zero.
|
8
|
+
* Remove global variable $HIDE_IE - use IE.visible= method instead. Support for command line switch -b is also removed.
|
9
|
+
* Remove global varialbe $FAST_SPEED - IE.speed= method instead. Support for command line switch -f is also removed.
|
10
|
+
* Remove IE#close_all - use browser.windows.each(&:close) instead.
|
11
|
+
* Remove IE#close_modal - use browser.modal_dialog.close instead.
|
12
|
+
* Remove IE#close_others - use browser.windows.reject(&:current?).each(&:close) instead.
|
13
|
+
* Remove unused ie-new-process.rb.
|
14
|
+
* Remove unused PageContainer module.
|
15
|
+
* Remove unused PageContainer#check_for_http_error.
|
16
|
+
* Remove unused PageContainer#enabled_popup - use browser.modal_dialog instead.
|
17
|
+
|
1
18
|
== 3.3.0 - 2012/10/27
|
2
19
|
|
3
20
|
* Add support for optional Element#style property argument, which allows to get specific css style attribute value.
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
watir-classic (3.
|
4
|
+
watir-classic (3.3.0)
|
5
5
|
ffi (~> 1.0)
|
6
6
|
multi_json
|
7
7
|
nokogiri
|
@@ -14,22 +14,23 @@ PATH
|
|
14
14
|
GEM
|
15
15
|
remote: http://rubygems.org/
|
16
16
|
specs:
|
17
|
-
builder (3.1.
|
17
|
+
builder (3.1.4)
|
18
18
|
childprocess (0.3.4)
|
19
19
|
ffi (~> 1.0, >= 1.0.6)
|
20
20
|
diff-lcs (1.1.3)
|
21
21
|
ffi (1.1.3-x86-mingw32)
|
22
|
-
hoe (3.0
|
22
|
+
hoe (3.3.0)
|
23
23
|
rake (~> 0.8)
|
24
24
|
mini_magick (3.2.1)
|
25
25
|
subexec (~> 0.0.4)
|
26
|
-
multi_json (1.3.
|
26
|
+
multi_json (1.3.7)
|
27
27
|
nokogiri (1.5.5-x86-mingw32)
|
28
28
|
rack (1.4.1)
|
29
29
|
rack-protection (1.2.0)
|
30
30
|
rack
|
31
|
-
rake (0.9.
|
32
|
-
rautomation (0.7.
|
31
|
+
rake (0.9.4)
|
32
|
+
rautomation (0.7.3)
|
33
|
+
ffi
|
33
34
|
rspec (2.11.0)
|
34
35
|
rspec-core (~> 2.11.0)
|
35
36
|
rspec-expectations (~> 2.11.0)
|
@@ -63,8 +64,8 @@ GEM
|
|
63
64
|
windows-pr (1.2.2)
|
64
65
|
win32-api (>= 1.4.5)
|
65
66
|
windows-api (>= 0.3.0)
|
66
|
-
xml-simple (1.1.
|
67
|
-
yard (0.8.
|
67
|
+
xml-simple (1.1.2)
|
68
|
+
yard (0.8.3)
|
68
69
|
|
69
70
|
PLATFORMS
|
70
71
|
x86-mingw32
|
data/LICENSE
CHANGED
data/README.rdoc
CHANGED
@@ -1,18 +1,17 @@
|
|
1
1
|
= Watir Classic
|
2
2
|
|
3
|
-
Watir
|
4
|
-
It supports your app no matter what technology it is developed in.
|
5
|
-
They support Internet Explorer on Windows, Firefox and Chrome on Windows, Mac and Linux and Safari on Mac.
|
3
|
+
Watir Classic is a Watir[https://github.com/watir/watir] driver for automating Internet Explorer on Windows.
|
6
4
|
|
7
5
|
Project Home:: http://watir.com
|
6
|
+
Documentation:: http://rubydoc.info/github/watir/watir-classic/frames
|
8
7
|
Source Code:: http://github.com/watir/watir-classic
|
9
8
|
Support:: http://watir.com/support
|
10
9
|
Gem:: https://rubygems.org/gems/watir-classic
|
11
10
|
|
12
11
|
== Install
|
13
12
|
|
14
|
-
|
15
|
-
|
13
|
+
Install the gem:
|
14
|
+
|
16
15
|
gem install watir-classic
|
17
16
|
|
18
17
|
Detailed installation instructions are at http://watir.com/installation
|
@@ -25,7 +24,7 @@ Loading Watir gem to drive Internet Explorer on Windows
|
|
25
24
|
|
26
25
|
require 'watir-classic'
|
27
26
|
|
28
|
-
Starting a new browser &
|
27
|
+
Starting a new browser & going to our site
|
29
28
|
|
30
29
|
browser = Watir::Browser.new
|
31
30
|
browser.goto("http://bit.ly/watir-example")
|
@@ -56,7 +55,7 @@ Clicking a button
|
|
56
55
|
Clearing, getting and selecting selection list values
|
57
56
|
|
58
57
|
browser.select_list(:name => "entry.6.single").clear
|
59
|
-
puts browser.select_list(:name => "entry.6.single").options
|
58
|
+
puts browser.select_list(:name => "entry.6.single").options.map(&:text)
|
60
59
|
browser.select_list(:name => "entry.6.single").select "Chrome"
|
61
60
|
|
62
61
|
Clicking a button
|
data/Rakefile
CHANGED
@@ -13,7 +13,9 @@ RSpec::Core::RakeTask.new(:rcov) do |spec|
|
|
13
13
|
end
|
14
14
|
|
15
15
|
require 'yard'
|
16
|
-
YARD::Rake::YardocTask.new
|
16
|
+
YARD::Rake::YardocTask.new do |t|
|
17
|
+
t.files = ["lib/watir-classic/yard/global_macros.rb", "lib/**/*.rb"]
|
18
|
+
end
|
17
19
|
|
18
20
|
#
|
19
21
|
# ------------------------------ watirspec -----------------------------------
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.
|
1
|
+
3.4.0
|
data/lib/watir-classic.rb
CHANGED
@@ -1,8 +1,3 @@
|
|
1
|
-
#--
|
2
|
-
# The 'watir-classic' library loads the common watir-classic code, common to all watir-classic
|
3
|
-
# implementations. The 'watir-classic/browser' library will autoload the actual
|
4
|
-
# implementations.
|
5
|
-
|
6
1
|
require 'watir-classic/version'
|
7
2
|
require 'watir-classic/wait'
|
8
3
|
require 'watir-classic/wait_helper'
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# watir-classic/browser
|
2
1
|
require 'watir-classic/options'
|
3
2
|
module Watir
|
4
3
|
|
@@ -11,74 +10,82 @@ Watir drives browsers the same way people do. It clicks links, fills in forms,
|
|
11
10
|
presses buttons. Watir also checks results, such as whether expected text
|
12
11
|
appears on a page.
|
13
12
|
|
14
|
-
The Watir
|
15
|
-
Firefox (on Windows, Mac and Linux) and Safari (on Mac).
|
13
|
+
The Watir Classic is a driver for Internet Explorer (on Windows).
|
16
14
|
|
17
|
-
Project Homepage: http://
|
15
|
+
Project Homepage: http://watir.com
|
18
16
|
|
19
|
-
|
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.
|
17
|
+
@example usage
|
23
18
|
|
24
19
|
require 'watir-classic'
|
25
20
|
browser = Watir::Browser.new
|
26
21
|
browser.goto 'http://google.com'
|
27
|
-
browser.text_field(:name
|
28
|
-
browser.button(:name
|
22
|
+
browser.text_field(:name => 'q').set 'pickaxe'
|
23
|
+
browser.button(:name => 'btnG').click
|
29
24
|
if browser.text.include? 'Programming Ruby'
|
30
25
|
puts 'Text was found'
|
31
26
|
else
|
32
27
|
puts 'Text was not found'
|
33
28
|
end
|
34
29
|
|
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
30
|
=end rdoc
|
53
31
|
|
54
32
|
class Browser
|
33
|
+
# @private
|
55
34
|
@@browser_classes = {}
|
35
|
+
|
36
|
+
# @private
|
56
37
|
@@sub_options = {}
|
38
|
+
|
39
|
+
# @private
|
57
40
|
@@default = nil
|
41
|
+
|
58
42
|
class << self
|
59
43
|
|
60
|
-
# Create a new instance of
|
61
|
-
#
|
62
|
-
#
|
63
|
-
def new
|
44
|
+
# Create a new instance of the {Browser} object
|
45
|
+
# @param [Object] ignored Argument is only needed to make
|
46
|
+
# watir-classic more compatible with watir-webdriver and is really ignored.
|
47
|
+
def new(ignored=nil)
|
64
48
|
set_sub_options
|
65
49
|
klass.new
|
66
50
|
end
|
67
|
-
|
51
|
+
|
52
|
+
# Create a new {Browser} instance as with {.new} and start the browser on the
|
68
53
|
# specified url.
|
69
|
-
|
54
|
+
# @param [String] url Url to start the browser at.
|
55
|
+
def start(url)
|
70
56
|
set_sub_options
|
71
57
|
klass.start url
|
72
58
|
end
|
73
|
-
|
59
|
+
|
60
|
+
# Attach to an existing IE {Browser}.
|
61
|
+
#
|
62
|
+
# @example Attach with full title:
|
63
|
+
# Watir::Browser.attach(:title, "Full title of IE")
|
64
|
+
#
|
65
|
+
# @example Attach with part of the title using {Regexp}:
|
66
|
+
# Watir::Browser.attach(:title, /part of the title of IE/)
|
67
|
+
#
|
68
|
+
# @example Attach with part of the url:
|
69
|
+
# Watir::Browser.attach(:url, /google/)
|
70
|
+
#
|
71
|
+
# @example Attach with window handle:
|
72
|
+
# Watir::Browser.attach(:hwnd, 123456)
|
73
|
+
#
|
74
|
+
# @param [Symbol] how type of the locator. Can be :title, :url or :hwnd.
|
75
|
+
# @param [Symbol] what value of the locator. Can be {String}, {Regexp} or {Fixnum}
|
76
|
+
# depending of the type parameter.
|
74
77
|
def attach(how, what)
|
75
78
|
set_sub_options
|
76
79
|
klass.attach(how, what)
|
77
80
|
end
|
78
|
-
|
81
|
+
|
82
|
+
# Set options for the {Browser}.
|
83
|
+
def set_options(options)
|
79
84
|
return unless klass.respond_to?(:set_options)
|
80
85
|
klass.set_options options
|
81
86
|
end
|
87
|
+
|
88
|
+
# @return [Hash] options of the {Browser}.
|
82
89
|
def options
|
83
90
|
return {} unless klass.respond_to?(:options)
|
84
91
|
klass.options
|
@@ -89,11 +96,14 @@ before you invoke Browser.new.
|
|
89
96
|
eval @@browser_classes[key] # this triggers the autoload
|
90
97
|
end
|
91
98
|
private :klass
|
99
|
+
|
92
100
|
# Add support for the browser option, using the specified class,
|
93
101
|
# provided as a string. Optionally, additional options supported by
|
94
102
|
# the class can be specified as an array of symbols. Options specified
|
95
103
|
# by the user and included in this list will be passed (as a hash) to
|
96
104
|
# the set_options class method (if defined) before creating an instance.
|
105
|
+
# @todo remove this and autoloading since now only IE is supported.
|
106
|
+
# @private
|
97
107
|
def support hash_args
|
98
108
|
option = hash_args[:name]
|
99
109
|
class_string = hash_args[:class]
|
@@ -108,26 +118,37 @@ before you invoke Browser.new.
|
|
108
118
|
activate_gem gem, option
|
109
119
|
end
|
110
120
|
|
121
|
+
# @private
|
111
122
|
def default
|
112
123
|
@@default
|
113
124
|
end
|
125
|
+
|
114
126
|
# Specifies a default browser. Must be specified before options are parsed.
|
127
|
+
# @todo remove this since only IE is supported.
|
128
|
+
# @private
|
115
129
|
def default= option
|
116
130
|
@@default = option
|
117
131
|
end
|
132
|
+
|
118
133
|
# Returns the names of the browsers that are supported by this module.
|
119
134
|
# These are the options for 'watir_browser' (env var) or 'browser:' (yaml).
|
135
|
+
# @todo remove this since only IE is supported.
|
136
|
+
# @private
|
120
137
|
def browser_names
|
121
138
|
@@browser_classes.keys
|
122
139
|
end
|
123
140
|
|
124
141
|
private
|
142
|
+
|
143
|
+
# @todo remove this since only IE is supported.
|
125
144
|
def autoload class_string, library
|
126
145
|
mod, klass = class_string.split('::')
|
127
146
|
eval "module ::#{mod}; autoload :#{klass}, '#{library}'; end"
|
128
147
|
end
|
148
|
+
|
129
149
|
# Activate the gem (if installed). The default browser will be set
|
130
150
|
# to the first gem that activates.
|
151
|
+
# @todo remove this since only IE is supported.
|
131
152
|
def activate_gem gem_name, option
|
132
153
|
begin
|
133
154
|
gem gem_name
|
@@ -135,6 +156,8 @@ before you invoke Browser.new.
|
|
135
156
|
rescue Gem::LoadError
|
136
157
|
end
|
137
158
|
end
|
159
|
+
|
160
|
+
# @todo remove this since only IE is supported.
|
138
161
|
def set_sub_options
|
139
162
|
sub_options = @@sub_options[Watir.options[:browser]]
|
140
163
|
return if sub_options.nil?
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Watir
|
2
|
-
# This module contains the factory methods that are used to access
|
2
|
+
# This module contains the factory methods that are used to access all html objects.
|
3
3
|
#
|
4
4
|
# For example, to access a button on a web page that has the following html
|
5
5
|
# <input type=button name='b1' value='Click Me' onClick='javascript:doSomething()'>
|
@@ -12,71 +12,77 @@ module Watir
|
|
12
12
|
#
|
13
13
|
# browser.button(:value, 'Click Me').name
|
14
14
|
#
|
15
|
-
# there are many methods available to the Button object
|
16
|
-
#--
|
17
|
-
# Is includable for classes that have @container, document and __ole_inner_elements
|
15
|
+
# there are many methods available to the {Button} object
|
18
16
|
module Container
|
19
17
|
include Watir::Exception
|
20
18
|
|
19
|
+
# The {Browser} object containing this element.
|
20
|
+
attr_accessor :page_container
|
21
|
+
alias_method :browser, :page_container
|
22
|
+
|
21
23
|
# Note: @container is the container of this object, i.e. the container
|
22
24
|
# of this container.
|
23
25
|
# In other words, for browser.table().this_thing().text_field().set,
|
24
26
|
# container of this_thing is the table.
|
25
27
|
|
26
28
|
# This is used to change the typing speed when entering text on a page.
|
29
|
+
# @private
|
27
30
|
attr_accessor :typingspeed
|
31
|
+
|
32
|
+
# @private
|
28
33
|
attr_accessor :type_keys
|
34
|
+
|
29
35
|
# The color we want to use for the active object. This can be any valid web-friendly color.
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
@typingspeed = container.typingspeed
|
37
|
-
@type_keys = container.type_keys
|
38
|
-
@activeObjectHighLightColor = container.activeObjectHighLightColor
|
36
|
+
# @private
|
37
|
+
attr_accessor :active_object_highlight_color
|
38
|
+
|
39
|
+
# @return [ModalDialog] modal dialog instance.
|
40
|
+
def modal_dialog
|
41
|
+
ModalDialog.new(self)
|
39
42
|
end
|
40
|
-
|
41
|
-
|
43
|
+
|
44
|
+
# Retrieve the JavaScript dialog instance.
|
45
|
+
# Supported dialogs are alert, confirm and prompt.
|
46
|
+
# @return [Alert] JavaScript dialog instance.
|
47
|
+
def alert
|
48
|
+
Alert.new(self)
|
49
|
+
end
|
50
|
+
|
42
51
|
# Wait until Browser has finished loading the page.
|
43
52
|
#--
|
44
53
|
# called explicitly by most click and set methods
|
54
|
+
# @private
|
45
55
|
def wait(no_sleep=false)
|
46
56
|
@container.wait(no_sleep)
|
47
57
|
end
|
48
58
|
|
49
|
-
|
59
|
+
# @private
|
60
|
+
def set_container(container)
|
50
61
|
@container = container
|
51
62
|
@page_container = container.page_container
|
52
63
|
end
|
53
64
|
|
54
|
-
public
|
55
|
-
|
56
|
-
def modal_dialog
|
57
|
-
ModalDialog.new(self)
|
58
|
-
end
|
59
|
-
|
60
|
-
def alert
|
61
|
-
Alert.new(self)
|
62
|
-
end
|
63
|
-
|
64
65
|
# Searching for Page Elements
|
65
66
|
# Not for external consumption
|
66
|
-
#
|
67
|
-
#++
|
67
|
+
# @private
|
68
68
|
def __ole_inner_elements
|
69
|
-
|
69
|
+
document.body.all
|
70
70
|
end
|
71
71
|
|
72
|
-
# Locator Methods
|
73
|
-
#
|
74
72
|
# Not for external use, but cannot set to private due to usages in Element
|
75
73
|
# classes.
|
76
|
-
|
74
|
+
# @private
|
77
75
|
def locator_for(locator_class, specifiers, klass)
|
78
76
|
locator_class.new self, specifiers, klass
|
79
77
|
end
|
78
|
+
|
79
|
+
private
|
80
|
+
|
81
|
+
def copy_test_config(container) # only used by form and frame
|
82
|
+
@typingspeed = container.typingspeed
|
83
|
+
@type_keys = container.type_keys
|
84
|
+
@active_object_high_light_color = container.active_object_highlight_color
|
85
|
+
end
|
80
86
|
|
81
|
-
end
|
87
|
+
end
|
82
88
|
end
|