watir 3.0.0.rc1 → 3.0.0.rc2
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 +9 -1
- data/VERSION +1 -1
- data/lib/watir/collections.rb +1 -1
- data/lib/watir/element.rb +28 -12
- data/lib/watir/form.rb +1 -1
- data/lib/watir/frame.rb +1 -3
- data/lib/watir/ie-class.rb +2 -5
- data/lib/watir/ie-process.rb +2 -1
- data/lib/watir/input_elements.rb +24 -9
- data/lib/watir/locator.rb +19 -33
- data/lib/watir/table.rb +1 -1
- metadata +7 -7
data/CHANGES
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
== 3.0.0 - 2012/
|
|
1
|
+
== 3.0.0.rc2 - 2012/02/04
|
|
2
|
+
|
|
3
|
+
* Browser#textarea(s) method for searching <textarea> elements
|
|
4
|
+
* Element#focus works with IE9
|
|
5
|
+
* Element#focused? returns the state of focus on that element
|
|
6
|
+
* Element#to_subtype returns Element if non-supported tag found instead of crashing
|
|
7
|
+
* searching by :class will match now partially like other tools behave (e.g. jQuery)
|
|
8
|
+
|
|
9
|
+
== 3.0.0.rc1 - 2012/01/13 - more conformance with WatirSpec
|
|
2
10
|
|
|
3
11
|
* Button#text returns value if exists instead of text
|
|
4
12
|
* Browser#goto prepends url automatically with http:// if scheme is missing
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.0.0.
|
|
1
|
+
3.0.0.rc2
|
data/lib/watir/collections.rb
CHANGED
|
@@ -23,7 +23,7 @@ module Watir
|
|
|
23
23
|
def element_tag; 'SELECT'; end
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
%w[Button FileField Radio TextField Hidden].each do |element|
|
|
26
|
+
%w[Button FileField Radio TextField TextArea Hidden].each do |element|
|
|
27
27
|
module_eval %Q{
|
|
28
28
|
class #{element}s < InputElementCollections; end
|
|
29
29
|
}
|
data/lib/watir/element.rb
CHANGED
|
@@ -56,20 +56,24 @@ module Watir
|
|
|
56
56
|
private
|
|
57
57
|
def self.def_wrap(method_name, ole_method_name=nil)
|
|
58
58
|
class_eval "def #{method_name}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
assert_exists
|
|
60
|
+
ole_object.invoke('#{ole_method_name || method_name}')
|
|
61
|
+
end"
|
|
62
62
|
end
|
|
63
63
|
|
|
64
64
|
def self.def_wrap_guard(method_name, ole_method_name = nil)
|
|
65
65
|
class_eval "def #{method_name}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
66
|
+
assert_exists
|
|
67
|
+
begin
|
|
68
|
+
ole_object.invoke('#{ole_method_name || method_name}')
|
|
69
|
+
rescue
|
|
70
|
+
begin
|
|
71
|
+
ole_object.getAttribute('#{ole_method_name || method_name}') || ''
|
|
72
|
+
rescue
|
|
73
|
+
''
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end"
|
|
73
77
|
end
|
|
74
78
|
|
|
75
79
|
|
|
@@ -151,8 +155,10 @@ module Watir
|
|
|
151
155
|
self.send(ole_object.invoke('type'), :ole_object, ole_object)
|
|
152
156
|
elsif tag == "select"
|
|
153
157
|
self.select_list(:ole_object, ole_object)
|
|
154
|
-
|
|
158
|
+
elsif self.respond_to?(tag.downcase)
|
|
155
159
|
self.send(tag.downcase, :ole_object, ole_object)
|
|
160
|
+
else
|
|
161
|
+
self
|
|
156
162
|
end
|
|
157
163
|
end
|
|
158
164
|
|
|
@@ -416,6 +422,10 @@ module Watir
|
|
|
416
422
|
event_name = :initEvent
|
|
417
423
|
event_type = 'HTMLEvents'
|
|
418
424
|
event_args = [event, true, true]
|
|
425
|
+
when 'select'
|
|
426
|
+
event_name = :initUIEvent
|
|
427
|
+
event_type = 'UIEvent'
|
|
428
|
+
event_args = [event, true, true, @container.page_container.document.parentWindow.window,0]
|
|
419
429
|
when 'keydown', 'keypress', 'keyup'
|
|
420
430
|
event_name = :initKeyboardEvent
|
|
421
431
|
event_type = 'KeyboardEvent'
|
|
@@ -442,7 +452,13 @@ module Watir
|
|
|
442
452
|
assert_exists
|
|
443
453
|
assert_enabled
|
|
444
454
|
@page_container.focus
|
|
445
|
-
ole_object.focus
|
|
455
|
+
ole_object.focus(0)
|
|
456
|
+
end
|
|
457
|
+
|
|
458
|
+
def focused?
|
|
459
|
+
assert_exists
|
|
460
|
+
assert_enabled
|
|
461
|
+
@page_container.document.activeElement.uniqueNumber == unique_number
|
|
446
462
|
end
|
|
447
463
|
|
|
448
464
|
# Returns whether this element actually exists.
|
data/lib/watir/form.rb
CHANGED
data/lib/watir/frame.rb
CHANGED
|
@@ -55,9 +55,7 @@ module Watir
|
|
|
55
55
|
wrapper = "_watir_helper_div_#{Time.now.to_i}"
|
|
56
56
|
cmd = "var e = document.createElement('DIV'); e.style.display = 'none'; e.id='#{wrapper}'; e.innerHTML = eval('#{escaped_src}'); document.body.appendChild(e);"
|
|
57
57
|
document.parentWindow.execScript(cmd)
|
|
58
|
-
|
|
59
|
-
result_value = wrapper_obj.innerHTML
|
|
60
|
-
result_value
|
|
58
|
+
document.getElementById(wrapper).wrapper_obj.innerHTML
|
|
61
59
|
end
|
|
62
60
|
|
|
63
61
|
end
|
data/lib/watir/ie-class.rb
CHANGED
|
@@ -417,12 +417,9 @@ module Watir
|
|
|
417
417
|
rescue WIN32OLERuntimeError, NoMethodError #if eval fails we need to use execScript(source.to_s) which does not return a value, hence the workaround
|
|
418
418
|
escaped_src = source.to_s.gsub(/[\r\n']/) {|m| "\\#{m}"}
|
|
419
419
|
wrapper = "_watir_helper_div_#{rand(100000)}"
|
|
420
|
-
cmd = "var e = document.createElement('DIV'); e.id='#{wrapper}'; e.innerHTML = eval('#{escaped_src}'); document.body.appendChild(e);"
|
|
420
|
+
cmd = "var e = document.createElement('DIV'); e.style.display='none'; e.id='#{wrapper}'; e.innerHTML = eval('#{escaped_src}'); document.body.appendChild(e);"
|
|
421
421
|
document.parentWindow.execScript(cmd)
|
|
422
|
-
|
|
423
|
-
result_value = wrapper_obj.innerHTML
|
|
424
|
-
wrapper_obj.style.display = 'none'
|
|
425
|
-
result_value
|
|
422
|
+
document.getElementById(wrapper).innerHTML
|
|
426
423
|
end
|
|
427
424
|
|
|
428
425
|
# clear the list of urls that we have visited
|
data/lib/watir/ie-process.rb
CHANGED
|
@@ -6,7 +6,8 @@ module Watir
|
|
|
6
6
|
def self.start
|
|
7
7
|
program_files = ENV['ProgramFiles'] || "c:\\Program Files"
|
|
8
8
|
startup_command = "#{program_files}\\Internet Explorer\\iexplore.exe"
|
|
9
|
-
startup_command << " -nomerge" if IE.version_parts.first.to_i
|
|
9
|
+
startup_command << " -nomerge" if IE.version_parts.first.to_i == 8
|
|
10
|
+
startup_command << " -noframemerging" if IE.version_parts.first.to_i >= 9
|
|
10
11
|
process_info = ::Process.create('app_name' => "#{startup_command} about:blank")
|
|
11
12
|
process_id = process_info.process_id
|
|
12
13
|
new process_id
|
data/lib/watir/input_elements.rb
CHANGED
|
@@ -237,8 +237,8 @@ module Watir
|
|
|
237
237
|
raise UnknownObjectException, "Unable to locate destination using #{destination_how } and #{destination_what } "
|
|
238
238
|
end
|
|
239
239
|
|
|
240
|
-
@o.focus
|
|
241
|
-
@o.select
|
|
240
|
+
@o.focus(0)
|
|
241
|
+
@o.select(0)
|
|
242
242
|
value = self.value
|
|
243
243
|
|
|
244
244
|
dispatch_event("onSelect")
|
|
@@ -265,8 +265,8 @@ module Watir
|
|
|
265
265
|
highlight(:set)
|
|
266
266
|
|
|
267
267
|
@o.scrollIntoView
|
|
268
|
-
@o.focus
|
|
269
|
-
@o.select
|
|
268
|
+
@o.focus(0)
|
|
269
|
+
@o.select(0)
|
|
270
270
|
dispatch_event("onSelect")
|
|
271
271
|
@o.value = ""
|
|
272
272
|
dispatch_event("onKeyPress")
|
|
@@ -286,7 +286,7 @@ module Watir
|
|
|
286
286
|
|
|
287
287
|
highlight(:set)
|
|
288
288
|
@o.scrollIntoView
|
|
289
|
-
@o.focus
|
|
289
|
+
@o.focus(0)
|
|
290
290
|
type_by_character(value)
|
|
291
291
|
highlight(:clear)
|
|
292
292
|
end
|
|
@@ -303,8 +303,8 @@ module Watir
|
|
|
303
303
|
highlight(:set)
|
|
304
304
|
@o.scrollIntoView
|
|
305
305
|
if type_keys
|
|
306
|
-
@o.focus
|
|
307
|
-
@o.select
|
|
306
|
+
@o.focus(0)
|
|
307
|
+
@o.select(0)
|
|
308
308
|
dispatch_event("onSelect")
|
|
309
309
|
dispatch_event("onKeyPress")
|
|
310
310
|
@o.value = ""
|
|
@@ -335,6 +335,10 @@ module Watir
|
|
|
335
335
|
self
|
|
336
336
|
end
|
|
337
337
|
|
|
338
|
+
def label
|
|
339
|
+
@container.label(:for => name).text
|
|
340
|
+
end
|
|
341
|
+
|
|
338
342
|
private
|
|
339
343
|
|
|
340
344
|
# Type the characters in the specified string (value) one by one.
|
|
@@ -375,8 +379,19 @@ module Watir
|
|
|
375
379
|
value
|
|
376
380
|
end
|
|
377
381
|
|
|
378
|
-
|
|
379
|
-
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
class TextArea < TextField
|
|
385
|
+
INPUT_TYPES = ["textarea"]
|
|
386
|
+
|
|
387
|
+
Watir::Container.module_eval do
|
|
388
|
+
def textareas(how={}, what=nil)
|
|
389
|
+
TextAreas.new(self, how, what)
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
def textarea(how={}, what=nil)
|
|
393
|
+
TextArea.new(self, how, what)
|
|
394
|
+
end
|
|
380
395
|
end
|
|
381
396
|
end
|
|
382
397
|
|
data/lib/watir/locator.rb
CHANGED
|
@@ -54,11 +54,28 @@ module Watir
|
|
|
54
54
|
return true if has_excluding_specifiers?
|
|
55
55
|
@specifiers.all? do |how, what|
|
|
56
56
|
how == :index ||
|
|
57
|
-
(how
|
|
58
|
-
|
|
57
|
+
(how == :class_name && match_class?(element, what)) ||
|
|
58
|
+
match?(element, how, what)
|
|
59
59
|
end
|
|
60
60
|
end
|
|
61
61
|
|
|
62
|
+
def match_class? element, what
|
|
63
|
+
classes = element.class_name.split(/\s+/)
|
|
64
|
+
classes.any? {|clazz| what.matches(clazz)}
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# return true if the element matches the provided how and what
|
|
68
|
+
def match? element, how, what
|
|
69
|
+
begin
|
|
70
|
+
attribute = element.send(how)
|
|
71
|
+
rescue NoMethodError
|
|
72
|
+
raise MissingWayOfFindingObjectException,
|
|
73
|
+
"#{how} is an unknown way of finding a <#{@tags.join(", ")}> element (#{what})"
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
what.matches(attribute)
|
|
77
|
+
end
|
|
78
|
+
|
|
62
79
|
def has_excluding_specifiers?
|
|
63
80
|
@specifiers.keys.any? {|specifier| [:css, :xpath, :ole_object].include? specifier}
|
|
64
81
|
end
|
|
@@ -140,25 +157,6 @@ module Watir
|
|
|
140
157
|
end # elements
|
|
141
158
|
nil
|
|
142
159
|
end
|
|
143
|
-
|
|
144
|
-
def match?(element, how, what)
|
|
145
|
-
begin
|
|
146
|
-
method = element.method(how)
|
|
147
|
-
rescue NameError
|
|
148
|
-
raise MissingWayOfFindingObjectException,
|
|
149
|
-
"#{how} is an unknown way of finding a <#{@tags.join(", ")}> element (#{what})"
|
|
150
|
-
end
|
|
151
|
-
case method.arity
|
|
152
|
-
when 0
|
|
153
|
-
what.matches method.call
|
|
154
|
-
when 1
|
|
155
|
-
method.call(what)
|
|
156
|
-
else
|
|
157
|
-
raise MissingWayOfFindingObjectException,
|
|
158
|
-
"#{how} is an unknown way of finding a <#{@tags.join(", ")}> element (#{what})"
|
|
159
|
-
end
|
|
160
|
-
end
|
|
161
|
-
|
|
162
160
|
end
|
|
163
161
|
|
|
164
162
|
class FrameLocator < TaggedElementLocator
|
|
@@ -227,18 +225,6 @@ module Watir
|
|
|
227
225
|
nil
|
|
228
226
|
end
|
|
229
227
|
|
|
230
|
-
# return true if the element matches the provided how and what
|
|
231
|
-
def match? element, how, what
|
|
232
|
-
begin
|
|
233
|
-
attribute = element.send(how)
|
|
234
|
-
rescue NoMethodError
|
|
235
|
-
raise MissingWayOfFindingObjectException,
|
|
236
|
-
"#{how} is an unknown way of finding an <INPUT> element (#{what})"
|
|
237
|
-
end
|
|
238
|
-
|
|
239
|
-
what.matches(attribute)
|
|
240
|
-
end
|
|
241
|
-
|
|
242
228
|
private
|
|
243
229
|
|
|
244
230
|
def locate_by_name
|
data/lib/watir/table.rb
CHANGED
|
@@ -14,7 +14,7 @@ module Watir
|
|
|
14
14
|
@o.rows.each do |row|
|
|
15
15
|
cells_memo = []
|
|
16
16
|
row.cells.each do |cell|
|
|
17
|
-
cells_memo << TableCell.new(self, :ole_object, cell).text
|
|
17
|
+
cells_memo << TableCell.new(self, :ole_object, cell).text.gsub("\r\n","")
|
|
18
18
|
end
|
|
19
19
|
rows_memo << cells_memo
|
|
20
20
|
end
|
metadata
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: watir
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 15424113
|
|
5
5
|
prerelease: 6
|
|
6
6
|
segments:
|
|
7
7
|
- 3
|
|
8
8
|
- 0
|
|
9
9
|
- 0
|
|
10
10
|
- rc
|
|
11
|
-
-
|
|
12
|
-
version: 3.0.0.
|
|
11
|
+
- 2
|
|
12
|
+
version: 3.0.0.rc2
|
|
13
13
|
platform: ruby
|
|
14
14
|
authors:
|
|
15
15
|
- Bret Pettichord
|
|
@@ -17,7 +17,7 @@ autorequire:
|
|
|
17
17
|
bindir: bin
|
|
18
18
|
cert_chain: []
|
|
19
19
|
|
|
20
|
-
date: 2012-
|
|
20
|
+
date: 2012-02-04 00:00:00 Z
|
|
21
21
|
dependencies:
|
|
22
22
|
- !ruby/object:Gem::Dependency
|
|
23
23
|
name: win32-process
|
|
@@ -59,14 +59,14 @@ dependencies:
|
|
|
59
59
|
requirements:
|
|
60
60
|
- - "="
|
|
61
61
|
- !ruby/object:Gem::Version
|
|
62
|
-
hash:
|
|
62
|
+
hash: 15424113
|
|
63
63
|
segments:
|
|
64
64
|
- 3
|
|
65
65
|
- 0
|
|
66
66
|
- 0
|
|
67
67
|
- rc
|
|
68
|
-
-
|
|
69
|
-
version: 3.0.0.
|
|
68
|
+
- 2
|
|
69
|
+
version: 3.0.0.rc2
|
|
70
70
|
type: :runtime
|
|
71
71
|
version_requirements: *id003
|
|
72
72
|
- !ruby/object:Gem::Dependency
|