vapir-ie 1.7.2 → 1.8.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/lib/vapir-ie.rb +2 -26
- data/lib/vapir-ie/{ie-class.rb → browser.rb} +188 -294
- data/lib/vapir-ie/clear_tracks.rb +56 -0
- data/lib/vapir-ie/close_all.rb +1 -1
- data/lib/vapir-ie/config.rb +22 -0
- data/lib/vapir-ie/container.rb +5 -27
- data/lib/vapir-ie/element.rb +26 -16
- data/lib/vapir-ie/ie-process.rb +11 -21
- data/lib/vapir-ie/input_elements.rb +1 -10
- data/lib/vapir-ie/modal_dialog.rb +1 -119
- data/lib/vapir-ie/page_container.rb +4 -2
- data/lib/vapir-ie/process.rb +1 -1
- data/lib/vapir-ie/scripts/select_file.rb +1 -1
- data/lib/vapir-ie/version.rb +1 -1
- data/lib/vapir-ie/win32ole.rb +1 -1
- metadata +37 -42
data/lib/vapir-ie.rb
CHANGED
@@ -6,23 +6,8 @@ module Vapir
|
|
6
6
|
IE= Class.new(Vapir::Browser)
|
7
7
|
end
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
# the remaining ARGV as a filter on what tests to run.
|
12
|
-
# Note: this means that watir must be require'd BEFORE test/unit.
|
13
|
-
# (Alternatively, you could require test/unit first and then put the Vapir::IE
|
14
|
-
# arguments after the '--'.)
|
15
|
-
|
16
|
-
# Make Internet Explorer invisible. -b stands for background
|
17
|
-
$HIDE_IE ||= ARGV.delete('-b')
|
18
|
-
|
19
|
-
# Run fast
|
20
|
-
$FAST_SPEED = ARGV.delete('-f')
|
21
|
-
|
22
|
-
# Eat the -s command line switch (deprecated)
|
23
|
-
ARGV.delete('-s')
|
24
|
-
|
25
|
-
require 'vapir-ie/ie-class'
|
9
|
+
require 'vapir-ie/config'
|
10
|
+
require 'vapir-ie/browser'
|
26
11
|
require 'vapir-ie/elements'
|
27
12
|
require 'vapir-ie/version'
|
28
13
|
|
@@ -31,14 +16,5 @@ require 'vapir-common/waiter'
|
|
31
16
|
module Vapir
|
32
17
|
include Vapir::Exception
|
33
18
|
|
34
|
-
# Directory containing the watir.rb file
|
35
|
-
@@dir = File.expand_path(File.dirname(__FILE__))
|
36
19
|
|
37
|
-
ATTACHER = Waiter.new
|
38
|
-
# Like regular Ruby "until", except that a TimeOutException is raised
|
39
|
-
# if the timeout is exceeded. Timeout is IE.attach_timeout.
|
40
|
-
def self.until_with_timeout # block
|
41
|
-
ATTACHER.timeout = IE.attach_timeout
|
42
|
-
ATTACHER.wait_until { yield }
|
43
|
-
end
|
44
20
|
end
|
@@ -11,50 +11,6 @@ module Vapir
|
|
11
11
|
include Vapir::Exception
|
12
12
|
include IE::PageContainer
|
13
13
|
|
14
|
-
# Maximum number of seconds to wait when attaching to a window
|
15
|
-
@@attach_timeout = 2.0 # default value
|
16
|
-
def self.attach_timeout
|
17
|
-
@@attach_timeout
|
18
|
-
end
|
19
|
-
def self.attach_timeout=(timeout)
|
20
|
-
@@attach_timeout = timeout
|
21
|
-
end
|
22
|
-
|
23
|
-
# Return the options used when creating new instances of IE.
|
24
|
-
# BUG: this interface invites misunderstanding/misuse such as IE.options[:speed] = :zippy]
|
25
|
-
def self.options
|
26
|
-
{:speed => self.speed, :visible => self.visible, :attach_timeout => self.attach_timeout}
|
27
|
-
end
|
28
|
-
# set values for options used when creating new instances of IE.
|
29
|
-
def self.set_options options
|
30
|
-
options.each do |name, value|
|
31
|
-
send "#{name}=", value
|
32
|
-
end
|
33
|
-
end
|
34
|
-
# The globals $FAST_SPEED and $HIDE_IE are checked both at initialization
|
35
|
-
# and later, because they
|
36
|
-
# might be set after initialization. Setting them beforehand (e.g. from
|
37
|
-
# the command line) will affect the class, otherwise it is only a temporary
|
38
|
-
# effect
|
39
|
-
@@speed = $FAST_SPEED ? :fast : :slow
|
40
|
-
def self.speed
|
41
|
-
return :fast if $FAST_SPEED
|
42
|
-
@@speed
|
43
|
-
end
|
44
|
-
def self.speed= x
|
45
|
-
$FAST_SPEED = nil
|
46
|
-
@@speed = x
|
47
|
-
end
|
48
|
-
@@visible = $HIDE_IE ? false : true
|
49
|
-
def self.visible
|
50
|
-
return false if $HIDE_IE
|
51
|
-
@@visible
|
52
|
-
end
|
53
|
-
def self.visible= x
|
54
|
-
$HIDE_IE = nil
|
55
|
-
@@visible = x
|
56
|
-
end
|
57
|
-
|
58
14
|
# IE inserts some element whose tagName is empty and just acts as block level element
|
59
15
|
# Probably some IE method of cleaning things
|
60
16
|
# To pass the same to the xml parser we need to give some name to empty tagName
|
@@ -64,257 +20,179 @@ module Vapir
|
|
64
20
|
# the last command
|
65
21
|
attr_reader :down_load_time
|
66
22
|
|
67
|
-
# the OLE Internet Explorer object
|
68
|
-
attr_accessor :ie
|
69
|
-
|
70
23
|
# access to the logger object
|
71
24
|
attr_accessor :logger
|
72
25
|
|
73
26
|
# this contains the list of unique urls that have been visited
|
74
27
|
attr_reader :url_list
|
75
28
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
29
|
+
class << self
|
30
|
+
# Create a new IE window in a new process.
|
31
|
+
# This method will not work when
|
32
|
+
# Vapir/Ruby is run under a service (instead of a user).
|
33
|
+
def new_process(options={})
|
34
|
+
new(options.merge(:new_process => true))
|
35
|
+
end
|
36
|
+
|
37
|
+
# Create a new IE window in a new process, starting at the specified URL.
|
38
|
+
# Same as IE.start.
|
39
|
+
def start_process(url='about:blank', options={})
|
40
|
+
new(options.merge(:new_process => true, :goto => url))
|
41
|
+
end
|
42
|
+
|
43
|
+
# Yields successively to each IE window on the current desktop. Takes a block.
|
44
|
+
# This method will not work when
|
45
|
+
# Vapir/Ruby is run under a service (instead of a user).
|
46
|
+
# Yields to the window and its hwnd.
|
47
|
+
def each_browser
|
48
|
+
each_browser_object do |browser_object|
|
49
|
+
yield attach(:browser_object, browser_object)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
alias each each_browser
|
53
|
+
def browsers
|
54
|
+
Enumerator.new(self, :each_browser)
|
55
|
+
end
|
56
|
+
|
57
|
+
# yields a WIN32OLE of each IE browser object that is available.
|
58
|
+
def each_browser_object
|
59
|
+
shell = WIN32OLE.new('Shell.Application')
|
60
|
+
shell.Windows.each do |window|
|
61
|
+
if (window.path =~ /Internet Explorer/ rescue false) && (window.hwnd rescue false)
|
62
|
+
yield window
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
def browser_objects
|
67
|
+
Enumerator.new(self, :each_browser_object)
|
68
|
+
end
|
69
|
+
|
81
70
|
end
|
82
71
|
|
83
72
|
# Create an IE browser.
|
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
|
-
def self.new_process
|
112
|
-
ie = new true
|
113
|
-
ie._new_process_init
|
114
|
-
ie
|
115
|
-
end
|
116
|
-
|
117
|
-
def _new_process_init
|
118
|
-
iep = Process.start
|
119
|
-
@ie = iep.window
|
120
|
-
@process_id = iep.process_id
|
121
|
-
initialize_options
|
122
|
-
goto 'about:blank'
|
123
|
-
end
|
124
|
-
|
125
|
-
# Create a new IE window in a new process, starting at the specified URL.
|
126
|
-
# Same as IE.start.
|
127
|
-
def self.start_process url=nil
|
128
|
-
ie = new_process
|
129
|
-
ie.goto url if url
|
130
|
-
ie
|
131
|
-
end
|
132
|
-
|
133
|
-
# Return a Vapir::IE object for an existing IE window. Window can be
|
134
|
-
# referenced by url, title, or window handle.
|
135
|
-
# Second argument can be either a string or a regular expression in the
|
136
|
-
# case of of :url or :title.
|
137
|
-
# IE.attach(:url, 'http://www.google.com')
|
138
|
-
# IE.attach(:title, 'Google')
|
139
|
-
# IE.attach(:hwnd, 528140)
|
140
|
-
# This method will not work when
|
141
|
-
# Vapir/Ruby is run under a service (instead of a user).
|
142
|
-
def self.attach how, what
|
143
|
-
ie = new true # don't create window
|
144
|
-
ie._attach_init(how, what)
|
145
|
-
ie
|
146
|
-
end
|
147
|
-
|
148
|
-
# this method is used internally to attach to an existing window
|
149
|
-
def _attach_init how, what
|
150
|
-
attach_browser_window how, what
|
151
|
-
initialize_options
|
152
|
-
wait
|
153
|
-
end
|
154
|
-
|
155
|
-
# Return an IE object that wraps the given window, typically obtained from
|
156
|
-
# Shell.Application.windows.
|
157
|
-
def self.bind window
|
158
|
-
ie = new true
|
159
|
-
ie.ie = window
|
160
|
-
ie.initialize_options
|
161
|
-
ie
|
162
|
-
end
|
163
|
-
|
164
|
-
def create_browser_window
|
165
|
-
@ie = WIN32OLE.new('InternetExplorer.Application')
|
166
|
-
end
|
167
|
-
private :create_browser_window
|
168
|
-
|
169
|
-
def initialize_options
|
170
|
-
self.visible = IE.visible
|
171
|
-
self.speed = IE.speed
|
73
|
+
#
|
74
|
+
# Takes a hash of options:
|
75
|
+
# - :timeout - the number of seconds to wait for a window to appear when
|
76
|
+
# attaching or launching.
|
77
|
+
# - :goto - a url to which the IE browser will navigate. by default this
|
78
|
+
# is 'about:blank' for newly-launched IE instances, and the default is
|
79
|
+
# not to navigate anywhere for attached instances.
|
80
|
+
# - :new_process - true or false, default is false. whether to launch this
|
81
|
+
# IE instance as its own process (this has no effect if :attach is
|
82
|
+
# specified)
|
83
|
+
# - :attach - a two-element Array of [how, what] where how is one of:
|
84
|
+
# - :title - a string or regexp matching the title of the browser that
|
85
|
+
# should be attached to.
|
86
|
+
# - :URL - a string or regexp matching the URL of the browser that
|
87
|
+
# should be attached to.
|
88
|
+
# - :HWND - specifies the HWND of the browser that should be attached to.
|
89
|
+
# - :name - the name of the window (as specified in the second argument to a
|
90
|
+
# window.open() javascript call)
|
91
|
+
# - :browser_object - this is generally just used internally. 'what'
|
92
|
+
# is a WIN32OLE object representing the browser.
|
93
|
+
# - :wait - true or false, default is true. whether to wait for the browser
|
94
|
+
# to be ready before continuing.
|
95
|
+
def initialize(method_options = {})
|
96
|
+
if method_options==true || method_options==false
|
97
|
+
raise NotImplementedError, "#{self.class.name}.new takes an options hash - passing a boolean for 'suppress_new_window' is no longer supported. Please see the documentation for #{self.class}.new"
|
98
|
+
end
|
99
|
+
options = options_from_config(method_options, {:timeout => :attach_timeout, :new_process => :ie_launch_new_process, :wait => :wait, :visible => :browser_visible}, [:attach, :goto])
|
172
100
|
|
173
|
-
@element_object = nil
|
174
|
-
@page_container = self
|
175
101
|
@error_checkers = []
|
176
102
|
|
177
103
|
@logger = DefaultLogger.new
|
178
104
|
@url_list = []
|
179
|
-
end
|
180
105
|
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
106
|
+
if options[:attach]
|
107
|
+
how, what = *options[:attach]
|
108
|
+
if how== :browser_object
|
109
|
+
@browser_object = what
|
110
|
+
else
|
111
|
+
orig_how=how
|
112
|
+
hows={
|
113
|
+
:title => proc{|bo| bo.document.title },
|
114
|
+
:URL => proc{|bo| bo.locationURL },
|
115
|
+
:name => proc{|bo| bo.document.parentWindow.name },
|
116
|
+
:HWND => proc{|bo| Vapir::IE.fix_win32ole_hwnd(bo.HWND) },
|
117
|
+
}
|
118
|
+
how=hows.keys.detect{|h| h.to_s.downcase==orig_how.to_s.downcase}
|
119
|
+
raise ArgumentError, "how should be one of: #{hows.keys.inspect} (was #{orig_how.inspect})" unless how
|
120
|
+
@browser_object = ::Waiter.try_for(options[:timeout], :exception => NoMatchingWindowFoundException.new("Unable to locate a window with #{how} of #{what}")) do
|
121
|
+
self.class.browser_objects.detect do |browser_object|
|
122
|
+
begin
|
123
|
+
Vapir::fuzzy_match(hows[how].call(browser_object), what)
|
124
|
+
rescue WIN32OLERuntimeError, NoMethodError
|
125
|
+
false
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
if method_options.key?(:visible)
|
131
|
+
# only set visibility if it's explicitly in the options given to the method - don't set from config when using attach
|
132
|
+
self.visible= method_options[:visible]
|
133
|
+
end
|
204
134
|
else
|
205
|
-
|
135
|
+
if options[:new_process]
|
136
|
+
iep = Process.start
|
137
|
+
@browser_object = iep.browser_object(:timeout => options[:timeout])
|
138
|
+
@process_id = iep.process_id
|
139
|
+
else
|
140
|
+
@browser_object = WIN32OLE.new('InternetExplorer.Application')
|
141
|
+
end
|
142
|
+
self.visible= options[:visible]
|
143
|
+
goto('about:blank')
|
206
144
|
end
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
return @speed if @speed == :slow
|
211
|
-
return @type_keys ? :fast : :zippy
|
212
|
-
end
|
213
|
-
|
214
|
-
# deprecated: use speed = :fast instead
|
215
|
-
def set_fast_speed
|
216
|
-
self.speed = :fast
|
145
|
+
goto(options[:goto]) if options[:goto]
|
146
|
+
wait if options[:wait]
|
147
|
+
self
|
217
148
|
end
|
218
149
|
|
219
|
-
# deprecated: use speed = :slow instead
|
220
|
-
def set_slow_speed
|
221
|
-
self.speed = :slow
|
222
|
-
end
|
223
|
-
|
224
150
|
def visible
|
225
151
|
assert_exists
|
226
|
-
@
|
152
|
+
@browser_object.visible
|
227
153
|
end
|
228
|
-
def visible=(
|
154
|
+
def visible=(visibility)
|
229
155
|
assert_exists
|
230
|
-
@
|
231
|
-
end
|
232
|
-
|
233
|
-
# Yields successively to each IE window on the current desktop. Takes a block.
|
234
|
-
# This method will not work when
|
235
|
-
# Vapir/Ruby is run under a service (instead of a user).
|
236
|
-
# Yields to the window and its hwnd.
|
237
|
-
def self.each
|
238
|
-
shell = WIN32OLE.new('Shell.Application')
|
239
|
-
shell.Windows.each do |window|
|
240
|
-
next unless (window.path =~ /Internet Explorer/ rescue false)
|
241
|
-
next unless (hwnd = window.hwnd rescue false)
|
242
|
-
ie = IE.bind(window)
|
243
|
-
ie.hwnd = hwnd
|
244
|
-
yield ie
|
245
|
-
end
|
246
|
-
end
|
247
|
-
|
248
|
-
# return internet explorer instance as specified. if none is found,
|
249
|
-
# return nil.
|
250
|
-
# arguments:
|
251
|
-
# :url, url -- the URL of the IE browser window
|
252
|
-
# :title, title -- the title of the browser page
|
253
|
-
# :hwnd, hwnd -- the window handle of the browser window.
|
254
|
-
# This method will not work when
|
255
|
-
# Vapir/Ruby is run under a service (instead of a user).
|
256
|
-
def self.find(how, what)
|
257
|
-
ie_ole = IE._find(how, what)
|
258
|
-
IE.bind ie_ole if ie_ole
|
259
|
-
end
|
260
|
-
|
261
|
-
def self._find(how, what)
|
262
|
-
ieTemp = nil
|
263
|
-
IE.each do |ie|
|
264
|
-
window = ie.ie
|
265
|
-
|
266
|
-
case how
|
267
|
-
when :url
|
268
|
-
ieTemp = window if Vapir::fuzzy_match(window.locationURL, what)
|
269
|
-
when :title
|
270
|
-
# normal windows explorer shells do not have document
|
271
|
-
# note window.document will fail for "new" browsers
|
272
|
-
begin
|
273
|
-
title = window.locationname
|
274
|
-
title = window.document.title
|
275
|
-
rescue WIN32OLERuntimeError, NoMethodError
|
276
|
-
end
|
277
|
-
ieTemp = window if Vapir::fuzzy_match(title, what)
|
278
|
-
when :hwnd
|
279
|
-
begin
|
280
|
-
ieTemp = window if what == window.HWND
|
281
|
-
rescue WIN32OLERuntimeError, NoMethodError
|
282
|
-
end
|
283
|
-
else
|
284
|
-
raise ArgumentError
|
285
|
-
end
|
286
|
-
end
|
287
|
-
return ieTemp
|
156
|
+
@browser_object.visible = visibility
|
288
157
|
end
|
289
158
|
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
end
|
297
|
-
rescue TimeOutException
|
298
|
-
raise NoMatchingWindowFoundException,
|
299
|
-
"Unable to locate a window with #{how} of #{what}"
|
300
|
-
end
|
301
|
-
@ie = ieTemp
|
302
|
-
end
|
303
|
-
private :attach_browser_window
|
159
|
+
# the WIN32OLE Internet Explorer object
|
160
|
+
#
|
161
|
+
# See: http://msdn.microsoft.com/en-us/library/aa752085%28v=VS.85%29.aspx
|
162
|
+
# and http://msdn.microsoft.com/en-us/library/aa752084%28v=VS.85%29.aspx
|
163
|
+
attr_reader :browser_object
|
164
|
+
alias ie browser_object
|
304
165
|
|
305
|
-
|
166
|
+
# Return the window handle of this browser
|
167
|
+
def hwnd
|
306
168
|
assert_exists
|
307
|
-
@
|
169
|
+
@hwnd ||= Vapir::IE.fix_win32ole_hwnd(@browser_object.HWND)
|
308
170
|
end
|
309
171
|
|
310
|
-
#
|
311
|
-
|
312
|
-
|
313
|
-
|
172
|
+
# win32ole's #HWND method casts to signed somewhere along its way, so returns
|
173
|
+
# a negative number. this is wrong, WinWindow will reject it (correctly), so we
|
174
|
+
# need to fix.
|
175
|
+
def self.fix_win32ole_hwnd(win32ole_hwnd)
|
176
|
+
win32ole_hwnd < 0 ? win32ole_hwnd % 2**32 : win32ole_hwnd
|
177
|
+
end
|
178
|
+
|
179
|
+
# returns the process id of this browser
|
180
|
+
def process_id
|
181
|
+
@process_id ||= win_window.process_id
|
182
|
+
end
|
183
|
+
# kills this process. NOTE that this process may be running
|
184
|
+
# multiple browsers; killing the process will kill them all.
|
185
|
+
# use #close to close a single browser.
|
186
|
+
def kill
|
187
|
+
# todo: drop win32api; use ffi
|
188
|
+
require 'Win32API'
|
189
|
+
right_to_terminate_process = 1
|
190
|
+
handle = Win32API.new('kernel32.dll', 'OpenProcess', 'lil', 'l').call(right_to_terminate_process, 0, process_id)
|
191
|
+
Win32API.new('kernel32.dll', 'TerminateProcess', 'll', 'l').call(handle, 0)
|
314
192
|
end
|
315
|
-
attr_writer :hwnd
|
316
193
|
|
317
194
|
def win_window
|
195
|
+
Vapir.require_winwindow
|
318
196
|
@win_window||= WinWindow.new(hwnd)
|
319
197
|
end
|
320
198
|
|
@@ -343,8 +221,8 @@ module Vapir
|
|
343
221
|
|
344
222
|
# Are we attached to an open browser?
|
345
223
|
def exists?
|
346
|
-
!!(@
|
347
|
-
@
|
224
|
+
!!(@browser_object && begin
|
225
|
+
@browser_object.name
|
348
226
|
rescue WIN32OLERuntimeError, NoMethodError
|
349
227
|
raise unless $!.message =~ ExistenceFailureCodesRE
|
350
228
|
false
|
@@ -367,12 +245,12 @@ module Vapir
|
|
367
245
|
|
368
246
|
# Return the title of the document
|
369
247
|
def title
|
370
|
-
@
|
248
|
+
@browser_object.document.title
|
371
249
|
end
|
372
250
|
|
373
251
|
# Return the status of the window, typically from the status bar at the bottom.
|
374
252
|
def status
|
375
|
-
return @
|
253
|
+
return @browser_object.statusText
|
376
254
|
end
|
377
255
|
|
378
256
|
#
|
@@ -383,7 +261,7 @@ module Vapir
|
|
383
261
|
# * url - string - the URL to navigate to
|
384
262
|
def goto(url)
|
385
263
|
assert_exists do
|
386
|
-
@
|
264
|
+
@browser_object.navigate(url)
|
387
265
|
wait
|
388
266
|
return @down_load_time
|
389
267
|
end
|
@@ -393,7 +271,7 @@ module Vapir
|
|
393
271
|
# an WIN32OLERuntimeError exception is raised if the browser cant go back
|
394
272
|
def back
|
395
273
|
assert_exists do
|
396
|
-
@
|
274
|
+
@browser_object.GoBack
|
397
275
|
wait
|
398
276
|
end
|
399
277
|
end
|
@@ -402,7 +280,7 @@ module Vapir
|
|
402
280
|
# an WIN32OLERuntimeError exception is raised if the browser cant go forward
|
403
281
|
def forward
|
404
282
|
assert_exists do
|
405
|
-
@
|
283
|
+
@browser_object.GoForward
|
406
284
|
wait
|
407
285
|
end
|
408
286
|
end
|
@@ -417,7 +295,7 @@ module Vapir
|
|
417
295
|
# an WIN32OLERuntimeError exception is raised if the browser cant refresh
|
418
296
|
def refresh
|
419
297
|
assert_exists do
|
420
|
-
@
|
298
|
+
@browser_object.refresh2(RefreshConstants::REFRESH_COMPLETELY)
|
421
299
|
wait
|
422
300
|
end
|
423
301
|
end
|
@@ -430,13 +308,13 @@ module Vapir
|
|
430
308
|
# Closes the Browser
|
431
309
|
def close
|
432
310
|
assert_exists
|
433
|
-
@
|
434
|
-
@
|
311
|
+
@browser_object.stop
|
312
|
+
@browser_object.quit
|
435
313
|
# TODO/fix timeout; this shouldn't be a hard-coded magic number.
|
436
314
|
::Waiter.try_for(32, :exception => WindowFailedToCloseException.new("The browser window did not close"), :interval => 1) do
|
437
315
|
begin
|
438
316
|
if exists?
|
439
|
-
@
|
317
|
+
@browser_object.quit
|
440
318
|
false
|
441
319
|
else
|
442
320
|
true
|
@@ -446,7 +324,7 @@ module Vapir
|
|
446
324
|
true
|
447
325
|
end
|
448
326
|
end
|
449
|
-
@
|
327
|
+
@browser_object=nil
|
450
328
|
end
|
451
329
|
|
452
330
|
# Maximize the window (expands to fill the screen)
|
@@ -486,18 +364,22 @@ module Vapir
|
|
486
364
|
|
487
365
|
# saves a screenshot of this browser window to the given filename.
|
488
366
|
#
|
489
|
-
#
|
490
|
-
#
|
491
|
-
#
|
492
|
-
# - :
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
367
|
+
# the screenshot format is BMP (DIB), so you should name your files to end with .bmp
|
368
|
+
#
|
369
|
+
# the last argument is an optional options hash, taking options:
|
370
|
+
# - :dc => (default is :window). may be one of:
|
371
|
+
# - :client takes a screenshot of the client area, which excludes the menu bar and other window trimmings.
|
372
|
+
# - :window (default) takes a screenshot of the full browser window
|
373
|
+
# - :desktop takes a screenshot of the full desktop
|
374
|
+
def screen_capture(filename, options = {})
|
375
|
+
unless options.is_a?(Hash)
|
376
|
+
dc = options
|
377
|
+
options = {:dc => dc}
|
378
|
+
if config.warn_deprecated
|
379
|
+
Kernel.warn_with_caller("WARNING: The API for #screen_capture has changed and the last argument is now an options hash. Please change calls to this method to specify :dc => #{dc.inspect}")
|
380
|
+
end
|
499
381
|
end
|
500
|
-
|
382
|
+
screen_capture_win_window(filename, options)
|
501
383
|
end
|
502
384
|
|
503
385
|
def dir
|
@@ -511,7 +393,7 @@ module Vapir
|
|
511
393
|
# Return the current document
|
512
394
|
def document
|
513
395
|
assert_exists
|
514
|
-
return @
|
396
|
+
return @browser_object.document
|
515
397
|
end
|
516
398
|
alias document_object document
|
517
399
|
|
@@ -522,7 +404,7 @@ module Vapir
|
|
522
404
|
# returns the current url, as displayed in the address bar of the browser
|
523
405
|
def url
|
524
406
|
assert_exists
|
525
|
-
return @
|
407
|
+
return @browser_object.LocationURL
|
526
408
|
end
|
527
409
|
|
528
410
|
# Error checkers
|
@@ -778,12 +660,7 @@ module Vapir
|
|
778
660
|
temp = element_by_absolute_xpath(modifiedXpath) # temp = a DOM/COM element
|
779
661
|
selectedElements << temp if temp != nil
|
780
662
|
end
|
781
|
-
|
782
|
-
if selectedElements.length == 0
|
783
|
-
return nil
|
784
|
-
else
|
785
|
-
return selectedElements
|
786
|
-
end
|
663
|
+
return selectedElements
|
787
664
|
end
|
788
665
|
|
789
666
|
# Method that iterates over IE DOM object and get the elements for the given
|
@@ -875,4 +752,21 @@ module Vapir
|
|
875
752
|
end
|
876
753
|
|
877
754
|
end # class IE
|
755
|
+
module WatirConfigCompatibility
|
756
|
+
module Visible
|
757
|
+
def visible
|
758
|
+
if config.warn_deprecated
|
759
|
+
Kernel.warn_with_caller "WARNING: #visible is deprecated; please use the new config framework with config.browser_visible"
|
760
|
+
end
|
761
|
+
config.browser_visible
|
762
|
+
end
|
763
|
+
def visible= visibility
|
764
|
+
if config.warn_deprecated
|
765
|
+
Kernel.warn_with_caller "WARNING: #visible= is deprecated; please use the new config framework with config.browser_visible="
|
766
|
+
end
|
767
|
+
config.browser_visible=visibility
|
768
|
+
end
|
769
|
+
end
|
770
|
+
Vapir::IE.send(:extend, Visible)
|
771
|
+
end
|
878
772
|
end
|