page-object 0.2.2 → 0.2.3

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.
@@ -41,6 +41,17 @@ module PageObject
41
41
  return how, what
42
42
  end
43
43
  end
44
+
45
+ # @private
46
+ # delegate calls to driver element
47
+ def method_missing(*args, &block)
48
+ m = args.shift
49
+ begin
50
+ element.send m, *args, &block
51
+ rescue Exception => e
52
+ raise
53
+ end
54
+ end
44
55
 
45
56
  protected
46
57
 
@@ -2,6 +2,16 @@ module PageObject
2
2
  module Elements
3
3
  class TableCell < Element
4
4
 
5
+ protected
6
+
7
+ def self.watir_finders
8
+ super + [:text]
9
+ end
10
+
11
+ def self.selenium_finders
12
+ super + [:text]
13
+ end
14
+
5
15
  end
6
16
  end
7
17
  end
@@ -118,9 +118,7 @@ module PageObject
118
118
  # See PageObject::Accessors#text_field
119
119
  #
120
120
  def text_field_value_for(identifier)
121
- frame_identifiers = identifier.delete(:frame)
122
- identifier = add_tagname_if_needed identifier, 'input', :type => 'text'
123
- how, what = Elements::TextField.selenium_identifier_for identifier
121
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::TextField, 'input', :type => 'text')
124
122
  switch_to_frame(frame_identifiers)
125
123
  text = @browser.find_element(how, what).attribute('value')
126
124
  @browser.switch_to.default_content
@@ -132,9 +130,7 @@ module PageObject
132
130
  # See PageObject::Accessors#text_field
133
131
  #
134
132
  def text_field_value_set(identifier, value)
135
- frame_identifiers = identifier.delete(:frame)
136
- identifier = add_tagname_if_needed identifier, 'input', :type => 'text'
137
- how, what = Elements::TextField.selenium_identifier_for identifier
133
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::TextField, 'input', :type => 'text')
138
134
  switch_to_frame(frame_identifiers)
139
135
  @browser.find_element(how, what).clear
140
136
  @browser.find_element(how, what).send_keys(value)
@@ -146,9 +142,7 @@ module PageObject
146
142
  # See PageObject::Accessors#text_field
147
143
  #
148
144
  def text_field_for(identifier)
149
- frame_identifiers = identifier.delete(:frame)
150
- identifier = add_tagname_if_needed identifier, 'input', :type => 'text'
151
- how, what = Elements::TextField.selenium_identifier_for identifier
145
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::TextField, 'input', :type => 'text')
152
146
  switch_to_frame(frame_identifiers)
153
147
  element = @browser.find_element(how, what)
154
148
  @browser.switch_to.default_content
@@ -160,9 +154,7 @@ module PageObject
160
154
  # See PageObject::Accessors#hidden_field
161
155
  #
162
156
  def hidden_field_value_for(identifier)
163
- frame_identifiers = identifier.delete(:frame)
164
- identifier = add_tagname_if_needed identifier, 'input', :type => 'hidden'
165
- how, what = Elements::HiddenField.selenium_identifier_for identifier
157
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::HiddenField, 'input', :type => 'hidden')
166
158
  switch_to_frame(frame_identifiers)
167
159
  value = @browser.find_element(how, what).attribute('value')
168
160
  @browser.switch_to.default_content
@@ -174,9 +166,7 @@ module PageObject
174
166
  # See PageObject::Accessors#hidden_field
175
167
  #
176
168
  def hidden_field_for(identifier)
177
- frame_identifiers = identifier.delete(:frame)
178
- identifier = add_tagname_if_needed identifier, 'input', :type => 'hidden'
179
- how, what = Elements::HiddenField.selenium_identifier_for identifier
169
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::HiddenField, 'input', :type => 'hidden')
180
170
  switch_to_frame(frame_identifiers)
181
171
  element = @browser.find_element(how, what)
182
172
  @browser.switch_to.default_content
@@ -188,9 +178,7 @@ module PageObject
188
178
  # See PageObject::Accessors#text_area
189
179
  #
190
180
  def text_area_value_set(identifier, value)
191
- frame_identifiers = identifier.delete(:frame)
192
- identifier = add_tagname_if_needed identifier, 'textarea'
193
- how, what = Elements::TextArea.selenium_identifier_for identifier
181
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::TextArea, 'textarea')
194
182
  switch_to_frame(frame_identifiers)
195
183
  @browser.find_element(how, what).send_keys(value)
196
184
  @browser.switch_to.default_content
@@ -201,9 +189,7 @@ module PageObject
201
189
  # See PageObject::Accessors#text_area
202
190
  #
203
191
  def text_area_value_for(identifier)
204
- frame_identifiers = identifier.delete(:frame)
205
- identifier = add_tagname_if_needed identifier, 'textarea'
206
- how, what = Elements::TextArea.selenium_identifier_for identifier
192
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::TextArea, 'textarea')
207
193
  switch_to_frame(frame_identifiers)
208
194
  value = @browser.find_element(how, what).attribute('value')
209
195
  @browser.switch_to.default_content
@@ -215,9 +201,7 @@ module PageObject
215
201
  # See PageObject::Accessors#text_area
216
202
  #
217
203
  def text_area_for(identifier)
218
- frame_identifiers = identifier.delete(:frame)
219
- identifier = add_tagname_if_needed identifier, 'textarea'
220
- how, what = Elements::TextArea.selenium_identifier_for identifier
204
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::TextArea, 'textarea')
221
205
  switch_to_frame(frame_identifiers)
222
206
  element = @browser.find_element(how, what)
223
207
  @browser.switch_to.default_content
@@ -229,9 +213,7 @@ module PageObject
229
213
  # See PageObject::Accessors#select_list
230
214
  #
231
215
  def select_list_value_for(identifier)
232
- frame_identifiers = identifier.delete(:frame)
233
- identifier = add_tagname_if_needed identifier, 'select'
234
- how, what = Elements::SelectList.selenium_identifier_for identifier
216
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::SelectList, 'select')
235
217
  switch_to_frame(frame_identifiers)
236
218
  value = @browser.find_element(how, what).attribute('value')
237
219
  @browser.switch_to.default_content
@@ -243,9 +225,7 @@ module PageObject
243
225
  # See PageObject::Accessors#select_list
244
226
  #
245
227
  def select_list_value_set(identifier, value)
246
- frame_identifiers = identifier.delete(:frame)
247
- identifier = add_tagname_if_needed identifier, 'select'
248
- how, what = Elements::SelectList.selenium_identifier_for identifier
228
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::SelectList, 'select')
249
229
  switch_to_frame(frame_identifiers)
250
230
  @browser.find_element(how, what).send_keys(value)
251
231
  @browser.switch_to.default_content
@@ -256,9 +236,7 @@ module PageObject
256
236
  # See PageObject::Accessors#select_list
257
237
  #
258
238
  def select_list_for(identifier)
259
- frame_identifiers = identifier.delete(:frame)
260
- identifier = add_tagname_if_needed identifier, 'select'
261
- how, what = Elements::SelectList.selenium_identifier_for identifier
239
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::SelectList, 'select')
262
240
  switch_to_frame(frame_identifiers)
263
241
  element = @browser.find_element(how, what)
264
242
  @browser.switch_to.default_content
@@ -270,9 +248,7 @@ module PageObject
270
248
  # See PageObject::Accessors#link
271
249
  #
272
250
  def click_link_for(identifier)
273
- frame_identifiers = identifier.delete(:frame)
274
- identifier = add_tagname_if_needed identifier, "a"
275
- how, what = Elements::Link.selenium_identifier_for identifier
251
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::Link, 'a')
276
252
  switch_to_frame frame_identifiers
277
253
  @browser.find_element(how, what).click
278
254
  @browser.switch_to.default_content
@@ -283,9 +259,7 @@ module PageObject
283
259
  # see PageObject::Accessors#link
284
260
  #
285
261
  def link_for(identifier)
286
- frame_identifiers = identifier.delete(:frame)
287
- identifier = add_tagname_if_needed identifier, "a"
288
- how, what = Elements::Link.selenium_identifier_for identifier
262
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::Link, 'a')
289
263
  switch_to_frame(frame_identifiers)
290
264
  element = @browser.find_element(how, what)
291
265
  @browser.switch_to.default_content
@@ -297,9 +271,7 @@ module PageObject
297
271
  # See PageObject::Accessors#checkbox
298
272
  #
299
273
  def check_checkbox(identifier)
300
- frame_identifiers = identifier.delete(:frame)
301
- identifier = add_tagname_if_needed identifier, 'input', :type => 'checkbox'
302
- how, what = Elements::CheckBox.selenium_identifier_for identifier
274
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::CheckBox, 'input', :type => 'checkbox')
303
275
  switch_to_frame(frame_identifiers)
304
276
  @browser.find_element(how, what).click unless @browser.find_element(how, what).selected?
305
277
  @browser.switch_to.default_content
@@ -310,9 +282,7 @@ module PageObject
310
282
  # See PageObject::Accessors#checkbox
311
283
  #
312
284
  def uncheck_checkbox(identifier)
313
- frame_identifiers = identifier.delete(:frame)
314
- identifier = add_tagname_if_needed identifier, 'input', :type => 'checkbox'
315
- how, what = Elements::CheckBox.selenium_identifier_for identifier
285
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::CheckBox, 'input', :type => 'checkbox')
316
286
  switch_to_frame(frame_identifiers)
317
287
  @browser.find_element(how, what).click if @browser.find_element(how, what).selected?
318
288
  @browser.switch_to.default_content
@@ -323,9 +293,7 @@ module PageObject
323
293
  # See PageObject::Accessors#checkbox
324
294
  #
325
295
  def checkbox_checked?(identifier)
326
- frame_identifiers = identifier.delete(:frame)
327
- identifier = add_tagname_if_needed identifier, 'input', :type => 'checkbox'
328
- how, what = Elements::CheckBox.selenium_identifier_for identifier
296
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::CheckBox, 'input', :type => 'checkbox')
329
297
  switch_to_frame(frame_identifiers)
330
298
  value = @browser.find_element(how, what).selected?
331
299
  @browser.switch_to.default_content
@@ -337,9 +305,7 @@ module PageObject
337
305
  # See PageObject::Accessors#checkbox
338
306
  #
339
307
  def checkbox_for(identifier)
340
- frame_identifiers = identifier.delete(:frame)
341
- identifier = add_tagname_if_needed identifier, 'input', :type => 'checkbox'
342
- how, what = Elements::CheckBox.selenium_identifier_for identifier
308
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::CheckBox, 'input', :type => 'checkbox')
343
309
  switch_to_frame(frame_identifiers)
344
310
  element = @browser.find_element(how, what)
345
311
  @browser.switch_to.default_content
@@ -351,9 +317,7 @@ module PageObject
351
317
  # See PageObject::Accessors#radio_button
352
318
  #
353
319
  def select_radio(identifier)
354
- frame_identifiers = identifier.delete(:frame)
355
- identifier = add_tagname_if_needed identifier, 'input', :type => 'radio'
356
- how, what = Elements::RadioButton.selenium_identifier_for identifier
320
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::RadioButton, 'input', :type => 'radio')
357
321
  switch_to_frame(frame_identifiers)
358
322
  @browser.find_element(how, what).click unless @browser.find_element(how, what).selected?
359
323
  @browser.switch_to.default_content
@@ -364,9 +328,7 @@ module PageObject
364
328
  # See PageObject::Accessors#radio_button
365
329
  #
366
330
  def clear_radio(identifier)
367
- frame_identifiers = identifier.delete(:frame)
368
- identifier = add_tagname_if_needed identifier, 'input', :type => 'radio'
369
- how, what = Elements::RadioButton.selenium_identifier_for identifier
331
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::RadioButton, 'input', :type => 'radio')
370
332
  switch_to_frame(frame_identifiers)
371
333
  @browser.find_element(how, what).click if @browser.find_element(how, what).selected?
372
334
  @browser.switch_to.default_content
@@ -377,9 +339,7 @@ module PageObject
377
339
  # See PageObject::Accessors#radio_button
378
340
  #
379
341
  def radio_selected?(identifier)
380
- frame_identifiers = identifier.delete(:frame)
381
- identifier = add_tagname_if_needed identifier, 'input', :type => 'radio'
382
- how, what = Elements::RadioButton.selenium_identifier_for identifier
342
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::RadioButton, 'input', :type => 'radio')
383
343
  switch_to_frame(frame_identifiers)
384
344
  value = @browser.find_element(how, what).selected?
385
345
  @browser.switch_to.default_content
@@ -391,9 +351,7 @@ module PageObject
391
351
  # See PageObject::Accessors#radio_button
392
352
  #
393
353
  def radio_button_for(identifier)
394
- frame_identifiers = identifier.delete(:frame)
395
- identifier = add_tagname_if_needed identifier, 'input', :type => 'radio'
396
- how, what = Elements::RadioButton.selenium_identifier_for identifier
354
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::RadioButton, 'input', :type => 'radio')
397
355
  switch_to_frame(frame_identifiers)
398
356
  element = @browser.find_element(how, what)
399
357
  @browser.switch_to.default_content
@@ -405,9 +363,7 @@ module PageObject
405
363
  # See PageObject::Accessors#div
406
364
  #
407
365
  def div_text_for(identifier)
408
- frame_identifiers = identifier.delete(:frame)
409
- identifier = add_tagname_if_needed identifier, 'div'
410
- how, what = Elements::Div.selenium_identifier_for identifier
366
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::Div, 'div')
411
367
  switch_to_frame(frame_identifiers)
412
368
  value = @browser.find_element(how, what).text
413
369
  @browser.switch_to.default_content
@@ -419,9 +375,7 @@ module PageObject
419
375
  # See PageObject::Accessors#div
420
376
  #
421
377
  def div_for(identifier)
422
- frame_identifiers = identifier.delete(:frame)
423
- identifier = add_tagname_if_needed identifier, 'div'
424
- how, what = Elements::Div.selenium_identifier_for identifier
378
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::Div, 'div')
425
379
  switch_to_frame(frame_identifiers)
426
380
  element = @browser.find_element(how, what)
427
381
  @browser.switch_to.default_content
@@ -433,9 +387,7 @@ module PageObject
433
387
  # See PageObject::Accessors#span
434
388
  #
435
389
  def span_text_for(identifier)
436
- frame_identifiers = identifier.delete(:frame)
437
- identifier = add_tagname_if_needed identifier, 'span'
438
- how, what = Elements::Span.selenium_identifier_for identifier
390
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::Span, 'span')
439
391
  switch_to_frame(frame_identifiers)
440
392
  value = @browser.find_element(how, what).text
441
393
  @browser.switch_to.default_content
@@ -447,9 +399,7 @@ module PageObject
447
399
  # See PageObject::Accessors#span
448
400
  #
449
401
  def span_for(identifier)
450
- frame_identifiers = identifier.delete(:frame)
451
- identifier = add_tagname_if_needed identifier, 'span'
452
- how, what = Elements::Span.selenium_identifier_for identifier
402
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::Span, 'span')
453
403
  switch_to_frame(frame_identifiers)
454
404
  element = @browser.find_element(how, what)
455
405
  @browser.switch_to.default_content
@@ -461,9 +411,7 @@ module PageObject
461
411
  # See PageObject::Accessors#button
462
412
  #
463
413
  def click_button_for(identifier)
464
- frame_identifiers = identifier.delete(:frame)
465
- identifier = add_tagname_if_needed identifier, 'input', :type => 'submit'
466
- how, what = Elements::Button.selenium_identifier_for identifier
414
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::Button, 'input', :type => 'submit')
467
415
  switch_to_frame(frame_identifiers)
468
416
  @browser.find_element(how, what).click
469
417
  @browser.switch_to.default_content
@@ -474,9 +422,7 @@ module PageObject
474
422
  # See PageObject::Accessors#button
475
423
  #
476
424
  def button_for(identifier)
477
- frame_identifiers = identifier.delete(:frame)
478
- identifier = add_tagname_if_needed identifier, 'input', :type => 'submit'
479
- how, what = Elements::Button.selenium_identifier_for identifier
425
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::Button, 'input', :type => 'submit')
480
426
  switch_to_frame(frame_identifiers)
481
427
  element = @browser.find_element(how, what)
482
428
  @browser.switch_to.default_content
@@ -488,9 +434,7 @@ module PageObject
488
434
  # See PageObject::Accessors#table
489
435
  #
490
436
  def table_for(identifier)
491
- frame_identifiers = identifier.delete(:frame)
492
- identifier = add_tagname_if_needed identifier, 'table'
493
- how, what = Elements::Table.selenium_identifier_for identifier
437
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::Table, 'table')
494
438
  switch_to_frame(frame_identifiers)
495
439
  element = @browser.find_element(how, what)
496
440
  @browser.switch_to.default_content
@@ -502,9 +446,7 @@ module PageObject
502
446
  # See PageObject::Accessors#cell
503
447
  #
504
448
  def cell_text_for(identifier)
505
- frame_identifiers = identifier.delete(:frame)
506
- identifier = add_tagname_if_needed identifier, 'td'
507
- how, what = Elements::TableCell.selenium_identifier_for identifier
449
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::TableCell, 'td')
508
450
  switch_to_frame(frame_identifiers)
509
451
  value = @browser.find_element(how, what).text
510
452
  @browser.switch_to.default_content
@@ -516,9 +458,7 @@ module PageObject
516
458
  # See PageObject::Accessors#cell
517
459
  #
518
460
  def cell_for(identifier)
519
- frame_identifiers = identifier.delete(:frame)
520
- identifier = add_tagname_if_needed identifier, 'td'
521
- how, what = Elements::TableCell.selenium_identifier_for identifier
461
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::TableCell, 'td')
522
462
  switch_to_frame(frame_identifiers)
523
463
  element = @browser.find_element(how, what)
524
464
  @browser.switch_to.default_content
@@ -530,9 +470,7 @@ module PageObject
530
470
  # See PageObject::Accessors#image
531
471
  #
532
472
  def image_for(identifier)
533
- frame_identifiers = identifier.delete(:frame)
534
- identifier = add_tagname_if_needed identifier, 'img'
535
- how, what = Elements::Image.selenium_identifier_for identifier
473
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::Image, 'img')
536
474
  switch_to_frame(frame_identifiers)
537
475
  element = @browser.find_element(how, what)
538
476
  @browser.switch_to.default_content
@@ -544,9 +482,7 @@ module PageObject
544
482
  # See PageObject::Accessors#form
545
483
  #
546
484
  def form_for(identifier)
547
- frame_identifiers = identifier.delete(:frame)
548
- identifier = add_tagname_if_needed identifier, 'form'
549
- how, what = Elements::Form.selenium_identifier_for identifier
485
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::Form, 'form')
550
486
  switch_to_frame(frame_identifiers)
551
487
  element = @browser.find_element(how, what)
552
488
  @browser.switch_to.default_content
@@ -558,9 +494,7 @@ module PageObject
558
494
  # See PageObject::Accessors#list_item
559
495
  #
560
496
  def list_item_text_for(identifier)
561
- frame_identifiers = identifier.delete(:frame)
562
- identifier = add_tagname_if_needed identifier, 'li'
563
- how, what = Elements::ListItem.selenium_identifier_for identifier
497
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::ListItem, 'li')
564
498
  switch_to_frame(frame_identifiers)
565
499
  value = @browser.find_element(how, what).text
566
500
  @browser.switch_to.default_content
@@ -572,9 +506,7 @@ module PageObject
572
506
  # See PageObject::Accessors#list_item
573
507
  #
574
508
  def list_item_for(identifier)
575
- frame_identifiers = identifier.delete(:frame)
576
- identifier = add_tagname_if_needed identifier, 'li'
577
- how, what = Elements::ListItem.selenium_identifier_for identifier
509
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::ListItem, 'li')
578
510
  switch_to_frame(frame_identifiers)
579
511
  element = @browser.find_element(how, what)
580
512
  @browser.switch_to.default_content
@@ -586,9 +518,7 @@ module PageObject
586
518
  # See PageObject::Accessors#unordered_list
587
519
  #
588
520
  def unordered_list_for(identifier)
589
- frame_identifiers = identifier.delete(:frame)
590
- identifier = add_tagname_if_needed identifier, 'ul'
591
- how, what = Elements::UnorderedList.selenium_identifier_for identifier
521
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::UnorderedList, 'ul')
592
522
  switch_to_frame(frame_identifiers)
593
523
  element = @browser.find_element(how, what)
594
524
  @browser.switch_to.default_content
@@ -600,9 +530,7 @@ module PageObject
600
530
  # See PageObject::Accessors#ordered_list
601
531
  #
602
532
  def ordered_list_for(identifier)
603
- frame_identifiers = identifier.delete(:frame)
604
- identifier = add_tagname_if_needed identifier, 'ol'
605
- how, what = Elements::OrderedList.selenium_identifier_for identifier
533
+ how, what, frame_identifiers = parse_identifiers(identifier, Elements::OrderedList, 'ol')
606
534
  switch_to_frame(frame_identifiers)
607
535
  element = @browser.find_element(how, what)
608
536
  @browser.switch_to.default_content
@@ -610,6 +538,13 @@ module PageObject
610
538
  end
611
539
 
612
540
  private
541
+
542
+ def parse_identifiers(identifier, element, tag_name=nil, additional=nil)
543
+ frame_identifiers = identifier.delete(:frame)
544
+ identifier = add_tagname_if_needed identifier, tag_name, additional if tag_name
545
+ how, what = element.selenium_identifier_for identifier
546
+ return how, what, frame_identifiers
547
+ end
613
548
 
614
549
  def add_tagname_if_needed identifier, tag, additional=nil
615
550
  return identifier if identifier.length < 2 and supported_identifier(identifier, tag, additional)
@@ -627,6 +562,7 @@ module PageObject
627
562
  return false if identifier[:text] and tag == 'input' and additional[:type] == 'hidden'
628
563
  return false if identifier[:href] and tag == 'a'
629
564
  return false if identifier[:text] and tag == 'div'
565
+ return false if identifier[:text] and tag == 'td'
630
566
  true
631
567
  end
632
568
 
@@ -101,8 +101,7 @@ module PageObject
101
101
  # See PageObject::Accessors#text_field
102
102
  #
103
103
  def text_field_value_for(identifier)
104
- frame_identifiers = identifier.delete(:frame)
105
- identifier = Elements::TextField.watir_identifier_for identifier
104
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::TextField)
106
105
  @browser.instance_eval "#{nested_frames(frame_identifiers)}text_field(identifier).value"
107
106
  end
108
107
 
@@ -111,8 +110,7 @@ module PageObject
111
110
  # See PageObject::Accessors#text_field
112
111
  #
113
112
  def text_field_value_set(identifier, value)
114
- frame_identifiers = identifier.delete(:frame)
115
- identifier = Elements::TextField.watir_identifier_for identifier
113
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::TextField)
116
114
  @browser.instance_eval "#{nested_frames(frame_identifiers)}text_field(identifier).set(value)"
117
115
  end
118
116
 
@@ -121,8 +119,7 @@ module PageObject
121
119
  # See PageObject::Accessors#text_field
122
120
  #
123
121
  def text_field_for(identifier)
124
- frame_identifiers = identifier.delete(:frame)
125
- identifier = Elements::TextField.watir_identifier_for identifier
122
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::TextField)
126
123
  element = @browser.instance_eval "#{nested_frames(frame_identifiers)}text_field(identifier)"
127
124
  Elements::TextField.new(element, :platform => :watir)
128
125
  end
@@ -132,8 +129,7 @@ module PageObject
132
129
  # See PageObject::Accessors#hidden_field
133
130
  #
134
131
  def hidden_field_value_for(identifier)
135
- frame_identifiers = identifier.delete(:frame)
136
- identifier = Elements::HiddenField.watir_identifier_for identifier
132
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::HiddenField)
137
133
  @browser.instance_eval "#{nested_frames(frame_identifiers)}hidden(identifier).value"
138
134
  end
139
135
 
@@ -142,8 +138,7 @@ module PageObject
142
138
  # See PageObject::Accessors#hidden_field
143
139
  #
144
140
  def hidden_field_for(identifier)
145
- frame_identifiers = identifier.delete(:frame)
146
- identifier = Elements::HiddenField.watir_identifier_for identifier
141
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::HiddenField)
147
142
  element = @browser.instance_eval "#{nested_frames(frame_identifiers)}hidden(identifier)"
148
143
  Elements::HiddenField.new(element, :platform => :watir)
149
144
  end
@@ -153,8 +148,7 @@ module PageObject
153
148
  # See PageObject::Accessors#text_area
154
149
  #
155
150
  def text_area_value_set(identifier, value)
156
- frame_identifiers = identifier.delete(:frame)
157
- identifier = Elements::TextArea.watir_identifier_for identifier
151
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::TextArea)
158
152
  @browser.instance_eval "#{nested_frames(frame_identifiers)}textarea(identifier).send_keys(value)"
159
153
  end
160
154
 
@@ -163,8 +157,7 @@ module PageObject
163
157
  # See PageObject::Accessors#text_area
164
158
  #
165
159
  def text_area_value_for(identifier)
166
- frame_identifiers = identifier.delete(:frame)
167
- identifier = Elements::TextArea.watir_identifier_for identifier
160
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::TextArea)
168
161
  @browser.instance_eval "#{nested_frames(frame_identifiers)}textarea(identifier).value"
169
162
  end
170
163
 
@@ -173,8 +166,7 @@ module PageObject
173
166
  # See PageObject::Accessors#text_area
174
167
  #
175
168
  def text_area_for(identifier)
176
- frame_identifiers = identifier.delete(:frame)
177
- identifier = Elements::TextArea.watir_identifier_for identifier
169
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::TextArea)
178
170
  element = @browser.instance_eval "#{nested_frames(frame_identifiers)}textarea(identifier)"
179
171
  Elements::TextArea.new(element, :platform => :watir)
180
172
  end
@@ -184,8 +176,7 @@ module PageObject
184
176
  # See PageObject::Accessors#select_list
185
177
  #
186
178
  def select_list_value_for(identifier)
187
- frame_identifiers = identifier.delete(:frame)
188
- identifier = Elements::SelectList.watir_identifier_for identifier
179
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::SelectList)
189
180
  @browser.instance_eval "#{nested_frames(frame_identifiers)}select_list(identifier).value"
190
181
  end
191
182
 
@@ -194,8 +185,7 @@ module PageObject
194
185
  # See PageObject::Accessors#select_list
195
186
  #
196
187
  def select_list_value_set(identifier, value)
197
- frame_identifiers = identifier.delete(:frame)
198
- identifier = Elements::SelectList.watir_identifier_for identifier
188
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::SelectList)
199
189
  @browser.instance_eval "#{nested_frames(frame_identifiers)}select_list(identifier).select(value)"
200
190
  end
201
191
 
@@ -204,8 +194,7 @@ module PageObject
204
194
  # See PageObject::Accessors#select_list
205
195
  #
206
196
  def select_list_for(identifier)
207
- frame_identifiers = identifier.delete(:frame)
208
- identifier = Elements::SelectList.watir_identifier_for identifier
197
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::SelectList)
209
198
  element = @browser.instance_eval "#{nested_frames(frame_identifiers)}select_list(identifier)"
210
199
  Elements::SelectList.new(element, :platform => :watir)
211
200
  end
@@ -215,8 +204,7 @@ module PageObject
215
204
  # See PageObject::Accessors#link
216
205
  #
217
206
  def click_link_for(identifier)
218
- frame_identifiers = identifier.delete(:frame)
219
- identifier = Elements::Link.watir_identifier_for identifier
207
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::Link)
220
208
  @browser.instance_eval "#{nested_frames(frame_identifiers)}link(identifier).click if identifier"
221
209
  end
222
210
 
@@ -225,8 +213,7 @@ module PageObject
225
213
  # see PageObject::Accessors#link
226
214
  #
227
215
  def link_for(identifier)
228
- frame_identifiers = identifier.delete(:frame)
229
- identifier = Elements::Link.watir_identifier_for identifier
216
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::Link)
230
217
  element = @browser.instance_eval "#{nested_frames(frame_identifiers)}link(identifier)"
231
218
  Elements::Link.new(element, :platform => :watir)
232
219
  end
@@ -236,8 +223,7 @@ module PageObject
236
223
  # See PageObject::Accessors#checkbox
237
224
  #
238
225
  def check_checkbox(identifier)
239
- frame_identifiers = identifier.delete(:frame)
240
- identifier = Elements::CheckBox.watir_identifier_for identifier
226
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::CheckBox)
241
227
  @browser.instance_eval "#{nested_frames(frame_identifiers)}checkbox(identifier).set"
242
228
  end
243
229
 
@@ -246,8 +232,7 @@ module PageObject
246
232
  # See PageObject::Accessors#checkbox
247
233
  #
248
234
  def uncheck_checkbox(identifier)
249
- frame_identifiers = identifier.delete(:frame)
250
- identifier = Elements::CheckBox.watir_identifier_for identifier
235
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::CheckBox)
251
236
  @browser.instance_eval "#{nested_frames(frame_identifiers)}checkbox(identifier).clear"
252
237
  end
253
238
 
@@ -256,8 +241,7 @@ module PageObject
256
241
  # See PageObject::Accessors#checkbox
257
242
  #
258
243
  def checkbox_checked?(identifier)
259
- frame_identifiers = identifier.delete(:frame)
260
- identifier = Elements::CheckBox.watir_identifier_for identifier
244
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::CheckBox)
261
245
  @browser.instance_eval "#{nested_frames(frame_identifiers)}checkbox(identifier).set?"
262
246
  end
263
247
 
@@ -266,8 +250,7 @@ module PageObject
266
250
  # See PageObject::Accessors#checkbox
267
251
  #
268
252
  def checkbox_for(identifier)
269
- frame_identifiers = identifier.delete(:frame)
270
- identifier = Elements::CheckBox.watir_identifier_for identifier
253
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::CheckBox)
271
254
  element = @browser.instance_eval "#{nested_frames(frame_identifiers)}checkbox(identifier)"
272
255
  Elements::CheckBox.new(element, :platform => :watir)
273
256
  end
@@ -277,8 +260,7 @@ module PageObject
277
260
  # See PageObject::Accessors#radio_button
278
261
  #
279
262
  def select_radio(identifier)
280
- frame_identifiers = identifier.delete(:frame)
281
- identifier = Elements::RadioButton.watir_identifier_for identifier
263
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::RadioButton)
282
264
  @browser.instance_eval "#{nested_frames(frame_identifiers)}radio(identifier).set"
283
265
  end
284
266
 
@@ -287,8 +269,7 @@ module PageObject
287
269
  # See PageObject::Accessors#radio_button
288
270
  #
289
271
  def clear_radio(identifier)
290
- frame_identifiers = identifier.delete(:frame)
291
- identifier = Elements::RadioButton.watir_identifier_for identifier
272
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::RadioButton)
292
273
  @browser.instance_eval "#{nested_frames(frame_identifiers)}radio(identifier).clear"
293
274
  end
294
275
 
@@ -297,8 +278,7 @@ module PageObject
297
278
  # See PageObject::Accessors#radio_button
298
279
  #
299
280
  def radio_selected?(identifier)
300
- frame_identifiers = identifier.delete(:frame)
301
- identifier = Elements::RadioButton.watir_identifier_for identifier
281
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::RadioButton)
302
282
  @browser.instance_eval "#{nested_frames(frame_identifiers)}radio(identifier).set?"
303
283
  end
304
284
 
@@ -307,8 +287,7 @@ module PageObject
307
287
  # See PageObject::Accessors#radio_button
308
288
  #
309
289
  def radio_button_for(identifier)
310
- frame_identifiers = identifier.delete(:frame)
311
- identifier = Elements::RadioButton.watir_identifier_for identifier
290
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::RadioButton)
312
291
  element = @browser.instance_eval "#{nested_frames(frame_identifiers)}radio(identifier)"
313
292
  PageObject::Elements::RadioButton.new(element, :platform => :watir)
314
293
  end
@@ -318,9 +297,7 @@ module PageObject
318
297
  # See PageObject::Accessors#div
319
298
  #
320
299
  def div_text_for(identifier)
321
- frame_identifiers = identifier.delete(:frame)
322
- identifier = add_tagname_if_needed identifier, "div"
323
- identifier = Elements::Div.watir_identifier_for identifier
300
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::Div, 'div')
324
301
  @browser.instance_eval "#{nested_frames(frame_identifiers)}div(identifier).text"
325
302
  end
326
303
 
@@ -329,9 +306,7 @@ module PageObject
329
306
  # See PageObject::Accessors#div
330
307
  #
331
308
  def div_for(identifier)
332
- frame_identifiers = identifier.delete(:frame)
333
- identifier = add_tagname_if_needed identifier, "div"
334
- identifier = Elements::Div.watir_identifier_for identifier
309
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::Div, 'div')
335
310
  element = @browser.instance_eval "#{nested_frames(frame_identifiers)}div(identifier)"
336
311
  PageObject::Elements::Div.new(element, :platform => :watir)
337
312
  end
@@ -341,9 +316,7 @@ module PageObject
341
316
  # See PageObject::Accessors#span
342
317
  #
343
318
  def span_text_for(identifier)
344
- frame_identifiers = identifier.delete(:frame)
345
- identifier = add_tagname_if_needed identifier, "span"
346
- identifier = Elements::Span.watir_identifier_for identifier
319
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::Span, 'span')
347
320
  @browser.instance_eval "#{nested_frames(frame_identifiers)}span(identifier).text"
348
321
  end
349
322
 
@@ -352,9 +325,7 @@ module PageObject
352
325
  # See PageObject::Accessors#span
353
326
  #
354
327
  def span_for(identifier)
355
- frame_identifiers = identifier.delete(:frame)
356
- identifier = add_tagname_if_needed identifier, "span"
357
- identifier = Elements::Span.watir_identifier_for identifier
328
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::Span, 'span')
358
329
  element = @browser.instance_eval "#{nested_frames(frame_identifiers)}span(identifier)"
359
330
  PageObject::Elements::Span.new(element, :platform => :watir)
360
331
  end
@@ -364,8 +335,7 @@ module PageObject
364
335
  # See PageObject::Accessors#button
365
336
  #
366
337
  def click_button_for(identifier)
367
- frame_identifiers = identifier.delete(:frame)
368
- identifier = Elements::Button.watir_identifier_for identifier
338
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::Button)
369
339
  @browser.instance_eval "#{nested_frames(frame_identifiers)}button(identifier).click"
370
340
  end
371
341
 
@@ -374,8 +344,7 @@ module PageObject
374
344
  # See PageObject::Accessors#button
375
345
  #
376
346
  def button_for(identifier)
377
- frame_identifiers = identifier.delete(:frame)
378
- identifier = Elements::Button.watir_identifier_for identifier
347
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::Button)
379
348
  element = @browser.instance_eval "#{nested_frames(frame_identifiers)}button(identifier)"
380
349
  PageObject::Elements::Button.new(element, :platform => :watir)
381
350
  end
@@ -385,9 +354,7 @@ module PageObject
385
354
  # See PageObject::Accessors#table
386
355
  #
387
356
  def table_for(identifier)
388
- frame_identifiers = identifier.delete(:frame)
389
- identifier = add_tagname_if_needed identifier, "table"
390
- identifier = Elements::Table.watir_identifier_for identifier.clone
357
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::Table, 'table')
391
358
  element = @browser.instance_eval "#{nested_frames(frame_identifiers)}table(identifier)"
392
359
  PageObject::Elements::Table.new(element, :platform => :watir)
393
360
  end
@@ -397,9 +364,7 @@ module PageObject
397
364
  # See PageObject::Accessors#cell
398
365
  #
399
366
  def cell_text_for(identifier)
400
- frame_identifiers = identifier.delete(:frame)
401
- identifier = add_tagname_if_needed identifier, "td"
402
- identifier = Elements::TableCell.watir_identifier_for identifier
367
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::TableCell, 'td')
403
368
  @browser.instance_eval "#{nested_frames(frame_identifiers)}td(identifier).text"
404
369
  end
405
370
 
@@ -408,9 +373,7 @@ module PageObject
408
373
  # See PageObject::Accessors#cell
409
374
  #
410
375
  def cell_for(identifier)
411
- frame_identifiers = identifier.delete(:frame)
412
- identifier = add_tagname_if_needed identifier, "td"
413
- identifier = Elements::TableCell.watir_identifier_for identifier
376
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::TableCell, 'td')
414
377
  element = @browser.instance_eval "#{nested_frames(frame_identifiers)}td(identifier)"
415
378
  PageObject::Elements::TableCell.new(element, :platform => :watir)
416
379
  end
@@ -420,8 +383,7 @@ module PageObject
420
383
  # See PageObject::Accessors#image
421
384
  #
422
385
  def image_for(identifier)
423
- frame_identifiers = identifier.delete(:frame)
424
- identifier = Elements::Image.watir_identifier_for identifier
386
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::Image)
425
387
  element = @browser.instance_eval "#{nested_frames(frame_identifiers)}image(identifier)"
426
388
  PageObject::Elements::Image.new(element, :platform => :watir)
427
389
  end
@@ -431,8 +393,7 @@ module PageObject
431
393
  # See PageObject::Accessors#form
432
394
  #
433
395
  def form_for(identifier)
434
- frame_identifiers = identifier.delete(:frame)
435
- identifier = Elements::Form.watir_identifier_for identifier
396
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::Form)
436
397
  element = @browser.instance_eval "#{nested_frames(frame_identifiers)}form(identifier)"
437
398
  PageObject::Elements::Form.new(element, :platform => :watir)
438
399
  end
@@ -442,9 +403,7 @@ module PageObject
442
403
  # See PageObject::Accessors#list_item
443
404
  #
444
405
  def list_item_text_for(identifier)
445
- frame_identifiers = identifier.delete(:frame)
446
- identifier = add_tagname_if_needed identifier, "li"
447
- identifier = Elements::ListItem.watir_identifier_for identifier
406
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::ListItem, 'li')
448
407
  @browser.instance_eval "#{nested_frames(frame_identifiers)}li(identifier).text"
449
408
  end
450
409
 
@@ -453,9 +412,7 @@ module PageObject
453
412
  # See PageObject::Accessors#list_item
454
413
  #
455
414
  def list_item_for(identifier)
456
- frame_identifiers = identifier.delete(:frame)
457
- identifier = add_tagname_if_needed identifier, "li"
458
- identifier = Elements::ListItem.watir_identifier_for identifier
415
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::ListItem, 'li')
459
416
  element = @browser.instance_eval "#{nested_frames(frame_identifiers)}li(identifier)"
460
417
  PageObject::Elements::ListItem.new(element, :platform => :watir)
461
418
  end
@@ -465,9 +422,7 @@ module PageObject
465
422
  # See PageObject::Accessors#unordered_list
466
423
  #
467
424
  def unordered_list_for(identifier)
468
- frame_identifiers = identifier.delete(:frame)
469
- identifier = add_tagname_if_needed identifier, "ul"
470
- identifier = Elements::UnorderedList.watir_identifier_for identifier
425
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::UnorderedList, 'ul')
471
426
  element = @browser.instance_eval "#{nested_frames(frame_identifiers)}ul(identifier)"
472
427
  PageObject::Elements::UnorderedList.new(element, :platform => :watir)
473
428
  end
@@ -477,14 +432,19 @@ module PageObject
477
432
  # See PageObject::Accessors#ordered_list
478
433
  #
479
434
  def ordered_list_for(identifier)
480
- frame_identifiers = identifier.delete(:frame)
481
- identifier = add_tagname_if_needed identifier, "ol"
482
- identifier = Elements::OrderedList.watir_identifier_for identifier
435
+ identifier, frame_identifiers = parse_identifiers(identifier, Elements::OrderedList, 'ol')
483
436
  element = @browser.instance_eval "#{nested_frames(frame_identifiers)}ol(identifier)"
484
437
  PageObject::Elements::OrderedList.new(element, :platform => :watir)
485
438
  end
486
439
 
487
440
  private
441
+
442
+ def parse_identifiers(identifier, element, tag_name=nil)
443
+ frame_identifiers = identifier.delete(:frame)
444
+ identifier = add_tagname_if_needed identifier, tag_name if tag_name
445
+ identifier = element.watir_identifier_for identifier
446
+ return identifier, frame_identifiers
447
+ end
488
448
 
489
449
  def add_tagname_if_needed identifier, tag
490
450
  return identifier if identifier.length < 2 and not identifier[:name]