oki-celerity 0.8.1.dev

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