page-object 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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]