page-object 0.2.5 → 0.3.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.
Files changed (90) hide show
  1. data/ChangeLog +25 -0
  2. data/Rakefile +3 -3
  3. data/features/element.feature +232 -1
  4. data/features/frames.feature +1 -1
  5. data/features/html/modal.html +17 -0
  6. data/features/html/modal_1.html +38 -0
  7. data/features/html/modal_2.html +27 -0
  8. data/features/html/nested_elements.html +42 -0
  9. data/features/html/static_elements.html +1 -0
  10. data/features/modal_dialog.feature +15 -0
  11. data/features/nested_elements.feature +73 -0
  12. data/features/step_definitions/frames_steps.rb +1 -1
  13. data/features/step_definitions/modal_dialog_steps.rb +62 -0
  14. data/features/step_definitions/nested_elements_steps.rb +165 -0
  15. data/features/support/page.rb +1 -0
  16. data/features/support/url_helper.rb +8 -0
  17. data/lib/page-object.rb +26 -0
  18. data/lib/page-object/accessors.rb +36 -36
  19. data/lib/page-object/elements/button.rb +3 -3
  20. data/lib/page-object/elements/check_box.rb +7 -7
  21. data/lib/page-object/elements/element.rb +16 -10
  22. data/lib/page-object/elements/form.rb +7 -7
  23. data/lib/page-object/elements/image.rb +7 -7
  24. data/lib/page-object/elements/link.rb +3 -3
  25. data/lib/page-object/elements/ordered_list.rb +7 -7
  26. data/lib/page-object/elements/radio_button.rb +7 -7
  27. data/lib/page-object/elements/select_list.rb +7 -7
  28. data/lib/page-object/elements/table.rb +7 -7
  29. data/lib/page-object/elements/table_row.rb +7 -7
  30. data/lib/page-object/elements/text_area.rb +7 -7
  31. data/lib/page-object/elements/text_field.rb +7 -7
  32. data/lib/page-object/elements/unordered_list.rb +7 -7
  33. data/lib/page-object/nested_elements.rb +72 -0
  34. data/lib/page-object/platforms.rb +2 -2
  35. data/lib/page-object/platforms/selenium_webdriver.rb +17 -0
  36. data/lib/page-object/platforms/{selenium → selenium_webdriver}/button.rb +1 -1
  37. data/lib/page-object/platforms/{selenium → selenium_webdriver}/check_box.rb +1 -1
  38. data/lib/page-object/platforms/{selenium → selenium_webdriver}/element.rb +1 -1
  39. data/lib/page-object/platforms/{watir → selenium_webdriver}/form.rb +1 -1
  40. data/lib/page-object/platforms/{selenium → selenium_webdriver}/image.rb +1 -1
  41. data/lib/page-object/platforms/{selenium → selenium_webdriver}/link.rb +1 -1
  42. data/lib/page-object/platforms/{selenium → selenium_webdriver}/ordered_list.rb +2 -2
  43. data/lib/page-object/platforms/{selenium → selenium_webdriver}/page_object.rb +59 -59
  44. data/lib/page-object/platforms/{selenium → selenium_webdriver}/radio_button.rb +1 -1
  45. data/lib/page-object/platforms/{selenium → selenium_webdriver}/select_list.rb +2 -2
  46. data/lib/page-object/platforms/{selenium → selenium_webdriver}/table.rb +2 -2
  47. data/lib/page-object/platforms/{selenium → selenium_webdriver}/table_row.rb +2 -2
  48. data/lib/page-object/platforms/{selenium → selenium_webdriver}/text_area.rb +1 -1
  49. data/lib/page-object/platforms/{selenium → selenium_webdriver}/text_field.rb +1 -1
  50. data/lib/page-object/platforms/{selenium → selenium_webdriver}/unordered_list.rb +2 -2
  51. data/lib/page-object/platforms/watir_webdriver.rb +17 -0
  52. data/lib/page-object/platforms/{watir → watir_webdriver}/check_box.rb +1 -1
  53. data/lib/page-object/platforms/{watir → watir_webdriver}/element.rb +1 -1
  54. data/lib/page-object/platforms/{selenium → watir_webdriver}/form.rb +1 -1
  55. data/lib/page-object/platforms/{watir → watir_webdriver}/image.rb +1 -1
  56. data/lib/page-object/platforms/{watir → watir_webdriver}/ordered_list.rb +2 -2
  57. data/lib/page-object/platforms/watir_webdriver/page_object.rb +486 -0
  58. data/lib/page-object/platforms/{watir → watir_webdriver}/radio_button.rb +1 -1
  59. data/lib/page-object/platforms/{watir → watir_webdriver}/select_list.rb +3 -3
  60. data/lib/page-object/platforms/{watir → watir_webdriver}/table.rb +2 -2
  61. data/lib/page-object/platforms/{watir → watir_webdriver}/table_row.rb +2 -2
  62. data/lib/page-object/platforms/{watir → watir_webdriver}/text_area.rb +1 -1
  63. data/lib/page-object/platforms/{watir → watir_webdriver}/text_field.rb +1 -1
  64. data/lib/page-object/platforms/{watir → watir_webdriver}/unordered_list.rb +2 -2
  65. data/lib/page-object/version.rb +1 -1
  66. data/page-object.gemspec +1 -1
  67. data/spec/page-object/elements/button_spec.rb +1 -1
  68. data/spec/page-object/elements/check_box_spec.rb +1 -1
  69. data/spec/page-object/elements/element_spec.rb +9 -5
  70. data/spec/page-object/elements/form_spec.rb +2 -2
  71. data/spec/page-object/elements/image_spec.rb +4 -4
  72. data/spec/page-object/elements/link_spec.rb +1 -1
  73. data/spec/page-object/elements/nested_element_spec.rb +185 -0
  74. data/spec/page-object/elements/ordered_list_spec.rb +6 -6
  75. data/spec/page-object/elements/radio_button_spec.rb +1 -1
  76. data/spec/page-object/elements/select_list_spec.rb +5 -5
  77. data/spec/page-object/elements/table_row_spec.rb +6 -6
  78. data/spec/page-object/elements/table_spec.rb +2 -2
  79. data/spec/page-object/elements/text_area_spec.rb +1 -1
  80. data/spec/page-object/elements/text_field_spec.rb +1 -1
  81. data/spec/page-object/elements/unordered_list_spec.rb +6 -6
  82. data/spec/page-object/page-object_spec.rb +12 -2
  83. data/spec/page-object/platforms/{selenium → selenium_webdriver}/selenium_page_object_spec.rb +2 -2
  84. data/spec/page-object/platforms/selenium_webdriver_spec.rb +29 -0
  85. data/spec/page-object/platforms/{watir_spec.rb → watir_webdriver_spec.rb} +11 -6
  86. metadata +58 -39
  87. data/lib/page-object/platforms/selenium.rb +0 -16
  88. data/lib/page-object/platforms/watir.rb +0 -16
  89. data/lib/page-object/platforms/watir/page_object.rb +0 -482
  90. data/spec/page-object/platforms/selenium_spec.rb +0 -26
@@ -1,16 +0,0 @@
1
- module PageObject
2
- module Platforms
3
- module Selenium
4
-
5
- def self.create_page_object(browser)
6
- require 'page-object/platforms/selenium/page_object'
7
- return Object::PageObject::Platforms::Selenium::PageObject.new(browser)
8
- end
9
-
10
- def self.is_for?(browser)
11
- browser.is_a? Object::Selenium::WebDriver::Driver
12
- end
13
- end
14
- end
15
- end
16
- PageObject::Platforms.register(:selenium, PageObject::Platforms::Selenium)
@@ -1,16 +0,0 @@
1
- module PageObject
2
- module Platforms
3
- module Watir
4
- def self.create_page_object(browser)
5
- require 'page-object/platforms/watir/page_object'
6
- PageObject::WatirPageObject.new(browser)
7
- end
8
-
9
- def self.is_for?(browser)
10
- browser.is_a?(Object::Watir::Browser)
11
- end
12
- end
13
- end
14
- end
15
-
16
- PageObject::Platforms.register(:watir, PageObject::Platforms::Watir)
@@ -1,482 +0,0 @@
1
- require 'watir-webdriver/extensions/alerts'
2
- require 'page-object/elements'
3
- require 'page-object/core_ext/string'
4
-
5
-
6
- module PageObject
7
- #
8
- # Watir implementation of the page object platform driver. You should not use the
9
- # class directly. Instead you should include the PageObject module in your page object
10
- # and use the methods dynamically added from the PageObject::Accessors module.
11
- #
12
- class WatirPageObject
13
- attr_reader :browser
14
-
15
- def initialize(browser)
16
- @browser = browser
17
- end
18
-
19
- #
20
- # platform method to navigate to a provided url
21
- # See PageObject#navigate_to
22
- #
23
- def navigate_to(url)
24
- @browser.goto url
25
- end
26
-
27
- #
28
- # platform method to retrieve the text from the current page
29
- # See PageObject#text
30
- #
31
- def text
32
- @browser.text
33
- end
34
-
35
- #
36
- # platform method to retrieve the html for the current page
37
- # See PageObject#html
38
- #
39
- def html
40
- @browser.html
41
- end
42
-
43
- #
44
- # platform method to retrieve the title for the current page
45
- # See PageObject#title
46
- #
47
- def title
48
- @browser.title
49
- end
50
-
51
- #
52
- # platform method to wait for a block to return true
53
- # See PageObject#wait_until
54
- def wait_until(timeout, message = nil, &block)
55
- @browser.wait_until(timeout, message, &block)
56
- end
57
-
58
- #
59
- # platform method to handle an alert popup
60
- # See PageObject#alert
61
- #
62
- def alert(&block)
63
- @browser.alert(&block)
64
- end
65
-
66
- #
67
- # platform method to handle a confirm popup
68
- # See PageObject#confirm
69
- #
70
- def confirm(response, &block)
71
- @browser.confirm(response, &block)
72
- end
73
-
74
- #
75
- # platform method to handle a prompt popup
76
- # See PageObject#prompt
77
- #
78
- def prompt(answer, &block)
79
- @browser.prompt(answer, &block)
80
- end
81
-
82
- #
83
- # platform method to handle attaching to a running window
84
- # See PageObject#attach_to_window
85
- #
86
- def attach_to_window(identifier, &block)
87
- win_id = {identifier.keys.first => /#{Regexp.escape(identifier.values.first)}/}
88
- @browser.window(win_id).use &block
89
- end
90
-
91
- #
92
- # platform method to refresh the page
93
- # See PageObject#refresh
94
- #
95
- def refresh
96
- @browser.refresh
97
- end
98
-
99
- #
100
- # platform method to go back to the previous page
101
- # See PageObject#back
102
- #
103
- def back
104
- @browser.back
105
- end
106
-
107
- #
108
- # platform method to go forward to the next page
109
- # See PageObject#forward
110
- #
111
- def forward
112
- @browser.forward
113
- end
114
-
115
- #
116
- # platform method to get the value stored in a text field
117
- # See PageObject::Accessors#text_field
118
- #
119
- def text_field_value_for(identifier)
120
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::TextField)
121
- @browser.instance_eval "#{nested_frames(frame_identifiers)}text_field(identifier).value"
122
- end
123
-
124
- #
125
- # platform method to set the value for a text field
126
- # See PageObject::Accessors#text_field
127
- #
128
- def text_field_value_set(identifier, value)
129
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::TextField)
130
- @browser.instance_eval "#{nested_frames(frame_identifiers)}text_field(identifier).set(value)"
131
- end
132
-
133
- #
134
- # platform method to retrieve a text field element
135
- # See PageObject::Accessors#text_field
136
- #
137
- def text_field_for(identifier)
138
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::TextField)
139
- element = @browser.instance_eval "#{nested_frames(frame_identifiers)}text_field(identifier)"
140
- Elements::TextField.new(element, :platform => :watir)
141
- end
142
-
143
- #
144
- # platform method to get the value stored in a hidden field
145
- # See PageObject::Accessors#hidden_field
146
- #
147
- def hidden_field_value_for(identifier)
148
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::HiddenField)
149
- @browser.instance_eval "#{nested_frames(frame_identifiers)}hidden(identifier).value"
150
- end
151
-
152
- #
153
- # platform method to retrieve a hidden field element
154
- # See PageObject::Accessors#hidden_field
155
- #
156
- def hidden_field_for(identifier)
157
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::HiddenField)
158
- element = @browser.instance_eval "#{nested_frames(frame_identifiers)}hidden(identifier)"
159
- Elements::HiddenField.new(element, :platform => :watir)
160
- end
161
-
162
- #
163
- # platform method to set text in a textarea
164
- # See PageObject::Accessors#text_area
165
- #
166
- def text_area_value_set(identifier, value)
167
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::TextArea)
168
- @browser.instance_eval "#{nested_frames(frame_identifiers)}textarea(identifier).send_keys(value)"
169
- end
170
-
171
- #
172
- # platform method to get the text from a textarea
173
- # See PageObject::Accessors#text_area
174
- #
175
- def text_area_value_for(identifier)
176
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::TextArea)
177
- @browser.instance_eval "#{nested_frames(frame_identifiers)}textarea(identifier).value"
178
- end
179
-
180
- #
181
- # platform method to get the text area element
182
- # See PageObject::Accessors#text_area
183
- #
184
- def text_area_for(identifier)
185
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::TextArea)
186
- element = @browser.instance_eval "#{nested_frames(frame_identifiers)}textarea(identifier)"
187
- Elements::TextArea.new(element, :platform => :watir)
188
- end
189
-
190
- #
191
- # platform method to get the currently selected value from a select list
192
- # See PageObject::Accessors#select_list
193
- #
194
- def select_list_value_for(identifier)
195
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::SelectList)
196
- @browser.instance_eval "#{nested_frames(frame_identifiers)}select_list(identifier).value"
197
- end
198
-
199
- #
200
- # platform method to select a value from a select list
201
- # See PageObject::Accessors#select_list
202
- #
203
- def select_list_value_set(identifier, value)
204
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::SelectList)
205
- @browser.instance_eval "#{nested_frames(frame_identifiers)}select_list(identifier).select(value)"
206
- end
207
-
208
- #
209
- # platform method to return the select list element
210
- # See PageObject::Accessors#select_list
211
- #
212
- def select_list_for(identifier)
213
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::SelectList)
214
- element = @browser.instance_eval "#{nested_frames(frame_identifiers)}select_list(identifier)"
215
- Elements::SelectList.new(element, :platform => :watir)
216
- end
217
-
218
- #
219
- # platform method to click a link
220
- # See PageObject::Accessors#link
221
- #
222
- def click_link_for(identifier)
223
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::Link)
224
- @browser.instance_eval "#{nested_frames(frame_identifiers)}link(identifier).click if identifier"
225
- end
226
-
227
- #
228
- # platform method to return a PageObject::Elements::Link object
229
- # see PageObject::Accessors#link
230
- #
231
- def link_for(identifier)
232
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::Link)
233
- element = @browser.instance_eval "#{nested_frames(frame_identifiers)}link(identifier)"
234
- Elements::Link.new(element, :platform => :watir)
235
- end
236
-
237
- #
238
- # platform method to check a checkbox
239
- # See PageObject::Accessors#checkbox
240
- #
241
- def check_checkbox(identifier)
242
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::CheckBox)
243
- @browser.instance_eval "#{nested_frames(frame_identifiers)}checkbox(identifier).set"
244
- end
245
-
246
- #
247
- # platform method to uncheck a checkbox
248
- # See PageObject::Accessors#checkbox
249
- #
250
- def uncheck_checkbox(identifier)
251
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::CheckBox)
252
- @browser.instance_eval "#{nested_frames(frame_identifiers)}checkbox(identifier).clear"
253
- end
254
-
255
- #
256
- # platform method to determine if a checkbox is checked
257
- # See PageObject::Accessors#checkbox
258
- #
259
- def checkbox_checked?(identifier)
260
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::CheckBox)
261
- @browser.instance_eval "#{nested_frames(frame_identifiers)}checkbox(identifier).set?"
262
- end
263
-
264
- #
265
- # platform method to return a PageObject::Elements::CheckBox element
266
- # See PageObject::Accessors#checkbox
267
- #
268
- def checkbox_for(identifier)
269
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::CheckBox)
270
- element = @browser.instance_eval "#{nested_frames(frame_identifiers)}checkbox(identifier)"
271
- Elements::CheckBox.new(element, :platform => :watir)
272
- end
273
-
274
- #
275
- # platform method to select a radio button
276
- # See PageObject::Accessors#radio_button
277
- #
278
- def select_radio(identifier)
279
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::RadioButton)
280
- @browser.instance_eval "#{nested_frames(frame_identifiers)}radio(identifier).set"
281
- end
282
-
283
- #
284
- # platform method to clear a radio button
285
- # See PageObject::Accessors#radio_button
286
- #
287
- def clear_radio(identifier)
288
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::RadioButton)
289
- @browser.instance_eval "#{nested_frames(frame_identifiers)}radio(identifier).clear"
290
- end
291
-
292
- #
293
- # platform method to determine if a radio button is selected
294
- # See PageObject::Accessors#radio_button
295
- #
296
- def radio_selected?(identifier)
297
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::RadioButton)
298
- @browser.instance_eval "#{nested_frames(frame_identifiers)}radio(identifier).set?"
299
- end
300
-
301
- #
302
- # platform method to return a PageObject::Eements::RadioButton element
303
- # See PageObject::Accessors#radio_button
304
- #
305
- def radio_button_for(identifier)
306
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::RadioButton)
307
- element = @browser.instance_eval "#{nested_frames(frame_identifiers)}radio(identifier)"
308
- PageObject::Elements::RadioButton.new(element, :platform => :watir)
309
- end
310
-
311
- #
312
- # platform method to return the text for a div
313
- # See PageObject::Accessors#div
314
- #
315
- def div_text_for(identifier)
316
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::Div, 'div')
317
- @browser.instance_eval "#{nested_frames(frame_identifiers)}div(identifier).text"
318
- end
319
-
320
- #
321
- # platform method to return a PageObject::Elements::Div element
322
- # See PageObject::Accessors#div
323
- #
324
- def div_for(identifier)
325
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::Div, 'div')
326
- element = @browser.instance_eval "#{nested_frames(frame_identifiers)}div(identifier)"
327
- PageObject::Elements::Div.new(element, :platform => :watir)
328
- end
329
-
330
- #
331
- # platform method to return the text for a span
332
- # See PageObject::Accessors#span
333
- #
334
- def span_text_for(identifier)
335
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::Span, 'span')
336
- @browser.instance_eval "#{nested_frames(frame_identifiers)}span(identifier).text"
337
- end
338
-
339
- #
340
- # platform method to return a PageObject::Elements::Span element
341
- # See PageObject::Accessors#span
342
- #
343
- def span_for(identifier)
344
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::Span, 'span')
345
- element = @browser.instance_eval "#{nested_frames(frame_identifiers)}span(identifier)"
346
- PageObject::Elements::Span.new(element, :platform => :watir)
347
- end
348
-
349
- #
350
- # platform method to click a button
351
- # See PageObject::Accessors#button
352
- #
353
- def click_button_for(identifier)
354
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::Button)
355
- @browser.instance_eval "#{nested_frames(frame_identifiers)}button(identifier).click"
356
- end
357
-
358
- #
359
- # platform method to retrieve a button element
360
- # See PageObject::Accessors#button
361
- #
362
- def button_for(identifier)
363
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::Button)
364
- element = @browser.instance_eval "#{nested_frames(frame_identifiers)}button(identifier)"
365
- PageObject::Elements::Button.new(element, :platform => :watir)
366
- end
367
-
368
- #
369
- # platform method to retrieve a table element
370
- # See PageObject::Accessors#table
371
- #
372
- def table_for(identifier)
373
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::Table, 'table')
374
- element = @browser.instance_eval "#{nested_frames(frame_identifiers)}table(identifier)"
375
- PageObject::Elements::Table.new(element, :platform => :watir)
376
- end
377
-
378
- #
379
- # platform method to retrieve the text from a table cell
380
- # See PageObject::Accessors#cell
381
- #
382
- def cell_text_for(identifier)
383
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::TableCell, 'td')
384
- @browser.instance_eval "#{nested_frames(frame_identifiers)}td(identifier).text"
385
- end
386
-
387
- #
388
- # platform method to retrieve a table cell element
389
- # See PageObject::Accessors#cell
390
- #
391
- def cell_for(identifier)
392
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::TableCell, 'td')
393
- element = @browser.instance_eval "#{nested_frames(frame_identifiers)}td(identifier)"
394
- PageObject::Elements::TableCell.new(element, :platform => :watir)
395
- end
396
-
397
- #
398
- # platform method to retrieve an image element
399
- # See PageObject::Accessors#image
400
- #
401
- def image_for(identifier)
402
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::Image)
403
- element = @browser.instance_eval "#{nested_frames(frame_identifiers)}image(identifier)"
404
- PageObject::Elements::Image.new(element, :platform => :watir)
405
- end
406
-
407
- #
408
- # platform method to retrieve a form element
409
- # See PageObject::Accessors#form
410
- #
411
- def form_for(identifier)
412
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::Form)
413
- element = @browser.instance_eval "#{nested_frames(frame_identifiers)}form(identifier)"
414
- PageObject::Elements::Form.new(element, :platform => :watir)
415
- end
416
-
417
- #
418
- # platform method to retrieve the text from a list item
419
- # See PageObject::Accessors#list_item
420
- #
421
- def list_item_text_for(identifier)
422
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::ListItem, 'li')
423
- @browser.instance_eval "#{nested_frames(frame_identifiers)}li(identifier).text"
424
- end
425
-
426
- #
427
- # platform method to retrieve a list item element
428
- # See PageObject::Accessors#list_item
429
- #
430
- def list_item_for(identifier)
431
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::ListItem, 'li')
432
- element = @browser.instance_eval "#{nested_frames(frame_identifiers)}li(identifier)"
433
- PageObject::Elements::ListItem.new(element, :platform => :watir)
434
- end
435
-
436
- #
437
- # platform method to retrieve an unordered list element
438
- # See PageObject::Accessors#unordered_list
439
- #
440
- def unordered_list_for(identifier)
441
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::UnorderedList, 'ul')
442
- element = @browser.instance_eval "#{nested_frames(frame_identifiers)}ul(identifier)"
443
- PageObject::Elements::UnorderedList.new(element, :platform => :watir)
444
- end
445
-
446
- #
447
- # platform method to retrieve an ordered list element
448
- # See PageObject::Accessors#ordered_list
449
- #
450
- def ordered_list_for(identifier)
451
- identifier, frame_identifiers = parse_identifiers(identifier, Elements::OrderedList, 'ol')
452
- element = @browser.instance_eval "#{nested_frames(frame_identifiers)}ol(identifier)"
453
- PageObject::Elements::OrderedList.new(element, :platform => :watir)
454
- end
455
-
456
- private
457
-
458
- def parse_identifiers(identifier, element, tag_name=nil)
459
- frame_identifiers = identifier.delete(:frame)
460
- identifier = add_tagname_if_needed identifier, tag_name if tag_name
461
- identifier = element.watir_identifier_for identifier
462
- return identifier, frame_identifiers
463
- end
464
-
465
- def add_tagname_if_needed identifier, tag
466
- return identifier if identifier.length < 2 and not identifier[:name]
467
- identifier[:tag_name] = tag if identifier[:name]
468
- identifier
469
- end
470
-
471
- def nested_frames(frame_identifiers)
472
- return if frame_identifiers.nil?
473
- frame_str = ''
474
- frame_identifiers.each do |id|
475
- value = id.values.first
476
- frame_str += "frame(:#{id.keys.first} => #{value})." if value.to_s.is_integer
477
- frame_str += "frame(:#{id.keys.first} => '#{value}')." unless value.to_s.is_integer
478
- end
479
- frame_str
480
- end
481
- end
482
- end