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