watir 2.0.4 → 3.0.0.rc1
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 +41 -0
- data/VERSION +1 -1
- data/lib/watir/collections.rb +9 -17
- data/lib/watir/container.rb +2 -14
- data/lib/watir/core.rb +1 -0
- data/lib/watir/dialogs/file_field.rb +4 -2
- data/lib/watir/element.rb +146 -90
- data/lib/watir/element_collections.rb +13 -11
- data/lib/watir/form.rb +4 -2
- data/lib/watir/frame.rb +15 -3
- data/lib/watir/ie-class.rb +100 -128
- data/lib/watir/image.rb +10 -13
- data/lib/watir/input_elements.rb +92 -156
- data/lib/watir/locator.rb +61 -66
- data/lib/watir/non_control_elements.rb +8 -1
- data/lib/watir/table.rb +89 -242
- data/lib/watir/window.rb +68 -0
- metadata +21 -14
data/lib/watir/image.rb
CHANGED
@@ -42,22 +42,22 @@ module Watir
|
|
42
42
|
return @o.invoke("fileCreatedDate")
|
43
43
|
end
|
44
44
|
|
45
|
-
# this method returns the filesize of the image
|
45
|
+
# this method returns the filesize of the image, as an int
|
46
46
|
def file_size
|
47
47
|
assert_exists
|
48
|
-
return @o.invoke("fileSize").
|
48
|
+
return @o.invoke("fileSize").to_i
|
49
49
|
end
|
50
50
|
|
51
|
-
# returns the width in pixels of the image, as
|
51
|
+
# returns the width in pixels of the image, as an int
|
52
52
|
def width
|
53
53
|
assert_exists
|
54
|
-
return @o.invoke("width").
|
54
|
+
return @o.invoke("width").to_i
|
55
55
|
end
|
56
56
|
|
57
|
-
# returns the height in pixels of the image, as
|
57
|
+
# returns the height in pixels of the image, as an int
|
58
58
|
def height
|
59
59
|
assert_exists
|
60
|
-
return @o.invoke("height").
|
60
|
+
return @o.invoke("height").to_i
|
61
61
|
end
|
62
62
|
|
63
63
|
# This method attempts to find out if the image was actually loaded by the web browser.
|
@@ -103,22 +103,19 @@ module Watir
|
|
103
103
|
def save(path)
|
104
104
|
@container.goto(src)
|
105
105
|
begin
|
106
|
-
|
106
|
+
fill_save_image_dialog(path)
|
107
107
|
@container.document.execCommand("SaveAs")
|
108
|
-
thrd.join(5)
|
109
108
|
ensure
|
110
109
|
@container.back
|
111
110
|
end
|
112
111
|
end
|
113
112
|
|
114
113
|
def fill_save_image_dialog(path)
|
115
|
-
command = "require 'rautomation';" <<
|
114
|
+
command = "require 'rubygems';require 'rautomation';" <<
|
116
115
|
"window=::RAutomation::Window.new(:title => 'Save Picture');" <<
|
117
|
-
"window.text_field(:class => 'Edit', :index => 0).set('#{path}');" <<
|
116
|
+
"window.text_field(:class => 'Edit', :index => 0).set('#{path.gsub(File::SEPARATOR, File::ALT_SEPARATOR)}');" <<
|
118
117
|
"window.button(:value => '&Save').click"
|
119
|
-
|
120
|
-
system("ruby -e \"#{command}\"")
|
121
|
-
end
|
118
|
+
IO.popen("ruby -e \"#{command}\"")
|
122
119
|
end
|
123
120
|
private :fill_save_image_dialog
|
124
121
|
|
data/lib/watir/input_elements.rb
CHANGED
@@ -2,9 +2,9 @@ module Watir
|
|
2
2
|
|
3
3
|
class InputElement < Element #:nodoc:all
|
4
4
|
def locate
|
5
|
-
|
6
|
-
@o = locator_or_element.is_a?(WIN32OLE) ? locator_or_element : locator_or_element.locate
|
5
|
+
@o = @container.locator_for(InputElementLocator, self.class::INPUT_TYPES, @how, @what, self.class).locate
|
7
6
|
end
|
7
|
+
|
8
8
|
def initialize(container, how, what)
|
9
9
|
set_container container
|
10
10
|
@how = how
|
@@ -22,199 +22,120 @@ module Watir
|
|
22
22
|
class SelectList < InputElement
|
23
23
|
#:stopdoc:
|
24
24
|
INPUT_TYPES = ["select-one", "select-multiple"]
|
25
|
-
#exposed to Option class
|
26
|
-
attr_accessor :o
|
27
25
|
#:startdoc:
|
28
26
|
|
27
|
+
def_wrap :multiple?, :multiple
|
28
|
+
|
29
29
|
# This method clears the selected items in the select box
|
30
30
|
def clear
|
31
|
-
|
32
|
-
|
33
|
-
wait = false
|
34
|
-
@o.each do |selectBoxItem|
|
35
|
-
if selectBoxItem.selected
|
36
|
-
selectBoxItem.selected = false
|
37
|
-
wait = true
|
38
|
-
end
|
31
|
+
perform_action do
|
32
|
+
options.each {|option| option.clear}
|
39
33
|
end
|
40
|
-
@container.wait if wait
|
41
|
-
highlight(:clear)
|
42
34
|
end
|
43
35
|
|
44
|
-
|
45
36
|
# This method selects an item, or items in a select box, by text.
|
46
37
|
# Raises NoValueFoundException if the specified value is not found.
|
47
38
|
# * item - the thing to select, string or reg exp
|
48
39
|
def select(item)
|
49
|
-
|
40
|
+
matching_options = []
|
41
|
+
perform_action do
|
42
|
+
matching_options = matching_items_in_select_list(:text, item) +
|
43
|
+
matching_items_in_select_list(:label, item) +
|
44
|
+
matching_items_in_select_list(:value, item)
|
45
|
+
raise NoValueFoundException, "No option with :text, :label or :value of #{item.inspect} in this select element" if matching_options.empty?
|
46
|
+
matching_options.each(&:select)
|
47
|
+
end
|
48
|
+
matching_options.first.text
|
50
49
|
end
|
51
|
-
alias :set :select
|
52
50
|
|
53
51
|
# Selects an item, or items in a select box, by value.
|
54
|
-
# Raises NoValueFoundException
|
55
|
-
# * item - the value of the thing to select, string
|
52
|
+
# Raises NoValueFoundException if the specified value is not found.
|
53
|
+
# * item - the value of the thing to select, string or reg exp
|
56
54
|
def select_value(item)
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
# Selects something from the select box
|
62
|
-
# * name - symbol :value or :text - how we find an item in the select box
|
63
|
-
# * item - string or reg exp - what we are looking for
|
64
|
-
def select_item_in_select_list(attribute, value) #:nodoc:
|
65
|
-
assert_exists
|
66
|
-
highlight(:set)
|
67
|
-
found = false
|
68
|
-
|
69
|
-
value = value.to_s unless [Regexp, String].any? { |e| value.kind_of? e }
|
70
|
-
|
71
|
-
@container.log "Setting box #{@o.name} to #{attribute.inspect} => #{value.inspect}"
|
72
|
-
@o.each do |option| # items in the list
|
73
|
-
if value.matches(option.invoke(attribute.to_s))
|
74
|
-
if option.selected
|
75
|
-
found = true
|
76
|
-
break
|
77
|
-
else
|
78
|
-
option.selected = true
|
79
|
-
dispatch_event("onChange")
|
80
|
-
@container.wait
|
81
|
-
found = true
|
82
|
-
break
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
unless found
|
88
|
-
raise NoValueFoundException, "No option with #{attribute.inspect} of #{value.inspect} in this select element"
|
89
|
-
end
|
90
|
-
highlight(:clear)
|
91
|
-
end
|
92
|
-
|
93
|
-
# Returns array of all text items displayed in a select box
|
94
|
-
# An empty array is returned if the select box has no contents.
|
95
|
-
# Raises UnknownObjectException if the select box is not found
|
96
|
-
def options
|
97
|
-
assert_exists
|
98
|
-
@container.log "There are #{@o.length} items"
|
99
|
-
returnArray = []
|
100
|
-
@o.each { |thisItem| returnArray << thisItem.text }
|
101
|
-
return returnArray
|
55
|
+
matching_options = matching_items_in_select_list(:value, item)
|
56
|
+
raise NoValueFoundException, "No option with :value of #{item.inspect} in this select element" if matching_options.empty?
|
57
|
+
matching_options.each(&:select)
|
58
|
+
matching_options.first.value
|
102
59
|
end
|
103
60
|
|
104
61
|
# Returns array of the selected text items in a select box
|
105
62
|
# Raises UnknownObjectException if the select box is not found.
|
106
63
|
def selected_options
|
107
|
-
|
108
|
-
returnArray = []
|
109
|
-
@container.log "There are #{@o.length} items"
|
110
|
-
@o.each do |thisItem|
|
111
|
-
if thisItem.selected
|
112
|
-
@container.log "Item (#{thisItem.text}) is selected"
|
113
|
-
returnArray << thisItem.text
|
114
|
-
end
|
115
|
-
end
|
116
|
-
return returnArray
|
64
|
+
options.select(&:selected?)
|
117
65
|
end
|
118
66
|
|
119
67
|
# Does the SelectList include the specified option (text)?
|
120
68
|
def include? text_or_regexp
|
121
|
-
|
69
|
+
!options.map(&:text).grep(text_or_regexp).empty?
|
122
70
|
end
|
123
71
|
|
124
72
|
# Is the specified option (text) selected? Raises exception of option does not exist.
|
125
73
|
def selected? text_or_regexp
|
126
|
-
unless
|
127
|
-
|
128
|
-
end
|
129
|
-
|
130
|
-
getSelectedItems.grep(text_or_regexp).size > 0
|
131
|
-
end
|
132
|
-
|
133
|
-
# this method provides the access to the <tt><option></tt> item in select_list
|
134
|
-
#
|
135
|
-
# Usage example:
|
136
|
-
#
|
137
|
-
# Given the following html:
|
138
|
-
#
|
139
|
-
# <select id="gender">
|
140
|
-
# <option value="U">Unknown</option>
|
141
|
-
# <option value="M" selected>Male</option>
|
142
|
-
# <option value="F">Female</option>
|
143
|
-
# </select>
|
144
|
-
#
|
145
|
-
# get the +value+ attribute of option with visible +text+ 'Female'
|
146
|
-
# browser.select_list(:id, 'gender').option(:text, 'Female').value #=> 'F'
|
147
|
-
# or find out if the +value+ 'M' is selected
|
148
|
-
# browser.select_list(:id, 'gender').option(:value, 'M').selected #=> true
|
149
|
-
#
|
150
|
-
# * attribute - Symbol :value, :text or other attribute - how we find an item in the select box
|
151
|
-
# * value - string or reg exp - what we are looking for
|
152
|
-
def option(attribute, value)
|
153
|
-
assert_exists
|
154
|
-
Option.new(self, attribute, value)
|
74
|
+
raise UnknownObjectException, "Option #{text_or_regexp.inspect} not found." unless include? text_or_regexp
|
75
|
+
!selected_options.map(&:text).grep(text_or_regexp).empty?
|
155
76
|
end
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
@option.selected
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
|
-
class OptionWrapper #:nodoc:all
|
174
|
-
include OptionAccess
|
175
|
-
def initialize(option)
|
176
|
-
@option = option
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def matching_items_in_select_list(attribute, value)
|
81
|
+
options.select do |opt|
|
82
|
+
if value.is_a?(Regexp)
|
83
|
+
opt.send(attribute) =~ value
|
84
|
+
elsif value.is_a?(String) || value.is_a?(Numeric)
|
85
|
+
opt.send(attribute) == value
|
86
|
+
else
|
87
|
+
raise TypeError, "#{value.inspect} can be only String, Regexp or Numeric!"
|
88
|
+
end
|
89
|
+
end
|
177
90
|
end
|
178
91
|
end
|
179
92
|
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
@what = value
|
189
|
-
@option = nil
|
190
|
-
|
191
|
-
unless [:text, :value, :label].include? attribute
|
192
|
-
raise MissingWayOfFindingObjectException,
|
193
|
-
"Option does not support attribute #{@how}"
|
194
|
-
end
|
195
|
-
@select_list.o.each do |option| # items in the list
|
196
|
-
if value.matches(option.invoke(attribute.to_s))
|
197
|
-
@option = option
|
198
|
-
break
|
93
|
+
class Option < NonControlElement
|
94
|
+
|
95
|
+
def select
|
96
|
+
perform_action do
|
97
|
+
unless selected?
|
98
|
+
ole_object.selected = true
|
99
|
+
select_list.dispatch_event("onChange")
|
100
|
+
@container.wait
|
199
101
|
end
|
200
102
|
end
|
201
|
-
|
202
103
|
end
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
104
|
+
|
105
|
+
def clear
|
106
|
+
raise TypeError, "you can only clear multi-selects" unless select_list.multiple?
|
107
|
+
|
108
|
+
perform_action do
|
109
|
+
if selected?
|
110
|
+
ole_object.selected = false
|
111
|
+
select_list.dispatch_event("onChange")
|
112
|
+
@container.wait
|
113
|
+
end
|
207
114
|
end
|
208
115
|
end
|
209
|
-
|
210
|
-
|
211
|
-
# select the accessed option in select_list
|
212
|
-
def select
|
116
|
+
|
117
|
+
def selected?
|
213
118
|
assert_exists
|
214
|
-
|
119
|
+
ole_object.selected
|
120
|
+
end
|
121
|
+
|
122
|
+
def text
|
123
|
+
l = label
|
124
|
+
l.empty? ? super : l rescue ''
|
125
|
+
end
|
126
|
+
|
127
|
+
private
|
128
|
+
|
129
|
+
def select_list
|
130
|
+
return @select_list if @select_list
|
131
|
+
el = parent
|
132
|
+
el = el.parent until el.is_a?(SelectList)
|
133
|
+
|
134
|
+
raise "SELECT element was not found for #{self}!" unless el
|
135
|
+
@select_list = el
|
215
136
|
end
|
216
137
|
end
|
217
|
-
|
138
|
+
|
218
139
|
#
|
219
140
|
# Input: Button
|
220
141
|
#
|
@@ -224,6 +145,16 @@ module Watir
|
|
224
145
|
#:stopdoc:
|
225
146
|
INPUT_TYPES = ["button", "submit", "image", "reset"]
|
226
147
|
#:startdoc:
|
148
|
+
|
149
|
+
alias_method :__value, :value
|
150
|
+
|
151
|
+
def text
|
152
|
+
val = __value
|
153
|
+
val.empty? ? super : val
|
154
|
+
end
|
155
|
+
|
156
|
+
alias_method :value, :text
|
157
|
+
|
227
158
|
end
|
228
159
|
|
229
160
|
#
|
@@ -242,6 +173,8 @@ module Watir
|
|
242
173
|
# Raises UnknownObjectException if the object can't be found.
|
243
174
|
def_wrap :readonly?, :readOnly
|
244
175
|
|
176
|
+
alias_method :text, :value
|
177
|
+
|
245
178
|
#:startdoc:
|
246
179
|
|
247
180
|
# return number of maxlength attribute
|
@@ -254,7 +187,6 @@ module Watir
|
|
254
187
|
end
|
255
188
|
end
|
256
189
|
|
257
|
-
|
258
190
|
def text_string_creator
|
259
191
|
n = []
|
260
192
|
n << "length:".ljust(TO_S_SIZE) + self.size.to_s
|
@@ -442,6 +374,10 @@ module Watir
|
|
442
374
|
end
|
443
375
|
value
|
444
376
|
end
|
377
|
+
|
378
|
+
def label
|
379
|
+
@container.label(:for => name).text
|
380
|
+
end
|
445
381
|
end
|
446
382
|
|
447
383
|
# this class can be used to access hidden field objects
|
data/lib/watir/locator.rb
CHANGED
@@ -3,6 +3,28 @@ module Watir
|
|
3
3
|
include Watir
|
4
4
|
include Watir::Exception
|
5
5
|
|
6
|
+
def initialize container, tags, klass
|
7
|
+
@container = container
|
8
|
+
@tags = tags
|
9
|
+
@klass = klass
|
10
|
+
end
|
11
|
+
|
12
|
+
def each
|
13
|
+
if has_excluding_specifiers?
|
14
|
+
locate_elements_by_xpath_css_ole.each do |element|
|
15
|
+
yield element
|
16
|
+
end
|
17
|
+
else
|
18
|
+
@tags.each do |tag|
|
19
|
+
each_element(tag) do |element|
|
20
|
+
next unless type_matches?(element.ole_object) && match_with_specifiers?(element)
|
21
|
+
yield element
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
nil
|
26
|
+
end
|
27
|
+
|
6
28
|
def document
|
7
29
|
@document ||= @container.document
|
8
30
|
end
|
@@ -30,7 +52,11 @@ module Watir
|
|
30
52
|
|
31
53
|
def match_with_specifiers?(element)
|
32
54
|
return true if has_excluding_specifiers?
|
33
|
-
@specifiers.all?
|
55
|
+
@specifiers.all? do |how, what|
|
56
|
+
how == :index ||
|
57
|
+
(how.to_s =~ /^data_.*/ && element.send(how) == what) ||
|
58
|
+
match?(element, how, what)
|
59
|
+
end
|
34
60
|
end
|
35
61
|
|
36
62
|
def has_excluding_specifiers?
|
@@ -42,7 +68,7 @@ module Watir
|
|
42
68
|
@specifiers = {:index => Watir::IE.base_index} # default if not specified
|
43
69
|
normalize_specifiers! specifiers
|
44
70
|
end
|
45
|
-
|
71
|
+
|
46
72
|
def locate_by_id
|
47
73
|
# Searching through all elements returned by __ole_inner_elements
|
48
74
|
# is *significantly* slower than IE's getElementById() and
|
@@ -57,20 +83,30 @@ module Watir
|
|
57
83
|
if the_id && the_id.class == String
|
58
84
|
element = document.getElementById(the_id) rescue nil
|
59
85
|
# Return if our fast match really HAS a matching :id
|
60
|
-
return element if element && element.invoke('id') == the_id
|
86
|
+
return element if element && element.invoke('id') == the_id && type_matches?(element) && match_with_specifiers?(create_element element)
|
61
87
|
end
|
62
88
|
|
63
89
|
nil
|
64
90
|
end
|
65
91
|
|
66
|
-
def
|
92
|
+
def locate_elements_by_xpath_css_ole
|
93
|
+
els = []
|
94
|
+
|
67
95
|
if @specifiers[:xpath]
|
68
|
-
|
96
|
+
els = @container.send(:elements_by_xpath, @specifiers[:xpath])
|
69
97
|
elsif @specifiers[:css]
|
70
|
-
|
98
|
+
els = @container.send(:elements_by_css, @specifiers[:css])
|
71
99
|
elsif @specifiers[:ole_object]
|
72
|
-
return @specifiers[:ole_object]
|
100
|
+
return [@specifiers[:ole_object]]
|
73
101
|
end
|
102
|
+
|
103
|
+
els.select {|element| type_matches?(element) && match_with_specifiers?(create_element element)}
|
104
|
+
end
|
105
|
+
|
106
|
+
def type_matches?(el)
|
107
|
+
@tags == ["*"] ||
|
108
|
+
@tags.include?(el.tagName) ||
|
109
|
+
@tags.include?(el.invoke('type')) rescue false
|
74
110
|
end
|
75
111
|
|
76
112
|
def create_element ole_object
|
@@ -86,30 +122,16 @@ module Watir
|
|
86
122
|
end
|
87
123
|
|
88
124
|
class TaggedElementLocator < Locator
|
89
|
-
def
|
90
|
-
@container = container
|
91
|
-
@tag = tag
|
92
|
-
@klass = klass || Element
|
93
|
-
end
|
94
|
-
|
95
|
-
def each_element tag
|
125
|
+
def each_element(tag)
|
96
126
|
document.getElementsByTagName(tag).each do |ole_object|
|
97
127
|
yield create_element ole_object
|
98
128
|
end
|
99
129
|
end
|
100
130
|
|
101
|
-
def each
|
102
|
-
each_element(@tag) do |element|
|
103
|
-
next unless match_with_specifiers?(element)
|
104
|
-
yield element
|
105
|
-
end
|
106
|
-
nil
|
107
|
-
end
|
108
|
-
|
109
131
|
def locate
|
110
132
|
el = locate_by_id
|
111
133
|
return el if el
|
112
|
-
return
|
134
|
+
return locate_elements_by_xpath_css_ole[0] if has_excluding_specifiers?
|
113
135
|
|
114
136
|
count = Watir::IE.base_index - 1
|
115
137
|
each do |element|
|
@@ -124,7 +146,7 @@ module Watir
|
|
124
146
|
method = element.method(how)
|
125
147
|
rescue NameError
|
126
148
|
raise MissingWayOfFindingObjectException,
|
127
|
-
"#{how} is an unknown way of finding a <#{@
|
149
|
+
"#{how} is an unknown way of finding a <#{@tags.join(", ")}> element (#{what})"
|
128
150
|
end
|
129
151
|
case method.arity
|
130
152
|
when 0
|
@@ -133,18 +155,14 @@ module Watir
|
|
133
155
|
method.call(what)
|
134
156
|
else
|
135
157
|
raise MissingWayOfFindingObjectException,
|
136
|
-
"#{how} is an unknown way of finding a <#{@
|
158
|
+
"#{how} is an unknown way of finding a <#{@tags.join(", ")}> element (#{what})"
|
137
159
|
end
|
138
160
|
end
|
139
161
|
|
140
162
|
end
|
141
163
|
|
142
164
|
class FrameLocator < TaggedElementLocator
|
143
|
-
def
|
144
|
-
super(container, Frame::TAG, Frame)
|
145
|
-
end
|
146
|
-
|
147
|
-
def each_element tag
|
165
|
+
def each_element(tag)
|
148
166
|
frames = document.frames
|
149
167
|
i = 0
|
150
168
|
document.getElementsByTagName(tag).each do |ole_object|
|
@@ -155,21 +173,9 @@ module Watir
|
|
155
173
|
end
|
156
174
|
end
|
157
175
|
|
158
|
-
def each
|
159
|
-
@tag.each do |t|
|
160
|
-
each_element(t) do |element|
|
161
|
-
next unless match_with_specifiers?(element)
|
162
|
-
yield element
|
163
|
-
end
|
164
|
-
end
|
165
|
-
nil
|
166
|
-
end
|
167
|
-
|
168
176
|
def locate
|
169
|
-
# do not locate frames by getElementById since can't get the correct
|
177
|
+
# do not locate frames by getElementById or by xpath since can't get the correct
|
170
178
|
# 'document' related with that ole_object like it's done in #each_element
|
171
|
-
return locate_by_xpath_css_ole if has_excluding_specifiers?
|
172
|
-
|
173
179
|
count = Watir::IE.base_index - 1
|
174
180
|
each do |frame|
|
175
181
|
count += 1
|
@@ -179,10 +185,6 @@ module Watir
|
|
179
185
|
end
|
180
186
|
|
181
187
|
class FormLocator < TaggedElementLocator
|
182
|
-
def initialize(container)
|
183
|
-
super(container, 'FORM', Form)
|
184
|
-
end
|
185
|
-
|
186
188
|
def each_element(tag)
|
187
189
|
document.forms.each do |form|
|
188
190
|
yield create_element form
|
@@ -191,12 +193,6 @@ module Watir
|
|
191
193
|
end
|
192
194
|
|
193
195
|
class InputElementLocator < Locator
|
194
|
-
def initialize container, types, klass
|
195
|
-
@container = container
|
196
|
-
@types = types
|
197
|
-
@klass = klass || Element
|
198
|
-
end
|
199
|
-
|
200
196
|
def each_element
|
201
197
|
elements = locate_by_name || @container.__ole_inner_elements
|
202
198
|
elements.each do |object|
|
@@ -208,7 +204,7 @@ module Watir
|
|
208
204
|
def locate
|
209
205
|
el = locate_by_id
|
210
206
|
return el if el
|
211
|
-
return
|
207
|
+
return locate_elements_by_xpath_css_ole[0] if has_excluding_specifiers?
|
212
208
|
|
213
209
|
count = Watir::IE.base_index - 1
|
214
210
|
each do |element|
|
@@ -218,13 +214,19 @@ module Watir
|
|
218
214
|
end
|
219
215
|
|
220
216
|
def each
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
217
|
+
if has_excluding_specifiers?
|
218
|
+
locate_elements_by_xpath_css_ole.each do |element|
|
219
|
+
yield element
|
220
|
+
end
|
221
|
+
else
|
222
|
+
each_element do |element|
|
223
|
+
next unless type_matches?(element.ole_object) && match_with_specifiers?(element)
|
224
|
+
yield element
|
225
|
+
end
|
226
|
+
end
|
225
227
|
nil
|
226
228
|
end
|
227
|
-
|
229
|
+
|
228
230
|
# return true if the element matches the provided how and what
|
229
231
|
def match? element, how, what
|
230
232
|
begin
|
@@ -248,11 +250,4 @@ module Watir
|
|
248
250
|
end
|
249
251
|
end
|
250
252
|
|
251
|
-
# This is like the TaggedElementLocator but
|
252
|
-
# get all the elements by forcing @tag to be '*'
|
253
|
-
class ElementLocator < TaggedElementLocator
|
254
|
-
def initialize(container)
|
255
|
-
super(container, "*", Element)
|
256
|
-
end
|
257
|
-
end
|
258
253
|
end
|