operawatir 0.4.1.pre5-jruby → 0.4.1.pre6-jruby
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS +1 -0
- data/CHANGES +170 -3
- data/README.md +30 -27
- data/VERSION +1 -1
- data/bin/desktopwatir +19 -16
- data/bin/operawatir +4 -4
- data/lib/operadriver/client-combined-nodeps.jar +0 -0
- data/lib/operadriver/webdriver-opera.jar +0 -0
- data/lib/operawatir/browser.rb +1 -2
- data/lib/operawatir/collection.rb +1 -1
- data/lib/operawatir/compat/collection.rb +13 -0
- data/lib/operawatir/compat/element.rb +57 -15
- data/lib/operawatir/compat/window.rb +41 -0
- data/lib/operawatir/desktop_browser.rb +26 -9
- data/lib/operawatir/desktop_container.rb +82 -29
- data/lib/operawatir/element.rb +48 -24
- data/lib/operawatir/keys.rb +18 -25
- data/lib/operawatir/preferences.rb +223 -6
- data/lib/operawatir/quickwidgets/quick_button.rb +8 -2
- data/lib/operawatir/quickwidgets/quick_checkbox.rb +4 -4
- data/lib/operawatir/quickwidgets/quick_editfield.rb +1 -1
- data/lib/operawatir/quickwidgets/quick_find.rb +11 -0
- data/lib/operawatir/quickwidgets/quick_griditem.rb +11 -0
- data/lib/operawatir/quickwidgets/quick_gridlayout.rb +11 -0
- data/lib/operawatir/quickwidgets/quick_searchfield.rb +5 -1
- data/lib/operawatir/quickwidgets/quick_tab.rb +0 -1
- data/lib/operawatir/quickwidgets/quick_treeitem.rb +22 -1
- data/lib/operawatir/quickwidgets/quick_widget.rb +61 -22
- data/lib/operawatir/quickwidgets/quick_window.rb +26 -0
- data/lib/operawatir/quickwidgets.rb +2 -1
- data/lib/operawatir/window.rb +36 -25
- data/lib/operawatir.rb +1 -1
- data/operawatir.gemspec +38 -5
- data/spec/operawatir/core/element_spec.rb +5 -0
- data/spec/operawatir/core/window_spec.rb +42 -0
- data/spec/operawatir/desktop/desktopbrowser_spec.rb +16 -0
- data/spec/operawatir/desktop/quickaddressfield_spec.rb +15 -3
- data/spec/operawatir/desktop/quickbutton_spec.rb +234 -20
- data/spec/operawatir/desktop/quickcheckbox_spec.rb +36 -0
- data/spec/operawatir/desktop/quickdialogtab_spec.rb +30 -0
- data/spec/operawatir/desktop/quickdropdown_spec.rb +39 -0
- data/spec/operawatir/desktop/quickeditfield_spec.rb +51 -0
- data/spec/operawatir/desktop/quickfind_spec.rb +30 -0
- data/spec/operawatir/desktop/quickgriditem_spec.rb +16 -0
- data/spec/operawatir/desktop/quickgridlayout_spec.rb +15 -0
- data/spec/operawatir/desktop/quicklabel_spec.rb +28 -0
- data/spec/operawatir/desktop/quickradiobutton_spec.rb +24 -0
- data/spec/operawatir/desktop/quicksearchfield_spec.rb +26 -0
- data/spec/operawatir/desktop/quicktab_spec.rb +86 -0
- data/spec/operawatir/desktop/quickthumbnail_spec.rb +37 -0
- data/spec/operawatir/desktop/quicktreeitem_spec.rb +135 -0
- data/spec/operawatir/desktop/quicktreeview_spec.rb +30 -0
- data/spec/operawatir/desktop/quickwidget_spec.rb +52 -11
- data/spec/operawatir/desktop/quickwindow_spec.rb +11 -0
- data/spec/operawatir/desktop/shared/shared.rb +100 -10
- data/spec/operawatir/fixtures/browsers.svg +367 -0
- data/spec/operawatir/fixtures/frames.html +13 -0
- data/spec/watir2/select_list_spec.rb +84 -71
- metadata +37 -4
- data/lib/operadriver/selenium-common.jar +0 -0
@@ -89,7 +89,8 @@ module OperaWatir
|
|
89
89
|
# Clicks a button or expand control and toggles it state
|
90
90
|
#
|
91
91
|
# @return [int] the new state of the button or expand control,
|
92
|
-
# 0 for not pressed, or 1 for pressed
|
92
|
+
# 0 for not pressed, or 1 for pressed,
|
93
|
+
# nil if the element does no longer exist
|
93
94
|
#
|
94
95
|
# @raise [DesktopExceptions::WidgetNotVisibleException] if the button
|
95
96
|
# is not visible
|
@@ -100,7 +101,12 @@ module OperaWatir
|
|
100
101
|
# Cheat since we don't have an event yet
|
101
102
|
sleep(0.1)
|
102
103
|
|
103
|
-
element
|
104
|
+
# Note: click might have made this element dissapear ...
|
105
|
+
begin
|
106
|
+
element(true).getValue
|
107
|
+
rescue Exceptions::UnknownObjectException
|
108
|
+
nil
|
109
|
+
end
|
104
110
|
end
|
105
111
|
|
106
112
|
######################################################################
|
@@ -33,6 +33,7 @@ module OperaWatir
|
|
33
33
|
# Cheat since we don't have an even yet
|
34
34
|
sleep(0.1)
|
35
35
|
|
36
|
+
# is this guaranteed to be same as getValue?
|
36
37
|
element(true).isSelected
|
37
38
|
end
|
38
39
|
|
@@ -49,10 +50,9 @@ module OperaWatir
|
|
49
50
|
# is not visible
|
50
51
|
#
|
51
52
|
def open_dialog_with_click(win_name)
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
#wait_for_window_shown(win_name)
|
53
|
+
wait_start
|
54
|
+
click
|
55
|
+
wait_for_window_shown(win_name)
|
56
56
|
end
|
57
57
|
|
58
58
|
end
|
@@ -20,7 +20,7 @@ module OperaWatir
|
|
20
20
|
######################################################################
|
21
21
|
# Types a text string into the edit field
|
22
22
|
#
|
23
|
-
# @note Only
|
23
|
+
# @note Only characters that appear on the keyboard that is currently
|
24
24
|
# selected can be typed, and the edit field must have focus.
|
25
25
|
#
|
26
26
|
# @param [String] text text string to type in
|
@@ -19,8 +19,12 @@ module OperaWatir
|
|
19
19
|
def search_with_text(search_text)
|
20
20
|
# Must focus field before calling enter_text...
|
21
21
|
focus_with_click
|
22
|
+
|
22
23
|
# Enters text in a field and then hits enter
|
23
|
-
enter_text_and_hit_enter(search_text)
|
24
|
+
t = enter_text_and_hit_enter(search_text)
|
25
|
+
|
26
|
+
# return text in addressfield (in same window as search field)
|
27
|
+
driver.findWidgetByName(WIDGET_ENUM_MAP[:addressfield], @window_id, "tba_address_field", "Document Toolbar").getText
|
24
28
|
end
|
25
29
|
|
26
30
|
end
|
@@ -10,8 +10,10 @@ module OperaWatir
|
|
10
10
|
######################################################################
|
11
11
|
# Set focus to the tree item by clicking on it
|
12
12
|
#
|
13
|
-
# @raise [DesktopExceptions::WidgetNotVisibleException] if the treeview
|
13
|
+
# @raise [DesktopExceptions::WidgetNotVisibleException] if the treeview
|
14
14
|
# the treeitem is in is not visible
|
15
|
+
# @raise [DesktopExceptions::WidgetDisabledException] if the treeitem
|
16
|
+
# is disabled
|
15
17
|
#
|
16
18
|
def focus_with_click
|
17
19
|
# First scroll the item into view
|
@@ -29,6 +31,8 @@ module OperaWatir
|
|
29
31
|
# For now there is no difference to focusing
|
30
32
|
focus_with_click
|
31
33
|
end
|
34
|
+
|
35
|
+
alias_method :collapse_with_click, :expand_with_click
|
32
36
|
|
33
37
|
######################################################################
|
34
38
|
# Expands a tree item when it is double clicked
|
@@ -111,6 +115,23 @@ module OperaWatir
|
|
111
115
|
end
|
112
116
|
|
113
117
|
alias_method :open_dialog_with_double_click, :open_window_with_double_click
|
118
|
+
|
119
|
+
######################################################################
|
120
|
+
# Double clicks the tree item, and waits for the window with
|
121
|
+
# window name win_name to be loaded with the url of the treeitem
|
122
|
+
#
|
123
|
+
# @param [String] win_name name of the window that will be loaded (Pass a blank string for any window)
|
124
|
+
#
|
125
|
+
# @return [int] Window ID of the window shown or 0 if no window is shown
|
126
|
+
#
|
127
|
+
# @raise [DesktopExceptions::WidgetNotVisibleException] if the treeitem
|
128
|
+
# is not visible
|
129
|
+
#
|
130
|
+
def load_window_with_double_click(win_name)
|
131
|
+
wait_start
|
132
|
+
click(:left, 2)
|
133
|
+
wait_for_window_loaded(win_name)
|
134
|
+
end
|
114
135
|
|
115
136
|
|
116
137
|
private
|
@@ -2,17 +2,20 @@ module OperaWatir
|
|
2
2
|
class QuickWidget
|
3
3
|
include DesktopCommon
|
4
4
|
include DesktopContainer
|
5
|
+
include Deprecated
|
5
6
|
|
6
7
|
# @private
|
7
8
|
# window_id is set if constructor is called on a (parent) window
|
8
9
|
# location is set is this is called on a (parent) widget
|
9
|
-
def initialize(container, method, selector=nil, location=nil, window_id=-1)
|
10
|
+
def initialize(container, method, selector=nil, location=nil, window_id=-1, type=nil)
|
10
11
|
@container = container
|
11
12
|
|
12
13
|
if method.is_a? Java::ComOperaCoreSystems::QuickWidget
|
13
14
|
@elm = method
|
15
|
+
@type = WIDGET_ENUM_MAP.invert[method.getType]
|
14
16
|
else
|
15
17
|
@method = method
|
18
|
+
@type = type
|
16
19
|
@selector = selector
|
17
20
|
@location = location
|
18
21
|
@window_id = window_id
|
@@ -70,8 +73,7 @@ module OperaWatir
|
|
70
73
|
# Gets the text of the widget
|
71
74
|
#
|
72
75
|
# @note This method should not be used to check the text in a widget if
|
73
|
-
# the text is in the Opera language file. Use verify_text
|
74
|
-
# verify_includes_text instead
|
76
|
+
# the text is in the Opera language file. Use verify_text instead
|
75
77
|
#
|
76
78
|
# @return [String] text of the widget
|
77
79
|
#
|
@@ -121,6 +123,7 @@ module OperaWatir
|
|
121
123
|
######################################################################
|
122
124
|
# Checks that the text in the widget matches the text as loaded
|
123
125
|
# from the current language file in Opera using the string_id
|
126
|
+
# (Strips &'s from the string before comparing)
|
124
127
|
#
|
125
128
|
# @param [String] string_id String ID to use to load the string from the current
|
126
129
|
# language file (e.g. "D_NEW_PREFERENCES_GENERAL")
|
@@ -131,10 +134,17 @@ module OperaWatir
|
|
131
134
|
# using the specified method
|
132
135
|
#
|
133
136
|
def verify_text(string_id)
|
134
|
-
|
137
|
+
text = driver.getString(string_id, true) #true => stripAmpersands from string
|
138
|
+
if text.include? "%"
|
139
|
+
text.gsub!(/%[csduoxefg0-9]/, ".*")
|
140
|
+
res = /#{text}/ =~ element.getText()
|
141
|
+
res == nil ? false: true
|
142
|
+
else
|
143
|
+
element.verifyText(string_id)
|
144
|
+
end
|
135
145
|
end
|
136
146
|
|
137
|
-
alias_method :
|
147
|
+
alias_method :has_ui_string?, :verify_text
|
138
148
|
|
139
149
|
######################################################################
|
140
150
|
# Checks that the text in the widget includes the text as loaded
|
@@ -153,6 +163,8 @@ module OperaWatir
|
|
153
163
|
end
|
154
164
|
|
155
165
|
alias_method :includes_text?, :verify_includes_text
|
166
|
+
deprecated :verify_includes_text
|
167
|
+
deprecated :includes_text?
|
156
168
|
|
157
169
|
######################################################################
|
158
170
|
# Prints out all of the row/col information in single lines. Used to
|
@@ -187,8 +199,35 @@ module OperaWatir
|
|
187
199
|
def position
|
188
200
|
return [row, col] if type == :treeitem
|
189
201
|
return col if type == :tabbutton
|
202
|
+
return col if type == :button
|
190
203
|
false
|
191
204
|
end
|
205
|
+
|
206
|
+
########################################################################
|
207
|
+
#
|
208
|
+
# @return width of widget
|
209
|
+
#
|
210
|
+
def width
|
211
|
+
element.getRect().width
|
212
|
+
end
|
213
|
+
|
214
|
+
########################################################################
|
215
|
+
#
|
216
|
+
# @return height of widget
|
217
|
+
#
|
218
|
+
def height
|
219
|
+
element.getRect().height
|
220
|
+
end
|
221
|
+
|
222
|
+
#@private
|
223
|
+
def x
|
224
|
+
element.getRect().x
|
225
|
+
end
|
226
|
+
|
227
|
+
#@private
|
228
|
+
def y
|
229
|
+
element.getRect().y
|
230
|
+
end
|
192
231
|
|
193
232
|
######################################################################
|
194
233
|
# Prints out all of the internal information about the widget. Used
|
@@ -244,7 +283,7 @@ module OperaWatir
|
|
244
283
|
def value
|
245
284
|
return element.getValue
|
246
285
|
end
|
247
|
-
|
286
|
+
|
248
287
|
protected
|
249
288
|
#@private
|
250
289
|
# Return the element
|
@@ -256,8 +295,8 @@ protected
|
|
256
295
|
raise(Exceptions::UnknownObjectException, "Element #{@selector} not found using #{@method}") unless @elm
|
257
296
|
@elm
|
258
297
|
end
|
259
|
-
|
260
|
-
|
298
|
+
|
299
|
+
|
261
300
|
private
|
262
301
|
|
263
302
|
def drag_and_drop_on(other, drop_pos)
|
@@ -304,15 +343,15 @@ private
|
|
304
343
|
# Click widget
|
305
344
|
def click(button = :left, times = 1, *opts)
|
306
345
|
raise DesktopExceptions::WidgetDisabledException, "Element #{@selector} is disabled" unless enabled?
|
307
|
-
|
346
|
+
|
308
347
|
#Some buttons etc. aren't visible until hovering them
|
309
348
|
if (visible? == false and type != :dialogtab)
|
310
349
|
element.hover
|
311
350
|
element(true)
|
312
351
|
end
|
313
|
-
|
352
|
+
|
314
353
|
# Dialog tabs are always visible even if the page they are connected to isn't
|
315
|
-
if visible? == true or type == :dialogtab
|
354
|
+
if visible? == true or type == :dialogtab
|
316
355
|
button = DesktopEnums::MOUSEBUTTON_ENUM_MAP[button]
|
317
356
|
list = Java::JavaUtil::ArrayList.new
|
318
357
|
opts.each { |mod| list << DesktopEnums::KEYMODIFIER_ENUM_MAP[mod] }
|
@@ -321,12 +360,12 @@ private
|
|
321
360
|
raise(DesktopExceptions::WidgetNotVisibleException, "Widget #{name.length > 0 ? name : text} not visible")
|
322
361
|
end
|
323
362
|
end
|
324
|
-
|
363
|
+
|
325
364
|
# Right click a widget
|
326
365
|
def right_click
|
327
366
|
click(:right, 1)
|
328
367
|
end
|
329
|
-
|
368
|
+
|
330
369
|
# double click widget
|
331
370
|
def double_click
|
332
371
|
click(:left, 2)
|
@@ -361,31 +400,31 @@ private
|
|
361
400
|
if @selector == nil && @elm != nil
|
362
401
|
set_selector
|
363
402
|
end
|
364
|
-
#puts "<find> Find Widget by " + @method.to_s + " " + @window_id.to_s + ", " + @selector.to_s + ", " + @location.to_s
|
403
|
+
#puts "\n<find> Find Widget by " + @method.to_s + " " + @window_id.to_s + ", " + @selector.to_s + ", " + @location.to_s + ", " + @type.to_s
|
365
404
|
case @method
|
366
405
|
when :name
|
367
406
|
if @location != nil
|
368
|
-
@element = driver.findWidgetByName(@window_id, @selector, @location)
|
407
|
+
@element = driver.findWidgetByName(WIDGET_ENUM_MAP[@type], @window_id, @selector, @location)
|
369
408
|
else
|
370
|
-
@element = driver.findWidgetByName(@window_id, @selector)
|
409
|
+
@element = driver.findWidgetByName(WIDGET_ENUM_MAP[@type], @window_id, @selector)
|
371
410
|
end
|
372
411
|
when :string_id
|
373
412
|
if @location != nil
|
374
|
-
@element = driver.findWidgetByStringId(@window_id, @selector, @location)
|
413
|
+
@element = driver.findWidgetByStringId(WIDGET_ENUM_MAP[@type], @window_id, @selector, @location)
|
375
414
|
else
|
376
|
-
@element = driver.findWidgetByStringId(@window_id, @selector)
|
415
|
+
@element = driver.findWidgetByStringId(WIDGET_ENUM_MAP[@type], @window_id, @selector)
|
377
416
|
end
|
378
417
|
when :text
|
379
418
|
if @location != nil
|
380
|
-
@element = driver.findWidgetByText(@window_id, @selector, @location)
|
419
|
+
@element = driver.findWidgetByText(WIDGET_ENUM_MAP[@type], @window_id, @selector, @location)
|
381
420
|
else
|
382
|
-
@element = driver.findWidgetByText(@window_id, @selector)
|
421
|
+
@element = driver.findWidgetByText(WIDGET_ENUM_MAP[@type], @window_id, @selector)
|
383
422
|
end
|
384
423
|
when :pos
|
385
424
|
if @location != nil
|
386
|
-
@element = driver.findWidgetByPosition(@window_id, @selector[0], @selector[1], @location)
|
425
|
+
@element = driver.findWidgetByPosition(WIDGET_ENUM_MAP[@type], @window_id, @selector[0], @selector[1], @location)
|
387
426
|
else
|
388
|
-
@element = driver.findWidgetByPosition(@window_id, @selector[0], @selector[1])
|
427
|
+
@element = driver.findWidgetByPosition(WIDGET_ENUM_MAP[@type], @window_id, @selector[0], @selector[1])
|
389
428
|
end
|
390
429
|
end
|
391
430
|
if @window_id < 0 && @element != nil
|
@@ -106,7 +106,33 @@ module OperaWatir
|
|
106
106
|
def print_window_info
|
107
107
|
puts window_info_string
|
108
108
|
end
|
109
|
+
|
110
|
+
########################################################################
|
111
|
+
#
|
112
|
+
# @return width of widget
|
113
|
+
#
|
114
|
+
def width
|
115
|
+
element.getRect().width
|
116
|
+
end
|
109
117
|
|
118
|
+
########################################################################
|
119
|
+
#
|
120
|
+
# @return height of widget
|
121
|
+
#
|
122
|
+
def height
|
123
|
+
element.getRect().height
|
124
|
+
end
|
125
|
+
|
126
|
+
#@private
|
127
|
+
def x
|
128
|
+
element.getRect().x
|
129
|
+
end
|
130
|
+
|
131
|
+
#@private
|
132
|
+
def y
|
133
|
+
element.getRect().y
|
134
|
+
end
|
135
|
+
|
110
136
|
######################################################################
|
111
137
|
# Returns a string of the internal information about the window. Used
|
112
138
|
# to discover the names of widgets and windows to use in the tests.
|
@@ -1,3 +1,4 @@
|
|
1
1
|
%w(quick_widget quick_button quick_checkbox quick_editfield
|
2
2
|
quick_dropdown quick_dialogtab quick_label quick_radiobutton quick_treeview quick_addressfield
|
3
|
-
quick_searchfield quick_toolbar quick_window quick_tab quick_treeitem quick_thumbnail
|
3
|
+
quick_searchfield quick_toolbar quick_window quick_tab quick_treeitem quick_thumbnail
|
4
|
+
quick_find quick_griditem quick_gridlayout).each {|widget| require "operawatir/quickwidgets/#{widget}"}
|
data/lib/operawatir/window.rb
CHANGED
@@ -52,27 +52,40 @@ class OperaWatir::Window
|
|
52
52
|
driver.getTitle
|
53
53
|
end
|
54
54
|
|
55
|
+
#
|
55
56
|
# Gets the URL of the document.
|
56
57
|
#
|
57
58
|
# @return [String] The URL of the current document.
|
59
|
+
#
|
60
|
+
|
58
61
|
def url
|
59
62
|
driver.getCurrentUrl
|
60
63
|
end
|
61
64
|
|
65
|
+
#
|
62
66
|
# Navigates to a new URL.
|
63
67
|
#
|
64
|
-
|
68
|
+
|
65
69
|
def url=(url)
|
66
|
-
driver.
|
70
|
+
driver.navigate.to(url)
|
67
71
|
end
|
72
|
+
|
68
73
|
alias_method :goto, :url= # deprecate?
|
69
74
|
|
75
|
+
#
|
76
|
+
# Refreshes the page.
|
77
|
+
#
|
78
|
+
|
79
|
+
def refresh
|
80
|
+
driver.navigate.refresh
|
81
|
+
end
|
82
|
+
|
70
83
|
# Retrieves the text without the DOM or source code from the
|
71
84
|
# currently loaded document.
|
72
85
|
#
|
73
86
|
# @return [String] The text of the document.
|
74
87
|
def text
|
75
|
-
|
88
|
+
document.text
|
76
89
|
end
|
77
90
|
|
78
91
|
# Retrieves the HTML/source code of the currently loaded document.
|
@@ -105,6 +118,7 @@ class OperaWatir::Window
|
|
105
118
|
|
106
119
|
# Opera-specific
|
107
120
|
|
121
|
+
#
|
108
122
|
# Creates a Screenshot interface or saves screenshot to specified
|
109
123
|
# location if a file path is given.
|
110
124
|
#
|
@@ -113,12 +127,21 @@ class OperaWatir::Window
|
|
113
127
|
#
|
114
128
|
# @return [Object] A Screenshot object.
|
115
129
|
# @return [String] Filename to the saved file.
|
130
|
+
#
|
131
|
+
|
116
132
|
def screenshot(filename=nil)
|
117
133
|
# TODO: This should call document.screenshot instead, but that
|
118
134
|
# requires a generic ScreenShotReply interface in OperaDriver.
|
119
135
|
filename.nil? ? OperaWatir::Screenshot.new(self) : OperaWatir::Screenshot.new(self).save(filename)
|
120
136
|
end
|
121
137
|
|
138
|
+
#
|
139
|
+
# Returns a visual hash sum of the document. It takes a screenshot of
|
140
|
+
# the page and generates an MD5 hash sum of it.
|
141
|
+
#
|
142
|
+
# @return [String] A hash sum.
|
143
|
+
#
|
144
|
+
|
122
145
|
def visual_hash
|
123
146
|
document.visual_hash
|
124
147
|
end
|
@@ -136,16 +159,23 @@ class OperaWatir::Window
|
|
136
159
|
alias_method :find_by_class, :find_by_class_name
|
137
160
|
alias_method :find_by_tag, :find_by_tag_name
|
138
161
|
|
139
|
-
# Finds the document of a page.
|
140
162
|
#
|
141
|
-
#
|
163
|
+
# Finds the root element of the document. For HTML document, this is
|
164
|
+
# the element with the tagName “HTML”.
|
165
|
+
#
|
166
|
+
# @return [Element] The root element of the document.
|
167
|
+
#
|
168
|
+
|
142
169
|
def document
|
143
|
-
|
170
|
+
find_by_css(':root')
|
144
171
|
end
|
145
172
|
|
173
|
+
#
|
146
174
|
# Finds all elements in document.
|
147
175
|
#
|
148
176
|
# @return [Collection] A collection of elements.
|
177
|
+
#
|
178
|
+
|
149
179
|
def elements
|
150
180
|
find_by_tag('*')
|
151
181
|
end
|
@@ -160,61 +190,42 @@ class OperaWatir::Window
|
|
160
190
|
|
161
191
|
private
|
162
192
|
|
163
|
-
# Locate elements by id.
|
164
|
-
#
|
165
|
-
# @return [Array] An array of found elements.
|
166
193
|
def find_elements_by_id(value)
|
167
194
|
driver.findElementsById(value).to_a.map do |node|
|
168
195
|
OperaWatir::Element.new(node)
|
169
196
|
end
|
170
197
|
end
|
171
198
|
|
172
|
-
# Locate elements by class.
|
173
|
-
#
|
174
|
-
# @return [Array] An array of found elements.
|
175
199
|
def find_elements_by_class_name(value)
|
176
200
|
driver.findElementsByClassName(value).to_a.map do |node|
|
177
201
|
OperaWatir::Element.new(node)
|
178
202
|
end
|
179
203
|
end
|
180
204
|
|
181
|
-
# Locate elements by tag name.
|
182
|
-
#
|
183
|
-
# @return [Array] An array of found elements.
|
184
205
|
def find_elements_by_tag_name(value)
|
185
206
|
driver.findElementsByTagName(value).to_a.map do |node|
|
186
207
|
OperaWatir::Element.new(node)
|
187
208
|
end
|
188
209
|
end
|
189
210
|
|
190
|
-
# Locate elements by CSS selector.
|
191
|
-
#
|
192
|
-
# @return [Array] An array of found elements.
|
193
211
|
def find_elements_by_css(value)
|
194
212
|
driver.findElementsByCssSelector(value).to_a.map do |node|
|
195
213
|
OperaWatir::Element.new(node)
|
196
214
|
end
|
197
215
|
end
|
198
216
|
|
199
|
-
# Locate elements by XPath expression.
|
200
|
-
#
|
201
|
-
# @return [Array] An array of found elements.
|
202
217
|
def find_elements_by_xpath(value)
|
203
218
|
driver.findElementsByXPath(value).to_a.map do |node|
|
204
219
|
OperaWatir::Element.new(node)
|
205
220
|
end
|
206
221
|
end
|
207
222
|
|
208
|
-
# Locate elements by attribute @name.
|
209
|
-
#
|
210
|
-
# @return [Array] An array of found elements.
|
211
223
|
def find_elements_by_name(value)
|
212
224
|
driver.findElementsByName(value).to_a.map do |node|
|
213
225
|
OperaWatir::Element.new(node)
|
214
226
|
end
|
215
227
|
end
|
216
228
|
|
217
|
-
# @private
|
218
229
|
def driver
|
219
230
|
browser.driver
|
220
231
|
end
|