walidhalabi-celerity 0.0.6.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. data/History.txt +75 -0
  2. data/License.txt +621 -0
  3. data/README.txt +73 -0
  4. data/Rakefile +12 -0
  5. data/lib/celerity.rb +74 -0
  6. data/lib/celerity/browser.rb +811 -0
  7. data/lib/celerity/clickable_element.rb +69 -0
  8. data/lib/celerity/collections.rb +156 -0
  9. data/lib/celerity/container.rb +788 -0
  10. data/lib/celerity/default_viewer.rb +10 -0
  11. data/lib/celerity/disabled_element.rb +40 -0
  12. data/lib/celerity/element.rb +313 -0
  13. data/lib/celerity/element_collection.rb +107 -0
  14. data/lib/celerity/element_locator.rb +170 -0
  15. data/lib/celerity/elements/button.rb +43 -0
  16. data/lib/celerity/elements/file_field.rb +25 -0
  17. data/lib/celerity/elements/form.rb +23 -0
  18. data/lib/celerity/elements/frame.rb +75 -0
  19. data/lib/celerity/elements/image.rb +76 -0
  20. data/lib/celerity/elements/label.rb +11 -0
  21. data/lib/celerity/elements/link.rb +30 -0
  22. data/lib/celerity/elements/meta.rb +6 -0
  23. data/lib/celerity/elements/non_control_elements.rb +106 -0
  24. data/lib/celerity/elements/option.rb +32 -0
  25. data/lib/celerity/elements/radio_check.rb +115 -0
  26. data/lib/celerity/elements/select_list.rb +121 -0
  27. data/lib/celerity/elements/table.rb +144 -0
  28. data/lib/celerity/elements/table_cell.rb +29 -0
  29. data/lib/celerity/elements/table_elements.rb +42 -0
  30. data/lib/celerity/elements/table_row.rb +48 -0
  31. data/lib/celerity/elements/text_field.rb +169 -0
  32. data/lib/celerity/exception.rb +77 -0
  33. data/lib/celerity/htmlunit.rb +61 -0
  34. data/lib/celerity/htmlunit/commons-codec-1.3.jar +0 -0
  35. data/lib/celerity/htmlunit/commons-collections-3.2.1.jar +0 -0
  36. data/lib/celerity/htmlunit/commons-httpclient-3.1.jar +0 -0
  37. data/lib/celerity/htmlunit/commons-io-1.4.jar +0 -0
  38. data/lib/celerity/htmlunit/commons-lang-2.4.jar +0 -0
  39. data/lib/celerity/htmlunit/commons-logging-1.1.1.jar +0 -0
  40. data/lib/celerity/htmlunit/cssparser-0.9.5.jar +0 -0
  41. data/lib/celerity/htmlunit/htmlunit-2.6-SNAPSHOT.jar +0 -0
  42. data/lib/celerity/htmlunit/htmlunit-core-js-2.5.jar +0 -0
  43. data/lib/celerity/htmlunit/nekohtml-1.9.13-20090507.082850-2.jar +0 -0
  44. data/lib/celerity/htmlunit/sac-1.3.jar +0 -0
  45. data/lib/celerity/htmlunit/serializer-2.7.1.jar +0 -0
  46. data/lib/celerity/htmlunit/xalan-2.7.1.jar +0 -0
  47. data/lib/celerity/htmlunit/xercesImpl-2.8.1.jar +0 -0
  48. data/lib/celerity/htmlunit/xml-apis-1.3.04.jar +0 -0
  49. data/lib/celerity/identifier.rb +11 -0
  50. data/lib/celerity/input_element.rb +25 -0
  51. data/lib/celerity/listener.rb +141 -0
  52. data/lib/celerity/resources/no_viewer.png +0 -0
  53. data/lib/celerity/short_inspect.rb +20 -0
  54. data/lib/celerity/util.rb +91 -0
  55. data/lib/celerity/version.rb +10 -0
  56. data/lib/celerity/watir_compatibility.rb +84 -0
  57. data/tasks/jar.rake +57 -0
  58. data/tasks/rdoc.rake +4 -0
  59. metadata +130 -0
@@ -0,0 +1,69 @@
1
+ module Celerity
2
+ module ClickableElement
3
+
4
+ #
5
+ # click the element
6
+ #
7
+
8
+ def click
9
+ assert_exists_and_enabled
10
+ rescue_status_code_exception { @container.update_page(@object.click) }
11
+ end
12
+
13
+ #
14
+ # double click the element (Celerity only)
15
+ #
16
+
17
+ def double_click
18
+ assert_exists_and_enabled
19
+ rescue_status_code_exception { @container.update_page(@object.dblClick) }
20
+ end
21
+
22
+ #
23
+ # right click the element (Celerity only)
24
+ #
25
+
26
+ def right_click
27
+ assert_exists_and_enabled
28
+ rescue_status_code_exception { @container.update_page(@object.rightClick) }
29
+ end
30
+
31
+ #
32
+ # Click the element and return a new Browser instance with the resulting page.
33
+ # This is useful for elements that trigger popups when clicked.
34
+ #
35
+ # @return [Celerity::Browser]
36
+ #
37
+
38
+ def click_and_attach
39
+ assert_exists_and_enabled
40
+ browser = Browser.new(@browser.options.dup)
41
+ browser.webclient.set_cookie_manager(
42
+ @browser.webclient.get_cookie_manager
43
+ ) # hirobumi: we do want cookies as well.
44
+
45
+ rescue_status_code_exception { browser.update_page(@object.click) }
46
+
47
+ browser
48
+ end
49
+
50
+ #
51
+ # Click the element and just return the content as IO. Current page stays unchanged.
52
+ # This can be used to download content that normally isn't rendered in a browser.
53
+ #
54
+ # @return [IO]
55
+ #
56
+
57
+ def download
58
+ assert_exists_and_enabled
59
+ @object.click.getWebResponse.getContentAsStream.to_io
60
+ end
61
+
62
+ private
63
+
64
+ def assert_exists_and_enabled
65
+ assert_exists
66
+ assert_enabled if respond_to?(:assert_enabled)
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,156 @@
1
+ module Celerity
2
+
3
+ class Frames < ElementCollection
4
+ def element_class; Frame; end
5
+ end
6
+
7
+ class Buttons < ElementCollection
8
+ def element_class; Button; end
9
+ end
10
+
11
+ class FileFields < ElementCollection
12
+ def element_class; FileField; end
13
+ end
14
+
15
+ class CheckBoxes < ElementCollection
16
+ def element_class; CheckBox; end
17
+ end
18
+
19
+ class Radios < ElementCollection
20
+ def element_class; Radio; end
21
+ end
22
+
23
+ class SelectLists < ElementCollection
24
+ def element_class; SelectList; end
25
+ end
26
+
27
+ class Links < ElementCollection
28
+ def element_class; Link; end
29
+ end
30
+
31
+ class Uls < ElementCollection
32
+ def element_class; Ul; end
33
+ end
34
+
35
+ class Ols < ElementCollection
36
+ def element_class; Ol; end
37
+ end
38
+
39
+ class Lis < ElementCollection
40
+ def element_class; Li; end
41
+ end
42
+
43
+ class Dds < ElementCollection
44
+ def element_class; Dd; end
45
+ end
46
+
47
+ class Dls < ElementCollection
48
+ def element_class; Dl; end
49
+ end
50
+
51
+ class Dts < ElementCollection
52
+ def element_class; Dt; end
53
+ end
54
+
55
+ class Ems < ElementCollection
56
+ def element_class; Em; end
57
+ end
58
+
59
+ class Maps < ElementCollection
60
+ def element_class; Map; end
61
+ end
62
+
63
+ class Areas < ElementCollection
64
+ def element_class; Area; end
65
+ end
66
+
67
+ class Images < ElementCollection
68
+ def element_class; Image; end
69
+ end
70
+
71
+ class TextFields < ElementCollection
72
+ def element_class; TextField; end
73
+ end
74
+
75
+ class Hiddens < ElementCollection
76
+ def element_class; Hidden; end
77
+ end
78
+
79
+ class Tables < ElementCollection
80
+ def element_class; Table; end
81
+ end
82
+
83
+ class TableHeaders < ElementCollection
84
+ def element_class; TableHeader; end
85
+ end
86
+ class TableBodies < ElementCollection
87
+ def element_class; TableBody; end
88
+ end
89
+ class TableFooters < ElementCollection
90
+ def element_class; TableFooter; end
91
+ end
92
+
93
+ class TableRows < ElementCollection
94
+ def element_class; TableRow; end
95
+ end
96
+
97
+ class TableCells < ElementCollection
98
+ def element_class; TableCell; end
99
+ end
100
+
101
+ class Labels < ElementCollection
102
+ def element_class; Label; end
103
+ end
104
+
105
+ class Pres < ElementCollection
106
+ def element_class; Pre; end
107
+ end
108
+
109
+ class Ps < ElementCollection
110
+ def element_class; P; end
111
+ end
112
+
113
+ class Spans < ElementCollection
114
+ def element_class; Span; end
115
+ end
116
+
117
+ class Strongs < ElementCollection
118
+ def element_class; Strong; end
119
+ end
120
+
121
+ class Divs < ElementCollection
122
+ def element_class; Div; end
123
+ end
124
+
125
+ class Forms < ElementCollection
126
+ def element_class; Form; end
127
+ end
128
+
129
+ class Options < ElementCollection
130
+ def element_class; Option; end
131
+ end
132
+
133
+ class Metas < ElementCollection
134
+ def element_class; Meta; end
135
+ end
136
+
137
+ class H1s < ElementCollection
138
+ def element_class; H1; end
139
+ end
140
+ class H2s < ElementCollection
141
+ def element_class; H2; end
142
+ end
143
+ class H3s < ElementCollection
144
+ def element_class; H3; end
145
+ end
146
+ class H4s < ElementCollection
147
+ def element_class; H4; end
148
+ end
149
+ class H5s < ElementCollection
150
+ def element_class; H5; end
151
+ end
152
+ class H6s < ElementCollection
153
+ def element_class; H6; end
154
+ end
155
+
156
+ end
@@ -0,0 +1,788 @@
1
+ module Celerity
2
+
3
+ #
4
+ # This class contains methods for accessing elements inside a container,
5
+ # usually the Browser object, meaning the current page.
6
+ # The most common syntax is
7
+ # browser.elem(:attribute, 'value')
8
+ #
9
+ # Note that the element is located lazily, so no exceptions will be raised
10
+ # if the element doesn't exist until you call a method on the resulting object.
11
+ # To do this you would normally use Element#exists? or an action method,
12
+ # like ClickableElement#click.
13
+ # You can also pass in a hash:
14
+ #
15
+ # browser.link(:index => 1).click
16
+ #
17
+ # All elements support multiple attributes identification using the
18
+ # hash syntax (though this might not always be compatible with Watir):
19
+ #
20
+ # browser.span(:class_name => 'product', :index => 5).text
21
+ #
22
+ # Checkboxes and radio buttons support a special three-argument syntax:
23
+ #
24
+ # browser.check_box(:name, 'a_name', '1234').set
25
+ #
26
+ # You can also get all the elements of a certain type by using the plural form (@see Celerity::ElementCollection):
27
+ #
28
+ # browser.links # => #<Celerity::Links:0x7a1c2da2 ...>
29
+ #
30
+
31
+ module Container
32
+ include Celerity::Exception
33
+ include Celerity::ShortInspect
34
+
35
+ # Points back to the Browser instance that contains this element
36
+ attr_reader :browser
37
+
38
+ #
39
+ # Check if the element contains the given text.
40
+ #
41
+ # @param [String, Regexp] expected_text The text to look for.
42
+ # @return [Fixnum, nil] The index of the matched text, or nil if it doesn't match.
43
+ #
44
+
45
+ def contains_text(expected_text)
46
+ assert_exists
47
+ return nil unless respond_to? :text
48
+
49
+ case expected_text
50
+ when Regexp
51
+ text() =~ expected_text
52
+ when String
53
+ text().index(expected_text)
54
+ else
55
+ raise TypeError, "expected String or Regexp, got #{expected_text.inspect}:#{expected_text.class}"
56
+ end
57
+ end
58
+
59
+ #
60
+ # Override inspect for readability
61
+ #
62
+
63
+ def inspect
64
+ short_inspect :include => %w[@conditions @object]
65
+ end
66
+
67
+ #
68
+ # Used internally to update the container object.
69
+ # @api private
70
+ #
71
+
72
+ def container=(container)
73
+ @container = container
74
+ @browser = container.browser
75
+ container
76
+ end
77
+
78
+ #
79
+ # Used internally to update the page object.
80
+ # @api private
81
+ #
82
+
83
+ def update_page(page)
84
+ @browser.page = page
85
+ end
86
+
87
+ #--
88
+ # below methods sorted alphabetically
89
+ #++
90
+
91
+ #
92
+ # @return [Celerity::Area]
93
+ #
94
+
95
+ def area(*args)
96
+ Area.new(self, *args)
97
+ end
98
+
99
+ #
100
+ # @return [Celerity::Areas]
101
+ #
102
+
103
+ def areas
104
+ Areas.new(self)
105
+ end
106
+
107
+ #
108
+ # @return [Celerity::Button]
109
+ #
110
+
111
+ def button(*args)
112
+ Button.new(self, *args)
113
+ end
114
+
115
+ #
116
+ # @return [Celerity::Buttons]
117
+ #
118
+
119
+ def buttons
120
+ Buttons.new(self)
121
+ end
122
+
123
+ #
124
+ # @return [Celerity::TableCell]
125
+ #
126
+
127
+ def cell(*args)
128
+ TableCell.new(self, *args)
129
+ end
130
+
131
+ #
132
+ # @return [Celerity::TableCells]
133
+ #
134
+
135
+ def cells
136
+ TableCells.new(self)
137
+ end
138
+
139
+ #
140
+ # Since finding checkboxes by value is very common, you can use this shorthand:
141
+ #
142
+ # browser.check_box(:name, 'a_name', '1234').set
143
+ #
144
+ # or
145
+ #
146
+ # browser.check_box(:name => 'a_name', :value => '1234').set
147
+ #
148
+ # @return [Celerity::CheckBox]
149
+ #
150
+
151
+ def check_box(*args)
152
+ CheckBox.new(self, *args)
153
+ end
154
+
155
+ #
156
+ # @return [Celerity::CheckBoxes]
157
+ #
158
+
159
+ def checkboxes
160
+ CheckBoxes.new(self)
161
+ end
162
+
163
+ #
164
+ # @return [Celerity::Dd]
165
+ #
166
+
167
+ def dd(*args)
168
+ Dd.new(self, *args)
169
+ end
170
+
171
+ #
172
+ # @return [Celerity::Dds]
173
+ #
174
+
175
+ def dds
176
+ Dds.new(self)
177
+ end
178
+
179
+ #
180
+ # @return [Celerity::Div]
181
+ #
182
+
183
+ def div(*args)
184
+ Div.new(self, *args)
185
+ end
186
+
187
+ #
188
+ # @return [Celerity::Divs]
189
+ #
190
+
191
+ def divs
192
+ Divs.new(self)
193
+ end
194
+
195
+ #
196
+ # @return [Celerity::Dl]
197
+ #
198
+
199
+ def dl(*args)
200
+ Dl.new(self, *args)
201
+ end
202
+
203
+ #
204
+ # @return [Celerity::Dls]
205
+ #
206
+
207
+ def dls
208
+ Dls.new(self)
209
+ end
210
+
211
+ #
212
+ # @return [Celerity::Dt]
213
+ #
214
+
215
+ def dt(*args)
216
+ Dt.new(self, *args)
217
+ end
218
+
219
+ #
220
+ # @return [Celerity::Dts]
221
+ #
222
+
223
+ def dts
224
+ Dts.new(self)
225
+ end
226
+
227
+ #
228
+ # @return [Celerity::Em]
229
+ #
230
+
231
+ def em(*args)
232
+ Em.new(self, *args)
233
+ end
234
+
235
+ #
236
+ # @return [Celerity::Ems]
237
+ #
238
+
239
+ def ems
240
+ Ems.new(self)
241
+ end
242
+
243
+ #
244
+ # @return [Celerity::FileField]
245
+ #
246
+
247
+ def file_field(*args)
248
+ FileField.new(self, *args)
249
+ end
250
+
251
+ #
252
+ # @return [Celerity::FileFields]
253
+ #
254
+
255
+ def file_fields
256
+ FileFields.new(self)
257
+ end
258
+
259
+ #
260
+ # @return [Celerity::Form]
261
+ #
262
+
263
+ def form(*args)
264
+ Form.new(self, *args)
265
+ end
266
+
267
+ #
268
+ # @return [Celerity::Forms]
269
+ #
270
+
271
+ def forms
272
+ Forms.new(self)
273
+ end
274
+
275
+ #
276
+ # @return [Celerity::Frame]
277
+ #
278
+
279
+ def frame(*args)
280
+ Frame.new(self, *args)
281
+ end
282
+
283
+ #
284
+ # @return [Celerity::Frames]
285
+ #
286
+
287
+ def frames
288
+ Frames.new(self)
289
+ end
290
+
291
+ #
292
+ # @return [Celerity::H1]
293
+ #
294
+
295
+ def h1(*args)
296
+ H1.new(self, *args)
297
+ end
298
+
299
+ #
300
+ # @return [Celerity::H1s]
301
+ #
302
+
303
+ def h1s
304
+ H1s.new(self)
305
+ end
306
+
307
+ #
308
+ # @return [Celerity::H2]
309
+ #
310
+
311
+ def h2(*args)
312
+ H2.new(self, *args)
313
+ end
314
+
315
+ #
316
+ # @return [Celerity::H2s]
317
+ #
318
+
319
+ def h2s
320
+ H2s.new(self)
321
+ end
322
+
323
+ #
324
+ # @return [Celerity::H3]
325
+ #
326
+
327
+ def h3(*args)
328
+ H3.new(self, *args)
329
+ end
330
+
331
+ #
332
+ # @return [Celerity::H3s]
333
+ #
334
+
335
+ def h3s
336
+ H3s.new(self)
337
+ end
338
+
339
+ #
340
+ # @return [Celerity::H4]
341
+ #
342
+
343
+ def h4(*args)
344
+ H4.new(self, *args)
345
+ end
346
+
347
+ #
348
+ # @return [Celerity::H4s]
349
+ #
350
+
351
+ def h4s
352
+ H4s.new(self)
353
+ end
354
+
355
+ #
356
+ # @return [Celerity::H5]
357
+ #
358
+
359
+ def h5(*args)
360
+ H5.new(self, *args)
361
+ end
362
+
363
+ #
364
+ # @return [Celerity::H5s]
365
+ #
366
+
367
+ def h5s
368
+ H5s.new(self)
369
+ end
370
+
371
+ #
372
+ # @return [Celerity::H6]
373
+ #
374
+
375
+ def h6(*args)
376
+ H6.new(self, *args)
377
+ end
378
+
379
+ #
380
+ # @return [Celerity::H6s]
381
+ #
382
+
383
+ def h6s
384
+ H6s.new(self)
385
+ end
386
+
387
+ #
388
+ # @return [Celerity::Hidden]
389
+ #
390
+
391
+ def hidden(*args)
392
+ Hidden.new(self, *args)
393
+ end
394
+
395
+ #
396
+ # @return [Celerity::Hiddens]
397
+ #
398
+
399
+ def hiddens
400
+ Hiddens.new(self)
401
+ end
402
+
403
+ #
404
+ # @return [Celerity::Image]
405
+ #
406
+
407
+ def image(*args)
408
+ Image.new(self, *args)
409
+ end
410
+
411
+ #
412
+ # @return [Celerity::Images]
413
+ #
414
+
415
+ def images
416
+ Images.new(self)
417
+ end
418
+
419
+ #
420
+ # @return [Celerity::Label]
421
+ #
422
+
423
+ def label(*args)
424
+ Label.new(self, *args)
425
+ end
426
+
427
+ #
428
+ # @return [Celerity::Labels]
429
+ #
430
+
431
+ def labels
432
+ Labels.new(self)
433
+ end
434
+
435
+ #
436
+ # @return [Celerity::Li]
437
+ #
438
+
439
+ def li(*args)
440
+ Li.new(self, *args)
441
+ end
442
+
443
+ #
444
+ # @return [Celerity::Lis]
445
+ #
446
+
447
+ def lis
448
+ Lis.new(self)
449
+ end
450
+
451
+ #
452
+ # @return [Celerity::Link]
453
+ #
454
+
455
+ def link(*args)
456
+ Link.new(self, *args)
457
+ end
458
+
459
+ #
460
+ # @return [Celerity::Links]
461
+ #
462
+
463
+ def links
464
+ Links.new(self)
465
+ end
466
+
467
+ #
468
+ # @return [Celerity::Map]
469
+ #
470
+
471
+ def map(*args)
472
+ Map.new(self, *args)
473
+ end
474
+
475
+ #
476
+ # @return [Celerity::Maps]
477
+ #
478
+
479
+ def maps
480
+ Maps.new(self)
481
+ end
482
+
483
+ #
484
+ # @return [Celerity::Meta]
485
+ #
486
+
487
+ def meta(*args)
488
+ Meta.new(self, *args)
489
+ end
490
+
491
+ #
492
+ # @return [Celerity::Metas]
493
+ #
494
+
495
+ def metas(*args)
496
+ Metas.new(self, *args)
497
+ end
498
+
499
+ #
500
+ # @return [Celerity::Ol]
501
+ #
502
+
503
+ def ol(*args)
504
+ Ol.new(self, *args)
505
+ end
506
+
507
+ #
508
+ # @return [Celerity::Ols]
509
+ #
510
+
511
+ def ols
512
+ Ols.new(self)
513
+ end
514
+
515
+ #
516
+ # @return [Celerity::Option]
517
+ #
518
+
519
+ def option(*args)
520
+ Option.new(self, *args)
521
+ end
522
+
523
+ #
524
+ # @return [Celerity::P]
525
+ #
526
+
527
+ def p(*args)
528
+ P.new(self, *args)
529
+ end
530
+
531
+ #
532
+ # @return [Celerity::Ps]
533
+ #
534
+
535
+ def ps
536
+ Ps.new(self)
537
+ end
538
+
539
+ #
540
+ # @return [Celerity::Pre]
541
+ #
542
+
543
+ def pre(*args)
544
+ Pre.new(self, *args)
545
+ end
546
+
547
+ #
548
+ # @return [Celerity::Pres]
549
+ #
550
+
551
+ def pres
552
+ Pres.new(self)
553
+ end
554
+
555
+ #
556
+ # Since finding radios by value is very common, you can use this shorthand:
557
+ #
558
+ # browser.radio(:name, 'a_name', '1234').set
559
+ #
560
+ # or
561
+ #
562
+ # browser.radio(:name => 'a_name', :value => '1234').set
563
+ #
564
+ # @return [Celerity::Radio]
565
+ #
566
+
567
+ def radio(*args)
568
+ Radio.new(self, *args)
569
+ end
570
+
571
+ #
572
+ # @return [Celerity::Radios]
573
+ #
574
+
575
+ def radios
576
+ Radios.new(self)
577
+ end
578
+
579
+ #
580
+ # @return [Celerity::TableRow]
581
+ #
582
+
583
+ def row(*args)
584
+ TableRow.new(self, *args)
585
+ end
586
+
587
+ #
588
+ # @return [Celerity::TableRows]
589
+ #
590
+
591
+ def rows
592
+ TableRows.new(self)
593
+ end
594
+
595
+ #
596
+ # @return [Celerity::SelectList]
597
+ #
598
+
599
+ def select_list(*args)
600
+ SelectList.new(self, *args)
601
+ end
602
+
603
+ #
604
+ # @return [Celerity::SelectLists]
605
+ #
606
+
607
+ def select_lists
608
+ SelectLists.new(self)
609
+ end
610
+
611
+ #
612
+ # @return [Celerity::Span]
613
+ #
614
+
615
+ def span(*args)
616
+ Span.new(self, *args)
617
+ end
618
+
619
+ #
620
+ # @return [Celerity::Spans]
621
+ #
622
+
623
+ def spans
624
+ Spans.new(self)
625
+ end
626
+
627
+ #
628
+ # @return [Celerity::Spans]
629
+ #
630
+
631
+ def strong(*args)
632
+ Strong.new(self, *args)
633
+ end
634
+
635
+ #
636
+ # @return [Celerity::Strongs]
637
+ #
638
+
639
+ def strongs
640
+ Strongs.new(self)
641
+ end
642
+
643
+ #
644
+ # @return [Celerity::Table]
645
+ #
646
+
647
+ def table(*args)
648
+ Table.new(self, *args)
649
+ end
650
+
651
+ #
652
+ # @return [Celerity::Tables]
653
+ #
654
+
655
+ def tables
656
+ Tables.new(self)
657
+ end
658
+
659
+ #
660
+ # @return [Celerity::TableBody]
661
+ #
662
+
663
+ def tbody(*args)
664
+ TableBody.new(self, *args)
665
+ end
666
+
667
+ #
668
+ # @return [Celerity::TableBodies]
669
+ #
670
+
671
+ def tbodies
672
+ TableBodies.new(self)
673
+ end
674
+
675
+ #
676
+ # @return [Celerity::TextField]
677
+ #
678
+
679
+ def text_field(*args)
680
+ TextField.new(self, *args)
681
+ end
682
+
683
+ #
684
+ # @return [Celerity::TextFields]
685
+ #
686
+
687
+ def text_fields
688
+ TextFields.new(self)
689
+ end
690
+
691
+ #
692
+ # @return [Celerity::TableFooter]
693
+ #
694
+
695
+ def tfoot(*args)
696
+ TableFooter.new(self, *args)
697
+ end
698
+
699
+ #
700
+ # @return [Celerity::TableFooters]
701
+ #
702
+
703
+ def tfoots
704
+ TableFooters.new(self)
705
+ end
706
+ alias_method :tfeet, :tfoots # :-)
707
+
708
+ #
709
+ # Watir's cells() won't find <th> elements.
710
+ # This is a workaround.
711
+ #
712
+ # @return [Celerity::Th]
713
+ #
714
+
715
+ def th(*args)
716
+ Th.new(self, *args)
717
+ end
718
+
719
+ #
720
+ # FIXME: implement or change api,
721
+ # @see th
722
+ #
723
+
724
+ def ths
725
+ raise NotImplementedError
726
+ end
727
+
728
+ #
729
+ # @return [Celerity::TableHeader]
730
+ #
731
+
732
+ def thead(*args)
733
+ TableHeader.new(self, *args)
734
+ end
735
+
736
+ #
737
+ # @return [Celerity::TableHeaders]
738
+ #
739
+
740
+ def theads
741
+ TableHeaders.new(self)
742
+ end
743
+
744
+ #
745
+ # @return [Celerity::Ul]
746
+ #
747
+
748
+ def ul(*args)
749
+ Ul.new(self, *args)
750
+ end
751
+
752
+ #
753
+ # @return [Celerity::Uls]
754
+ #
755
+
756
+ def uls
757
+ Uls.new(self)
758
+ end
759
+
760
+ private
761
+
762
+ #
763
+ # Used internally.
764
+ #
765
+ # @param [String] string The string to match against.
766
+ # @param [Regexp, String, #to_s] what The match we're looking for.
767
+ # @return [Fixnum, true, false, nil]
768
+ #
769
+ # @api private
770
+ #
771
+
772
+ def matches?(string, what)
773
+ Regexp === what ? string =~ what : string == what.to_s
774
+ end
775
+
776
+ #
777
+ # Rescues HtmlUnit::FailingHttpStatusCodeException and re-raises as
778
+ # Celerity::NavigationException to avoid the huge JRuby backtrace
779
+ #
780
+
781
+ def rescue_status_code_exception(&blk)
782
+ yield
783
+ rescue HtmlUnit::FailingHttpStatusCodeException => e
784
+ raise NavigationException, e.message, caller
785
+ end
786
+
787
+ end # Container
788
+ end # Celerity