celerity 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (136) hide show
  1. data.tar.gz.sig +0 -0
  2. data/History.txt +14 -0
  3. data/Manifest.txt +127 -151
  4. data/README.txt +15 -20
  5. data/lib/celerity.rb +13 -5
  6. data/lib/celerity/browser.rb +296 -0
  7. data/lib/celerity/clickable_element.rb +1 -0
  8. data/lib/celerity/collections.rb +4 -0
  9. data/lib/celerity/container.rb +69 -2
  10. data/lib/celerity/disabled_element.rb +1 -0
  11. data/lib/celerity/element.rb +103 -38
  12. data/lib/celerity/element_collections.rb +14 -8
  13. data/lib/celerity/element_locator.rb +61 -50
  14. data/lib/celerity/element_map.rb +51 -0
  15. data/lib/celerity/elements/button.rb +1 -0
  16. data/lib/celerity/elements/file_field.rb +3 -2
  17. data/lib/celerity/elements/form.rb +1 -0
  18. data/lib/celerity/elements/frame.rb +16 -1
  19. data/lib/celerity/elements/image.rb +15 -13
  20. data/lib/celerity/elements/link.rb +4 -1
  21. data/lib/celerity/elements/option.rb +1 -0
  22. data/lib/celerity/elements/radio_check.rb +19 -7
  23. data/lib/celerity/elements/select_list.rb +17 -2
  24. data/lib/celerity/elements/table.rb +34 -20
  25. data/lib/celerity/elements/table_body.rb +2 -2
  26. data/lib/celerity/elements/table_cell.rb +3 -1
  27. data/lib/celerity/elements/table_footer.rb +2 -2
  28. data/lib/celerity/elements/table_header.rb +2 -2
  29. data/lib/celerity/elements/table_row.rb +4 -2
  30. data/lib/celerity/elements/text_field.rb +20 -9
  31. data/lib/celerity/exception.rb +11 -18
  32. data/lib/celerity/extra/method_generator.rb +13 -8
  33. data/lib/celerity/htmlunit/download.sh +23 -0
  34. data/lib/celerity/htmlunit/htmlunit-2.2.jar +0 -0
  35. data/lib/celerity/htmlunit/htmlunit-core-js-2.2.jar +0 -0
  36. data/lib/celerity/htmlunit/{nekohtml-1.9.7.jar → nekohtml-1.9.8.jar} +0 -0
  37. data/lib/celerity/input_element.rb +1 -1
  38. data/lib/celerity/version.rb +1 -1
  39. data/lib/celerity/watir_compatibility.rb +37 -23
  40. data/spec/area_spec.rb +19 -4
  41. data/spec/areas_spec.rb +2 -3
  42. data/spec/{ie_spec.rb → browser_spec.rb} +66 -15
  43. data/spec/button_spec.rb +36 -3
  44. data/spec/buttons_spec.rb +2 -3
  45. data/spec/checkbox_spec.rb +43 -8
  46. data/spec/checkboxes_spec.rb +2 -3
  47. data/spec/div_spec.rb +31 -4
  48. data/spec/divs_spec.rb +2 -3
  49. data/spec/element_spec.rb +36 -6
  50. data/spec/filefield_spec.rb +28 -13
  51. data/spec/filefields_spec.rb +2 -3
  52. data/spec/form_spec.rb +6 -3
  53. data/spec/forms_spec.rb +2 -3
  54. data/spec/frame_spec.rb +14 -5
  55. data/spec/frames_spec.rb +71 -0
  56. data/spec/hidden_spec.rb +21 -3
  57. data/spec/hiddens_spec.rb +2 -3
  58. data/spec/hn_spec.rb +30 -12
  59. data/spec/hns_spec.rb +14 -10
  60. data/spec/html/form_js_bug.html +11 -0
  61. data/spec/html/forms_with_input_elements.html +2 -1
  62. data/spec/html/invalid_js.html +11 -0
  63. data/spec/html/latin1_text.html +1 -0
  64. data/spec/html/non_control_elements.html +8 -4
  65. data/spec/html/simple_ajax.html +22 -0
  66. data/spec/htmlunit_spec.rb +4 -5
  67. data/spec/image_spec.rb +33 -3
  68. data/spec/images_spec.rb +2 -3
  69. data/spec/label_spec.rb +16 -3
  70. data/spec/labels_spec.rb +2 -3
  71. data/spec/li_spec.rb +25 -3
  72. data/spec/link_spec.rb +35 -3
  73. data/spec/links_spec.rb +2 -3
  74. data/spec/lis_spec.rb +2 -3
  75. data/spec/map_spec.rb +19 -3
  76. data/spec/maps_spec.rb +2 -3
  77. data/spec/meta_spec.rb +3 -1
  78. data/spec/ol_spec.rb +17 -3
  79. data/spec/ols_spec.rb +2 -3
  80. data/spec/option_spec.rb +28 -3
  81. data/spec/p_spec.rb +30 -2
  82. data/spec/pre_spec.rb +25 -3
  83. data/spec/pres_spec.rb +2 -3
  84. data/spec/ps_spec.rb +2 -3
  85. data/spec/radio_spec.rb +47 -3
  86. data/spec/radios_spec.rb +2 -3
  87. data/spec/select_list_spec.rb +42 -3
  88. data/spec/select_lists_spec.rb +2 -3
  89. data/spec/span_spec.rb +32 -7
  90. data/spec/spans_spec.rb +2 -4
  91. data/spec/spec_helper.rb +5 -25
  92. data/spec/table_bodies_spec.rb +7 -5
  93. data/spec/table_body_spec.rb +11 -4
  94. data/spec/table_cell_spec.rb +15 -4
  95. data/spec/table_cells_spec.rb +3 -4
  96. data/spec/table_footer_spec.rb +11 -4
  97. data/spec/table_footers_spec.rb +7 -5
  98. data/spec/table_header_spec.rb +11 -4
  99. data/spec/table_headers_spec.rb +7 -5
  100. data/spec/table_row_spec.rb +31 -7
  101. data/spec/table_rows_spec.rb +5 -4
  102. data/spec/table_spec.rb +36 -7
  103. data/spec/tables_spec.rb +2 -3
  104. data/spec/text_field_spec.rb +51 -13
  105. data/spec/text_fields_spec.rb +2 -3
  106. data/spec/ul_spec.rb +18 -3
  107. data/spec/uls_spec.rb +2 -3
  108. data/spec/{watir_compatability_spec.rb → watir_compatibility_spec.rb} +42 -35
  109. data/support/spec_server.rb +9 -0
  110. metadata +167 -161
  111. metadata.gz.sig +0 -0
  112. data/benchmark/bm_2000_spans.rb +0 -48
  113. data/benchmark/bm_digg.rb +0 -26
  114. data/benchmark/bm_google_images.rb +0 -36
  115. data/benchmark/bm_input_locator.rb +0 -69
  116. data/benchmark/loader.rb +0 -9
  117. data/config/hoe.rb +0 -68
  118. data/config/requirements.rb +0 -15
  119. data/lib/celerity/htmlunit/htmlunit-2.2-SNAPSHOT.jar +0 -0
  120. data/lib/celerity/htmlunit/js-1.7R1.jar +0 -0
  121. data/lib/celerity/ie.rb +0 -195
  122. data/setup.rb +0 -1583
  123. data/support/celerity_viewer/rubycocoa/CelerityViewer.icns +0 -0
  124. data/support/celerity_viewer/rubycocoa/English.lproj/Main.nib/classes.nib +0 -37
  125. data/support/celerity_viewer/rubycocoa/English.lproj/Main.nib/info.nib +0 -19
  126. data/support/celerity_viewer/rubycocoa/English.lproj/Main.nib/keyedobjects.nib +0 -0
  127. data/support/celerity_viewer/rubycocoa/Info.plist.erb +0 -28
  128. data/support/celerity_viewer/rubycocoa/MainController.rb +0 -23
  129. data/support/celerity_viewer/rubycocoa/README +0 -94
  130. data/support/celerity_viewer/rubycocoa/Rakefile +0 -100
  131. data/support/celerity_viewer/rubycocoa/distributed_viewer.rb +0 -86
  132. data/support/celerity_viewer/rubycocoa/main.m +0 -7
  133. data/support/celerity_viewer/rubycocoa/main.rb +0 -27
  134. data/tasks/benchmark.rake +0 -4
  135. data/tasks/environment.rake +0 -7
  136. data/tasks/simple_ci.rake +0 -94
Binary file
@@ -1,3 +1,17 @@
1
+ == 0.0.4 2008-08-18
2
+ * Minor enhancements
3
+ * Update HtmlUnit to 2.2
4
+ * New methods: Element#focus, Element#parent, Table#child_row, Table#child_cell, TableRow#child_cell
5
+ * Rename Celerity::IE -> Celerity::Browser (but Celerity::IE still points to the class)
6
+ * Add Celerity::Browser.new(:browser => :firefox) to use HtmlUnit's Firefox mode.
7
+ * Make it easier to run the spec suite against other implementations.
8
+ * Bugfixes:
9
+ - Image#click
10
+ - Finding elements by id could give weird errors if multiple elements had the same id.
11
+ - If getElementById returns an element with the wrong tag name, output a warning and find the correct element by iteration instead.
12
+ - Browser#goto regexp
13
+ - Frames (collection) support
14
+
1
15
  == 0.0.3 2008-05-26
2
16
  * 3 major enhancements:
3
17
  * Added support for <ul>, <ol>, <thead>, <tfoot>, <h1>, <h2>, <h3>, <h4>, <h5> and <h6> elements
@@ -1,174 +1,150 @@
1
1
  History.txt
2
- spec/table_bodies_spec.rb
3
- spec/table_spec.rb
4
- spec/checkbox_spec.rb
5
- spec/buttons_spec.rb
6
- spec/table_headers_spec.rb
2
+ License.txt
3
+ Manifest.txt
4
+ README.txt
5
+ Rakefile
6
+ lib/celerity.rb
7
+ lib/celerity/browser.rb
8
+ lib/celerity/clickable_element.rb
9
+ lib/celerity/collections.rb
10
+ lib/celerity/container.rb
11
+ lib/celerity/disabled_element.rb
12
+ lib/celerity/element.rb
13
+ lib/celerity/element_collections.rb
14
+ lib/celerity/element_locator.rb
15
+ lib/celerity/element_map.rb
16
+ lib/celerity/elements/button.rb
17
+ lib/celerity/elements/file_field.rb
18
+ lib/celerity/elements/form.rb
19
+ lib/celerity/elements/frame.rb
20
+ lib/celerity/elements/image.rb
21
+ lib/celerity/elements/label.rb
22
+ lib/celerity/elements/link.rb
23
+ lib/celerity/elements/option.rb
24
+ lib/celerity/elements/radio_check.rb
25
+ lib/celerity/elements/select_list.rb
26
+ lib/celerity/elements/table.rb
27
+ lib/celerity/elements/table_body.rb
28
+ lib/celerity/elements/table_cell.rb
29
+ lib/celerity/elements/table_footer.rb
30
+ lib/celerity/elements/table_header.rb
31
+ lib/celerity/elements/table_row.rb
32
+ lib/celerity/elements/text_field.rb
33
+ lib/celerity/exception.rb
34
+ lib/celerity/extra/method_generator.rb
35
+ lib/celerity/htmlunit/commons-codec-1.3.jar
36
+ lib/celerity/htmlunit/commons-collections-3.2.jar
37
+ lib/celerity/htmlunit/commons-httpclient-3.1.jar
38
+ lib/celerity/htmlunit/commons-io-1.4.jar
39
+ lib/celerity/htmlunit/commons-lang-2.4.jar
40
+ lib/celerity/htmlunit/commons-logging-1.1.1.jar
41
+ lib/celerity/htmlunit/cssparser-0.9.5.jar
42
+ lib/celerity/htmlunit/download.sh
43
+ lib/celerity/htmlunit/htmlunit-2.2.jar
44
+ lib/celerity/htmlunit/htmlunit-core-js-2.2.jar
45
+ lib/celerity/htmlunit/nekohtml-1.9.8.jar
46
+ lib/celerity/htmlunit/sac-1.3.jar
47
+ lib/celerity/htmlunit/xalan-2.7.0.jar
48
+ lib/celerity/htmlunit/xercesImpl-2.8.1.jar
49
+ lib/celerity/htmlunit/xml-apis-1.0.b2.jar
50
+ lib/celerity/identifier.rb
51
+ lib/celerity/input_element.rb
52
+ lib/celerity/non_control_elements.rb
53
+ lib/celerity/version.rb
54
+ lib/celerity/watir_compatibility.rb
55
+ spec/area_spec.rb
7
56
  spec/areas_spec.rb
8
- spec/tables_spec.rb
57
+ spec/browser_spec.rb
58
+ spec/button_spec.rb
59
+ spec/buttons_spec.rb
60
+ spec/checkbox_spec.rb
61
+ spec/checkboxes_spec.rb
62
+ spec/div_spec.rb
63
+ spec/divs_spec.rb
64
+ spec/element_spec.rb
65
+ spec/filefield_spec.rb
66
+ spec/filefields_spec.rb
67
+ spec/form_spec.rb
9
68
  spec/forms_spec.rb
10
- spec/uls_spec.rb
11
- spec/map_spec.rb
12
- spec/p_spec.rb
69
+ spec/frame_spec.rb
70
+ spec/frames_spec.rb
71
+ spec/hidden_spec.rb
72
+ spec/hiddens_spec.rb
73
+ spec/hn_spec.rb
74
+ spec/hns_spec.rb
75
+ spec/html/2000_spans.html
76
+ spec/html/bug_duplicate_attributes.html
13
77
  spec/html/bug_javascript_001.html
14
- spec/html/images/originaltriangle.jpg
15
- spec/html/images/circle.jpg
78
+ spec/html/form_js_bug.html
79
+ spec/html/forms_with_input_elements.html
80
+ spec/html/frame_1.html
81
+ spec/html/frame_2.html
82
+ spec/html/frames.html
83
+ spec/html/iframes.html
84
+ spec/html/images.html
16
85
  spec/html/images/1.gif
17
- spec/html/images/square.jpg
18
- spec/html/images/minus.gif
19
- spec/html/images/button.jpg
20
- spec/html/images/map2.gif
86
+ spec/html/images/2.gif
21
87
  spec/html/images/3.gif
88
+ spec/html/images/button.jpg
89
+ spec/html/images/circle.jpg
22
90
  spec/html/images/map.gif
91
+ spec/html/images/map2.gif
92
+ spec/html/images/minus.gif
93
+ spec/html/images/originaltriangle.jpg
23
94
  spec/html/images/plus.gif
95
+ spec/html/images/square.jpg
24
96
  spec/html/images/triangle.jpg
25
- spec/html/images/2.gif
26
- spec/html/frame_2.html
27
- spec/html/iframes.html
28
- spec/html/tables.html
29
- spec/html/frames.html
30
- spec/html/2000_spans.html
31
- spec/html/images.html
97
+ spec/html/invalid_js.html
32
98
  spec/html/latin1_text.html
33
99
  spec/html/non_control_elements.html
34
- spec/html/bug_duplicate_attributes.html
35
- spec/html/frame_1.html
100
+ spec/html/simple_ajax.html
101
+ spec/html/tables.html
36
102
  spec/html/utf8_text.html
37
- spec/html/forms_with_input_elements.html
38
- spec/images_spec.rb
39
- spec/spec_helper.rb
40
- spec/ps_spec.rb
41
- spec/hn_spec.rb
42
- spec/filefield_spec.rb
43
- spec/area_spec.rb
44
103
  spec/htmlunit_spec.rb
45
- spec/labels_spec.rb
46
- spec/table_cell_spec.rb
47
- spec/div_spec.rb
48
- spec/spans_spec.rb
49
- spec/form_spec.rb
104
+ spec/image_spec.rb
105
+ spec/images_spec.rb
50
106
  spec/label_spec.rb
51
- spec/hns_spec.rb
52
- spec/table_body_spec.rb
53
- spec/table_rows_spec.rb
54
- spec/text_field_spec.rb
55
- spec/button_spec.rb
56
- spec/spec.opts
57
- spec/radio_spec.rb
107
+ spec/labels_spec.rb
108
+ spec/li_spec.rb
109
+ spec/link_spec.rb
58
110
  spec/links_spec.rb
59
- spec/meta_spec.rb
60
- spec/span_spec.rb
61
- spec/ie_spec.rb
62
- spec/checkboxes_spec.rb
63
- spec/ul_spec.rb
64
- spec/table_row_spec.rb
65
- spec/pre_spec.rb
66
- spec/watir_compatability_spec.rb
67
- spec/table_header_spec.rb
111
+ spec/lis_spec.rb
112
+ spec/map_spec.rb
68
113
  spec/maps_spec.rb
114
+ spec/meta_spec.rb
115
+ spec/ol_spec.rb
116
+ spec/ols_spec.rb
69
117
  spec/option_spec.rb
70
- spec/select_lists_spec.rb
71
- spec/element_spec.rb
72
- spec/radios_spec.rb
73
- spec/frame_spec.rb
118
+ spec/p_spec.rb
119
+ spec/pre_spec.rb
74
120
  spec/pres_spec.rb
75
- spec/table_footer_spec.rb
76
- spec/filefields_spec.rb
77
- spec/text_fields_spec.rb
78
- spec/hidden_spec.rb
79
- spec/table_footers_spec.rb
80
- spec/ol_spec.rb
121
+ spec/ps_spec.rb
122
+ spec/radio_spec.rb
123
+ spec/radios_spec.rb
81
124
  spec/select_list_spec.rb
82
- spec/divs_spec.rb
83
- spec/lis_spec.rb
84
- spec/ols_spec.rb
85
- spec/hiddens_spec.rb
125
+ spec/select_lists_spec.rb
126
+ spec/span_spec.rb
127
+ spec/spans_spec.rb
128
+ spec/spec.opts
129
+ spec/spec_helper.rb
130
+ spec/table_bodies_spec.rb
131
+ spec/table_body_spec.rb
132
+ spec/table_cell_spec.rb
86
133
  spec/table_cells_spec.rb
87
- spec/li_spec.rb
88
- spec/link_spec.rb
89
- spec/image_spec.rb
90
- config/hoe.rb
91
- config/requirements.rb
92
- README.txt
93
- lib/celerity/input_element.rb
94
- lib/celerity/watir_compatibility.rb
95
- lib/celerity/collections.rb
96
- lib/celerity/container.rb
97
- lib/celerity/element_locator.rb
98
- lib/celerity/identifier.rb
99
- lib/celerity/version.rb
100
- lib/celerity/extra/method_generator.rb
101
- lib/celerity/non_control_elements.rb
102
- lib/celerity/exception.rb
103
- lib/celerity/clickable_element.rb
104
- lib/celerity/disabled_element.rb
105
- lib/celerity/ie.rb
106
- lib/celerity/element_collections.rb
107
- lib/celerity/elements/option.rb
108
- lib/celerity/elements/frame.rb
109
- lib/celerity/elements/select_list.rb
110
- lib/celerity/elements/link.rb
111
- lib/celerity/elements/table_header.rb
112
- lib/celerity/elements/image.rb
113
- lib/celerity/elements/label.rb
114
- lib/celerity/elements/table_cell.rb
115
- lib/celerity/elements/table_footer.rb
116
- lib/celerity/elements/table.rb
117
- lib/celerity/elements/button.rb
118
- lib/celerity/elements/table_row.rb
119
- lib/celerity/elements/form.rb
120
- lib/celerity/elements/table_body.rb
121
- lib/celerity/elements/radio_check.rb
122
- lib/celerity/elements/file_field.rb
123
- lib/celerity/elements/text_field.rb
124
- lib/celerity/htmlunit/xml-apis-1.0.b2.jar
125
- lib/celerity/htmlunit/sac-1.3.jar
126
- lib/celerity/htmlunit/cssparser-0.9.5.jar
127
- lib/celerity/htmlunit/nekohtml-1.9.7.jar
128
- lib/celerity/htmlunit/commons-logging-1.1.1.jar
129
- lib/celerity/htmlunit/commons-codec-1.3.jar
130
- lib/celerity/htmlunit/js-1.7R1.jar
131
- lib/celerity/htmlunit/commons-collections-3.2.jar
132
- lib/celerity/htmlunit/xercesImpl-2.8.1.jar
133
- lib/celerity/htmlunit/xalan-2.7.0.jar
134
- lib/celerity/htmlunit/commons-httpclient-3.1.jar
135
- lib/celerity/htmlunit/htmlunit-2.2-SNAPSHOT.jar
136
- lib/celerity/htmlunit/commons-io-1.4.jar
137
- lib/celerity/htmlunit/commons-lang-2.4.jar
138
- lib/celerity/element.rb
139
- lib/celerity.rb
134
+ spec/table_footer_spec.rb
135
+ spec/table_footers_spec.rb
136
+ spec/table_header_spec.rb
137
+ spec/table_headers_spec.rb
138
+ spec/table_row_spec.rb
139
+ spec/table_rows_spec.rb
140
+ spec/table_spec.rb
141
+ spec/tables_spec.rb
142
+ spec/text_field_spec.rb
143
+ spec/text_fields_spec.rb
144
+ spec/ul_spec.rb
145
+ spec/uls_spec.rb
146
+ spec/watir_compatibility_spec.rb
140
147
  support/spec_server.rb
141
- support/celerity_viewer/rubycocoa/CelerityViewer.icns
142
- support/celerity_viewer/rubycocoa/distributed_viewer.rb
143
- support/celerity_viewer/rubycocoa/README
144
- support/celerity_viewer/rubycocoa/English.lproj
145
- support/celerity_viewer/rubycocoa/English.lproj/Main.nib
146
- support/celerity_viewer/rubycocoa/English.lproj/Main.nib/info.nib
147
- support/celerity_viewer/rubycocoa/English.lproj/Main.nib/classes.nib
148
- support/celerity_viewer/rubycocoa/English.lproj/Main.nib/keyedobjects.nib
149
- support/celerity_viewer/rubycocoa/MainController.rb
150
- support/celerity_viewer/rubycocoa/main.m
151
- support/celerity_viewer/rubycocoa/Rakefile
152
- support/celerity_viewer/rubycocoa/Info.plist.erb
153
- support/celerity_viewer/rubycocoa/CelerityViewer.app
154
- support/celerity_viewer/rubycocoa/CelerityViewer.app/Contents
155
- support/celerity_viewer/rubycocoa/CelerityViewer.app/Contents/MacOS
156
- support/celerity_viewer/rubycocoa/CelerityViewer.app/Contents/Resources
157
- support/celerity_viewer/rubycocoa/CelerityViewer.app/Contents/Resources/English.lproj
158
- support/celerity_viewer/rubycocoa/CelerityViewer.app/Contents/Resources/English.lproj/Main.nib
159
- support/celerity_viewer/rubycocoa/main.rb
160
- Manifest.txt
161
- setup.rb
162
- License.txt
163
- tasks/simple_ci.rake
164
148
  tasks/rdoc.rake
165
- tasks/specserver.rake
166
- tasks/benchmark.rake
167
- tasks/environment.rake
168
149
  tasks/rspec.rake
169
- benchmark/bm_input_locator.rb
170
- benchmark/loader.rb
171
- benchmark/bm_2000_spans.rb
172
- benchmark/bm_digg.rb
173
- benchmark/bm_google_images.rb
174
- Rakefile
150
+ tasks/specserver.rake
data/README.txt CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  * http://celerity.rubyforge.org/
4
4
 
5
+ == TUTORIAL:
6
+
7
+ * http://celerity.rubyforge.org/wiki/wiki.pl?GettingStarted
8
+
5
9
  == DESCRIPTION:
6
10
 
7
11
  Celerity is a JRuby library for easy and fast functional test automation for web applications.
@@ -14,41 +18,32 @@ It is a wrapper around the HtmlUnit Java library and is currently aimed at provi
14
18
  * Easy to use: Simple API
15
19
  * Portable: Cross-platform
16
20
  * Unintrusive: No browser window interrupting your workflow (runs in background)
17
-
18
- == SYNOPSIS:
19
-
20
- require 'rubygems'
21
- require 'celerity'
22
-
23
- browser = Celerity::IE.new
24
- browser.goto("google.com")
25
- browser.text_field(:name, 'q').set("celerity")
26
- browser.button(:name, 'btnG').submit
27
21
 
28
22
  == REQUIREMENTS:
29
23
 
30
- * JRuby 1.1
31
-
24
+ * JRuby 1.1 or higher
32
25
  * Java 6
33
26
 
34
27
  == INSTALL:
35
28
 
36
- * jruby -S gem install celerity
29
+ jruby -S gem install celerity
37
30
 
38
31
  == EXAMPLE:
39
- require "celerity"
40
32
 
41
- browser = Celerity::Browser.new
42
- browser.goto('http://www.google.com')
43
- browser.text_field(:name, 'q').value = 'Celerity'
44
- browser.button(:name, 'btnG').click
33
+ require "rubygems"
34
+ require "celerity"
35
+
36
+ browser = Celerity::Browser.new
37
+ browser.goto('http://www.google.com')
38
+ browser.text_field(:name, 'q').value = 'Celerity'
39
+ browser.button(:name, 'btnG').click
45
40
 
46
- puts "yay" if browser.text.include? 'celerity.rubyforge.org'
41
+ puts "yay" if browser.text.include? 'celerity.rubyforge.org'
47
42
 
48
43
  == LICENSE:
49
44
 
50
45
  Celerity - JRuby wrapper for HtmlUnit
51
- Copyright (c) 2008 FinnTech AS
46
+ Copyright (c) 2008 FINN.no AS
52
47
 
53
48
  This program is free software: you can redistribute it and/or modify
54
49
  it under the terms of the GNU General Public License as published by
@@ -6,12 +6,18 @@ end
6
6
 
7
7
  if RUBY_PLATFORM =~ /java/
8
8
  require 'java'
9
+ JavaString = java.lang.String
10
+
9
11
  Celerity::Jars.each { |jar| require(jar) }
10
12
 
11
13
  module HtmlUnit
12
14
  include_package 'com.gargoylesoftware.htmlunit'
15
+
16
+ module Html
17
+ include_package 'com.gargoylesoftware.htmlunit.html'
18
+ end
13
19
  end
14
- JavaString = java.lang.String
20
+
15
21
  else
16
22
  raise "Celerity only works on JRuby at the moment."
17
23
  end
@@ -35,7 +41,8 @@ require "celerity/element"
35
41
  require "celerity/input_element"
36
42
  require "celerity/non_control_elements"
37
43
  Dir[File.dirname(__FILE__) + "/celerity/elements/*.rb"].each { |f| require(f) }
38
- require "celerity/ie"
44
+ require "celerity/element_map"
45
+ require "celerity/browser"
39
46
 
40
47
  require "celerity/watir_compatibility"
41
48
 
@@ -47,6 +54,7 @@ require "time"
47
54
  Log = Logger.new($DEBUG ? $stderr : nil)
48
55
  Log.level = Logger::DEBUG
49
56
  # undefine deprecated methods to use them for Element attributes
50
- Object.send :undef_method, :id
51
- Object.send :undef_method, :type
52
-
57
+ if ["id", "type"].any? { |meth| Object.instance_methods.include?(meth) }
58
+ Object.send :undef_method, :id
59
+ Object.send :undef_method, :type
60
+ end
@@ -0,0 +1,296 @@
1
+ module Celerity
2
+ class Browser
3
+ include Container
4
+ attr_accessor :page, :object
5
+ attr_reader :webclient, :viewer
6
+
7
+ # Initialize a browser and goto the given URL
8
+ # @param uri The URL to go to.
9
+ # @return Instance of Celerity::Browser.
10
+ def self.start(uri)
11
+ browser = new
12
+ browser.goto(uri)
13
+ browser
14
+ end
15
+
16
+ def self.attach(*args)
17
+ raise NotImplementedError, "no popup handling yet"
18
+ end
19
+
20
+ # Creates a browser object.
21
+ #
22
+ # @param [Hash[Symbol, Object]] Options for initial configuration of the browser.
23
+ #
24
+ # @option :browser[:firefox, :internet_explorer] Set the BrowserVersion used by HtmlUnit.
25
+ # Defaults to Internet Explorer.
26
+ # @option :css[true, false, nil] Enable CSS.
27
+ # Disabled by default.
28
+ # @option :secure_ssl[true, false, nil] Disable secure SSL.
29
+ # Enabled by default.
30
+ # @option :resynchronize[true, false, nil] Use HtmlUnit::NicelyResynchronizingAjaxController to resynchronize Ajax calls.
31
+ # @option :javascript_exceptions[true, false, nil] Throw exceptions on script errors.
32
+ # Disabled by default.
33
+ # @option :status_code_exceptions[true, false, nil]Throw exceptions on failing status codes (404 etc.).
34
+ # Disabled by default.
35
+ #
36
+ # @return [Celerity::Browser] An instance of the browser.
37
+ # @api public
38
+ def initialize(opts = {})
39
+ raise TypeError, "bad argument: #{opts.inspect}" unless opts.is_a? Hash
40
+
41
+ @opts = opts
42
+ @last_url, @page = nil
43
+ @page_container = self
44
+ @error_checkers = []
45
+
46
+ self.log_level = :warning
47
+
48
+ browser = @opts[:browser] == :firefox ?
49
+ ::HtmlUnit::BrowserVersion::FIREFOX_2 : ::HtmlUnit::BrowserVersion::INTERNET_EXPLORER_7_0
50
+
51
+ @webclient = ::HtmlUnit::WebClient.new(browser)
52
+
53
+ configure_webclient
54
+ find_viewer
55
+ end
56
+
57
+ # Goto the given URL
58
+ #
59
+ # @param [String] the url
60
+ # @return [String] the url
61
+ def goto(uri)
62
+ uri = "http://#{uri}" unless uri =~ %r{://}
63
+ self.page = @webclient.getPage(uri)
64
+ uri
65
+ end
66
+
67
+ # Unsets the current page (mostly for Watir compatibility)
68
+ def close
69
+ @page = nil
70
+ end
71
+
72
+ # @return [String] the URL of the current page
73
+ def url
74
+ assert_exists
75
+ @page.getWebResponse.getUrl.toString
76
+ end
77
+
78
+ # @return [String] the title of the current page
79
+ def title
80
+ @page ? @page.getTitleText : ''
81
+ end
82
+
83
+ # @return [String] the HTML content of the current page
84
+ def html
85
+ @page ? @page.getWebResponse.getContentAsString : ''
86
+ end
87
+
88
+ # @return [String] a text representation of the current page
89
+ def text
90
+ return '' unless @page
91
+
92
+ if @page.respond_to?("getContent")
93
+ @page.getContent
94
+ else
95
+ # # this has minimal whitespace
96
+ @page.documentElement.asText
97
+
98
+ # if @opts[:browser] == :firefox
99
+ # # # this is what firewatir does - only works with HtmlUnit::BrowserVersion::FIREFOX_2
100
+ # res = execute_script("document.body.textContent").getJavaScriptResult
101
+ # else
102
+ # # this only works with HtmlUnit::BrowserVersion::INTERNET_EXPLORER_*, and isn't identical to Watir's ole_object.innerText
103
+ # res = execute_script("document.body.innerText").getJavaScriptResult
104
+ # end
105
+ end
106
+ end
107
+
108
+ # Check if the current page contains the given text.
109
+ #
110
+ # @param [String, Regexp] expected_text The text to look for.
111
+ # @return [Numeric, nil] The index of the matched text, or nil if it doesn't match.
112
+ def contains_text(expected_text)
113
+ return nil unless exist?
114
+ case expected_text
115
+ when Regexp
116
+ text() =~ expected_text
117
+ when String
118
+ text().index(expected_text)
119
+ else
120
+ raise ArgumentError, "Argument must be String or Regexp, but was #{expected_text.inspect}:#{expected_text.class}"
121
+ end
122
+ end
123
+
124
+ # @return [HtmlUnit::HtmlHtml] the underlying HtmlUnit object.
125
+ def document
126
+ @object
127
+ end
128
+
129
+ # Goto the last url - HtmlUnit doesn't have a 'back' functionality, so we only have 1 history item :)
130
+ # @return [String, nil] The url of the resulting page, or nil if none was stored.
131
+ def back
132
+ # TODO: this is naive, need capability from HtmlUnit
133
+ goto(@last_url) if @last_url
134
+ end
135
+
136
+ # Refresh the current page
137
+ def refresh
138
+ assert_exists
139
+ self.page = @page.refresh
140
+ end
141
+
142
+ # Execute the given JavaScript on the current page
143
+ # @return [HtmlUnit::ScriptResult]
144
+ def execute_script(source)
145
+ assert_exists
146
+ @page.executeJavaScript(source.to_s)
147
+ end
148
+
149
+ # Add a 'checker' proc that will be run on every page load
150
+ #
151
+ # @param [Proc] checker the proc to be run (can also be given as a block)
152
+ # @raise [ArgumentError] if no Proc or block was given.
153
+ def add_checker(checker = nil, &block)
154
+ if block_given?
155
+ @error_checkers << block
156
+ elsif Proc === checker
157
+ @error_checkers << checker
158
+ else
159
+ raise ArgumentError, "argument must be a Proc or block"
160
+ end
161
+ end
162
+
163
+ # Remove the given checker from the list of checkers
164
+ # @param [Proc] the Proc to disable
165
+ def disable_checker(checker)
166
+ @error_checkers.delete(checker)
167
+ end
168
+
169
+ # Set Java log level (default is :warning)
170
+ #
171
+ # @param [Symbol] level :finest, :finer, :fine, :config, :info, :warning, :severe, or :off, :all
172
+ def log_level=(level)
173
+ java.util.logging.Logger.getLogger('com.gargoylesoftware.htmlunit').level = java.util.logging.Level.const_get(level.to_s.upcase)
174
+ end
175
+
176
+ # @return [Symbol] the current log level
177
+ def log_level
178
+ java.util.logging.Logger.getLogger('com.gargoylesoftware.htmlunit').level.to_s.downcase.to_sym
179
+ end
180
+
181
+ # Checks if we have a page currently loaded.
182
+ # @return [true, false]
183
+ def exist?
184
+ !!@page
185
+ end
186
+ alias_method :exists?, :exist?
187
+
188
+ # Allows you to temporarily switch to HtmlUnit's NicelyResynchronizingAjaxController to resynchronize ajax calls.
189
+ #
190
+ # Example:
191
+ # @browser.resynchroniced do |b|
192
+ # b.link(:id, 'load_fancy_ajax_stuff').click
193
+ # end
194
+ #
195
+ # @param [block] &block the block to execute synchronized.
196
+ def resynchronized(&block)
197
+ old_controller = @webclient.ajaxController
198
+ @webclient.setAjaxController(::HtmlUnit::NicelyResynchronizingAjaxController.new)
199
+ yield self
200
+ @webclient.setAjaxController(old_controller)
201
+ end
202
+
203
+ #--
204
+ # TODO: could be private?
205
+ #++
206
+ #
207
+ # Check that we have a @page object.
208
+ #
209
+ # @raise UnknownObjectException
210
+ # @api internal
211
+ def assert_exists
212
+ raise UnknownObjectException, "no page loaded" unless exist?
213
+ end
214
+
215
+ #--
216
+ # TODO: could be private?
217
+ #++
218
+ # Runs the all the checker procs added by +add_checker+
219
+ #
220
+ # @see add_checker
221
+ # @api internal
222
+ def run_error_checks
223
+ @error_checkers.each { |e| e.call(self) }
224
+ end
225
+
226
+ # Set the current page object for the browser
227
+ #
228
+ # @param [HtmlUnit::HtmlPage] value The page to set.
229
+ # @api internal
230
+ def page=(value)
231
+ @last_url = url() if exist?
232
+ @page = value
233
+
234
+ if @page.respond_to?("getDocumentElement")
235
+ @object = @page.getDocumentElement
236
+ end
237
+
238
+ render if @viewer
239
+ run_error_checks
240
+
241
+ value
242
+ end
243
+
244
+ # Used for #show_links(), #show_divs() etc. (for watir compatibility)
245
+ def method_missing(meth, *args)
246
+ return super unless type = meth.to_s[/^show_(.*)$/, 1]
247
+ puts collection_string(type) rescue super
248
+ end
249
+
250
+ private
251
+
252
+ # Configure the webclient according to the options given to #new.
253
+ # @see initialize
254
+ def configure_webclient
255
+ @webclient.throwExceptionOnScriptError = false unless @opts[:javascript_exceptions]
256
+ @webclient.throwExceptionOnFailingStatusCode = false unless @opts[:status_code_exceptions]
257
+ @webclient.cssEnabled = false unless @opts[:css]
258
+ @webclient.useInsecureSSL = true if @opts[:secure_ssl]
259
+ @webclient.setAjaxController(::HtmlUnit::NicelyResynchronizingAjaxController.new) if @opts[:resynchronize]
260
+ end
261
+
262
+ # Create a string representation of all the elements returned by collection_method
263
+ # @param [Symbol] collection_method
264
+ # @return [String]
265
+ def collection_string(collection_method)
266
+ collection = self.send collection_method
267
+ result = "Found #{collection.size} #{collection_method.downcase}\n"
268
+
269
+ collection.each_with_index do |element, index|
270
+ result << "#{index+1}: #{element.attribute_string}\n"
271
+ end
272
+
273
+ result
274
+ end
275
+
276
+ # Render the current page on the viewer.
277
+ # @api internal
278
+ def render
279
+ @viewer.render_html(html, url)
280
+ rescue DRb::DRbConnError, Errno::ECONNREFUSED => e
281
+ @viewer = nil
282
+ end
283
+
284
+ # Check if we have a viewer available on druby://127.0.0.1:6429
285
+ # @api internal
286
+ def find_viewer
287
+ # FIXME: not ideal
288
+ require 'drb'
289
+ viewer = DRbObject.new_with_uri("druby://127.0.0.1:6429")
290
+ @viewer = viewer if viewer.respond_to?(:render_html)
291
+ rescue DRb::DRbConnError, Errno::ECONNREFUSED
292
+ @viewer = nil
293
+ end
294
+
295
+ end # Browser
296
+ end # Celerity