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
@@ -1,10 +1,9 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper.rb'
2
2
 
3
- describe Buttons do
3
+ describe "Buttons" do
4
4
 
5
5
  before :all do
6
- @browser = IE.new
7
- add_spec_checker(@browser)
6
+ @browser = Browser.new
8
7
  end
9
8
 
10
9
  before :each do
@@ -1,10 +1,9 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper.rb'
2
2
 
3
- describe CheckBox do
3
+ describe "CheckBox" do
4
4
 
5
5
  before :all do
6
- @browser = IE.new
7
- add_spec_checker(@browser)
6
+ @browser = Browser.new
8
7
  end
9
8
 
10
9
  before :each do
@@ -30,14 +29,16 @@ describe CheckBox do
30
29
  @browser.checkbox(:index, 1).should exist
31
30
  @browser.checkbox(:xpath, "//input[@id='new_user_interests_books']").should exist
32
31
  end
32
+
33
33
  it "should return true if the element exists (default how = :name)" do
34
34
  @browser.checkbox("new_user_interests").should exist
35
35
  end
36
+
36
37
  it "should return true if the checkbox button exists (search by name and value)" do
37
38
  @browser.checkbox(:name, "new_user_interests", 'cars').should exist
38
39
  @browser.checkbox(:xpath, "//input[@name='new_user_interests' and @value='cars']").set
39
40
  end
40
-
41
+
41
42
  it "should return false if the checkbox button does not exist" do
42
43
  @browser.checkbox(:id, "no_such_id").should_not exist
43
44
  @browser.checkbox(:id, /no_such_id/).should_not exist
@@ -52,19 +53,19 @@ describe CheckBox do
52
53
  @browser.checkbox(:index, 1337).should_not exist
53
54
  @browser.checkbox(:xpath, "//input[@id='no_such_id']").should_not exist
54
55
  end
55
-
56
+
56
57
  it "should return false if the checkbox button does not exist (search by name and value)" do
57
58
  @browser.checkbox(:name, "new_user_interests", 'no_such_value').should_not exist
58
59
  @browser.checkbox(:xpath, "//input[@name='new_user_interests' and @value='no_such_value']").should_not exist
59
60
  @browser.checkbox(:name, "no_such_name", 'cars').should_not exist
60
61
  @browser.checkbox(:xpath, "//input[@name='no_such_name' and @value='cars']").should_not exist
61
62
  end
62
-
63
+
63
64
  it "should return true for checkboxs with a string value" do
64
65
  @browser.checkbox(:name, 'new_user_interests', 'books').should exist
65
66
  @browser.checkbox(:name, 'new_user_interests', 'cars').should exist
66
67
  end
67
-
68
+
68
69
  it "should raise ArgumentError when 'what' argument is invalid" do
69
70
  lambda { @browser.checkbox(:id, 3.14).exists? }.should raise_error(ArgumentError)
70
71
  end
@@ -81,9 +82,11 @@ describe CheckBox do
81
82
  it "should return the class name if the checkbox exists and has an attribute" do
82
83
  @browser.checkbox(:id, "new_user_interests_dancing").class_name.should == "fun"
83
84
  end
85
+
84
86
  it "should return an emptry string if the checkbox exists and the attribute doesn't" do
85
87
  @browser.checkbox(:id, "new_user_interests_books").class_name.should == ""
86
88
  end
89
+
87
90
  it "should raise UnknownObjectException if the checkbox doesn't exist" do
88
91
  lambda { @browser.checkbox(:id, "no_such_id").class_name }.should raise_error(UnknownObjectException)
89
92
  end
@@ -93,9 +96,11 @@ describe CheckBox do
93
96
  it "should return the id attribute if the checkbox exists and has an attribute" do
94
97
  @browser.checkbox(:index, 1).id.should == "new_user_interests_books"
95
98
  end
99
+
96
100
  it "should return an emptry string if the checkbox exists and the attribute doesn't" do
97
101
  @browser.checkbox(:index, 2).id.should == ""
98
102
  end
103
+
99
104
  it "should raise UnknownObjectException if the checkbox doesn't exist" do
100
105
  lambda { @browser.checkbox(:index, 1337).id }.should raise_error(UnknownObjectException)
101
106
  end
@@ -105,9 +110,11 @@ describe CheckBox do
105
110
  it "should return the name attribute if the checkbox exists" do
106
111
  @browser.checkbox(:id, 'new_user_interests_books').name.should == "new_user_interests"
107
112
  end
113
+
108
114
  it "should return an empty string if the checkbox exists and the attribute doesn't" do
109
115
  @browser.checkbox(:id, 'new_user_interests_food').name.should == ""
110
116
  end
117
+
111
118
  it "should raise UnknownObjectException if the checkbox doesn't exist" do
112
119
  lambda { @browser.checkbox(:index, 1337).name }.should raise_error(UnknownObjectException)
113
120
  end
@@ -117,9 +124,11 @@ describe CheckBox do
117
124
  it "should return the title attribute if the checkbox exists" do
118
125
  @browser.checkbox(:id, "new_user_interests_dancing").title.should == "Dancing is fun!"
119
126
  end
127
+
120
128
  it "should return an emptry string if the checkbox exists and the attribute doesn't" do
121
129
  @browser.checkbox(:id, "new_user_interests_books").title.should == ""
122
130
  end
131
+
123
132
  it "should raise UnknownObjectException if the checkbox doesn't exist" do
124
133
  lambda { @browser.checkbox(:index, 1337).title }.should raise_error(UnknownObjectException)
125
134
  end
@@ -129,6 +138,7 @@ describe CheckBox do
129
138
  it "should return the type attribute if the checkbox exists" do
130
139
  @browser.checkbox(:index, 1).type.should == "checkbox"
131
140
  end
141
+
132
142
  it "should raise UnknownObjectException if the checkbox doesn't exist" do
133
143
  lambda { @browser.checkbox(:index, 1337).type }.should raise_error(UnknownObjectException)
134
144
  end
@@ -138,11 +148,22 @@ describe CheckBox do
138
148
  it "should return the value attribute if the checkbox exists" do
139
149
  @browser.checkbox(:id, 'new_user_interests_books').value.should == 'books'
140
150
  end
151
+
141
152
  it "should raise UnknownObjectException if the checkbox doesn't exist" do
142
153
  lambda { @browser.checkbox(:index, 1337).value}.should raise_error(UnknownObjectException)
143
154
  end
144
155
  end
145
156
 
157
+ describe "#respond_to?" do
158
+ it "should return true for all attribute methods" do
159
+ @browser.checkbox(:index, 1).should respond_to(:class_name)
160
+ @browser.checkbox(:index, 1).should respond_to(:id)
161
+ @browser.checkbox(:index, 1).should respond_to(:name)
162
+ @browser.checkbox(:index, 1).should respond_to(:title)
163
+ @browser.checkbox(:index, 1).should respond_to(:type)
164
+ @browser.checkbox(:index, 1).should respond_to(:value)
165
+ end
166
+ end
146
167
 
147
168
  # Access methods
148
169
 
@@ -151,10 +172,12 @@ describe CheckBox do
151
172
  @browser.checkbox(:id, "new_user_interests_books").should be_enabled
152
173
  @browser.checkbox(:xpath, "//input[@id='new_user_interests_books']").should be_enabled
153
174
  end
175
+
154
176
  it "should return false if the checkbox button is disabled" do
155
177
  @browser.checkbox(:id, "new_user_interests_dentistry").should_not be_enabled
156
178
  @browser.checkbox(:xpath,"//input[@id='new_user_interests_dentistry']").should_not be_enabled
157
179
  end
180
+
158
181
  it "should raise UnknownObjectException if the checkbox button doesn't exist" do
159
182
  lambda { @browser.checkbox(:id, "no_such_id").enabled? }.should raise_error(UnknownObjectException)
160
183
  lambda { @browser.checkbox(:xpath, "//input[@id='no_such_id']").enabled? }.should raise_error(UnknownObjectException)
@@ -165,9 +188,11 @@ describe CheckBox do
165
188
  it "should return true if the checkbox is disabled" do
166
189
  @browser.checkbox(:id, 'new_user_interests_dentistry').should be_disabled
167
190
  end
191
+
168
192
  it "should return false if the checkbox is enabled" do
169
193
  @browser.checkbox(:id, 'new_user_interests_books').should_not be_disabled
170
194
  end
195
+
171
196
  it "should raise UnknownObjectException if the checkbox doesn't exist" do
172
197
  lambda { @browser.checkbox(:index, 1337).disabled? }.should raise_error(UnknownObjectException)
173
198
  end
@@ -182,14 +207,17 @@ describe CheckBox do
182
207
  lambda { @browser.checkbox(:id, "new_user_interests_dentistry").clear }.should raise_error(ObjectDisabledException)
183
208
  lambda { @browser.checkbox(:xpath, "//input[@id='new_user_interests_dentistry']").clear }.should raise_error(ObjectDisabledException)
184
209
  end
210
+
185
211
  it "should clear the checkbox button if it is set" do
186
212
  @browser.checkbox(:id, "new_user_interests_books").clear
187
213
  @browser.checkbox(:id, "new_user_interests_books").should_not be_set
188
214
  end
215
+
189
216
  it "should clear the checkbox button when found by :xpath" do
190
217
  @browser.checkbox(:xpath, "//input[@id='new_user_interests_books']").clear
191
218
  @browser.checkbox(:xpath, "//input[@id='new_user_interests_books']").should_not be_set
192
219
  end
220
+
193
221
  it "should raise UnknownObjectException if the checkbox button doesn't exist" do
194
222
  lambda { @browser.checkbox(:name, "no_such_id").clear }.should raise_error(UnknownObjectException)
195
223
  lambda { @browser.checkbox(:xpath, "//input[@id='no_such_id']").clear }.should raise_error(UnknownObjectException)
@@ -201,6 +229,7 @@ describe CheckBox do
201
229
  @browser.checkbox(:id, "new_user_interests_cars").set
202
230
  @browser.checkbox(:id, "new_user_interests_cars").should be_set
203
231
  end
232
+
204
233
  it "should set the checkbox button when found by :xpath" do
205
234
  @browser.checkbox(:xpath, "//input[@id='new_user_interests_cars']").set
206
235
  @browser.checkbox(:xpath, "//input[@id='new_user_interests_cars']").should be_set
@@ -213,11 +242,12 @@ describe CheckBox do
213
242
  @browser.checkbox(:id, "toggle_button_checkbox").clear
214
243
  @browser.button(:id, "disabled_button").should be_disabled
215
244
  end
216
-
245
+
217
246
  it "should raise UnknownObjectException if the checkbox button doesn't exist" do
218
247
  lambda { @browser.checkbox(:name, "no_such_name").set }.should raise_error(UnknownObjectException)
219
248
  lambda { @browser.checkbox(:xpath, "//input[@name='no_such_name']").set }.should raise_error(UnknownObjectException)
220
249
  end
250
+
221
251
  it "should raise ObjectDisabledException if the checkbox is disabled" do
222
252
  lambda { @browser.checkbox(:id, "new_user_interests_dentistry").set }.should raise_error(ObjectDisabledException)
223
253
  lambda { @browser.checkbox(:xpath, "//input[@id='new_user_interests_dentistry']").set }.should raise_error(ObjectDisabledException )
@@ -231,9 +261,11 @@ describe CheckBox do
231
261
  it "should return true if the checkbox button is set" do
232
262
  @browser.checkbox(:id, "new_user_interests_books").should be_set
233
263
  end
264
+
234
265
  it "should return false if the checkbox button unset" do
235
266
  @browser.checkbox(:id, "new_user_interests_cars").should_not be_set
236
267
  end
268
+
237
269
  it "should return the state for checkboxs with string values" do
238
270
  @browser.checkbox(:name, "new_user_interests", 'cars').should_not be_set
239
271
  @browser.checkbox(:name, "new_user_interests", 'cars').set
@@ -241,6 +273,7 @@ describe CheckBox do
241
273
  @browser.checkbox(:name, "new_user_interests", 'cars').clear
242
274
  @browser.checkbox(:name, "new_user_interests", 'cars').should_not be_set
243
275
  end
276
+
244
277
  it "should raise UnknownObjectException if the checkbox button doesn't exist" do
245
278
  lambda { @browser.checkbox(:id, "no_such_id").set? }.should raise_error(UnknownObjectException)
246
279
  lambda { @browser.checkbox(:xpath, "//input[@id='no_such_id']").set? }.should raise_error(UnknownObjectException)
@@ -251,9 +284,11 @@ describe CheckBox do
251
284
  it "should return true if the checkbox is set" do
252
285
  @browser.checkbox(:id, "new_user_interests_books").get_state.should be_true
253
286
  end
287
+
254
288
  it "should return false if the checkbox is unset" do
255
289
  @browser.checkbox(:id, "new_user_interests_cars").get_state.should be_false
256
290
  end
291
+
257
292
  it "should raise UnknownObjectException if the checkbox doesn't exist" do
258
293
  lambda { @browser.checkbox(:name, "no_such_name").get_state }.should raise_error(UnknownObjectException)
259
294
  lambda { @browser.checkbox(:xpath, "//input[@name='no_such_name']").get_state }.should raise_error(UnknownObjectException)
@@ -1,9 +1,8 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper.rb'
2
2
 
3
- describe CheckBoxes do
3
+ describe "CheckBoxes" do
4
4
  before :all do
5
- @browser = IE.new
6
- add_spec_checker(@browser)
5
+ @browser = Browser.new
7
6
  end
8
7
 
9
8
  before :each do
@@ -1,10 +1,9 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper.rb'
2
2
 
3
- describe Div do
3
+ describe "Div" do
4
4
 
5
5
  before :all do
6
- @browser = IE.new
7
- add_spec_checker(@browser)
6
+ @browser = Browser.new
8
7
  end
9
8
 
10
9
  before :each do
@@ -26,9 +25,11 @@ describe Div do
26
25
  @browser.div(:index, 1).should exist
27
26
  @browser.div(:xpath, "//div[@id='header']").should exist
28
27
  end
28
+
29
29
  it "should return true if the element exists (default how = :id)" do
30
30
  @browser.div("header").should exist
31
31
  end
32
+
32
33
  it "should return false if the element does not exist" do
33
34
  @browser.div(:id, "no_such_id").should_not exist
34
35
  @browser.div(:id, /no_such_id/).should_not exist
@@ -40,10 +41,12 @@ describe Div do
40
41
  @browser.div(:class, /no_such_class/).should_not exist
41
42
  @browser.div(:index, 1337).should_not exist
42
43
  @browser.div(:xpath, "//div[@id='no_such_id']").should_not exist
43
- end
44
+ end
45
+
44
46
  it "should raise ArgumentError when 'what' argument is invalid" do
45
47
  lambda { @browser.div(:id, 3.14).exists? }.should raise_error(ArgumentError)
46
48
  end
49
+
47
50
  it "should raise MissingWayOfFindingObjectException when 'how' argument is invalid" do
48
51
  lambda { @browser.div(:no_such_how, 'some_value').exists? }.should raise_error(MissingWayOfFindingObjectException)
49
52
  end
@@ -54,9 +57,11 @@ describe Div do
54
57
  it "should return the class attribute if the element exists" do
55
58
  @browser.div(:id , "footer").class_name.should == "profile"
56
59
  end
60
+
57
61
  it "should return an empty string if the element exists but the attribute doesn't" do
58
62
  @browser.div(:id , "content").class_name.should == ""
59
63
  end
64
+
60
65
  it "should raise UnknownObjectException if the element does not exist" do
61
66
  lambda { @browser.div(:id, "no_such_id").class_name }.should raise_error(UnknownObjectException)
62
67
  lambda { @browser.div(:title, "no_such_title").class_name }.should raise_error(UnknownObjectException)
@@ -69,9 +74,11 @@ describe Div do
69
74
  it "should return the id attribute if the element exists" do
70
75
  @browser.div(:index, 2).id.should == "outer_container"
71
76
  end
77
+
72
78
  it "should return an empty string if the element exists, but the attribute doesn't" do
73
79
  @browser.div(:index, 1).id.should == ""
74
80
  end
81
+
75
82
  it "should raise UnknownObjectException if the element does not exist" do
76
83
  lambda {@browser.div(:id, "no_such_id").id }.should raise_error(UnknownObjectException)
77
84
  lambda {@browser.div(:title, "no_such_id").id }.should raise_error(UnknownObjectException)
@@ -83,9 +90,11 @@ describe Div do
83
90
  it "should return the name attribute if the element exists" do
84
91
  @browser.div(:id, 'promo').name.should == "invalid_attribute"
85
92
  end
93
+
86
94
  it "should return an empty string if the element exists but the attribute doesn't" do
87
95
  @browser.div(:index, 1).name.should == ""
88
96
  end
97
+
89
98
  it "should raise UnknownObjectException if the element does not exist" do
90
99
  lambda {@browser.div(:id, "no_such_id").name }.should raise_error(UnknownObjectException)
91
100
  lambda {@browser.div(:title, "no_such_title").name }.should raise_error(UnknownObjectException)
@@ -97,9 +106,11 @@ describe Div do
97
106
  it "should return the style attribute if the element exists" do
98
107
  @browser.div(:id, 'best_language').style.should == "color: red; text-decoration: underline; cursor: pointer;"
99
108
  end
109
+
100
110
  it "should return an empty string if the element exists but the attribute doesn't" do
101
111
  @browser.div(:id, 'promo').style.should == ""
102
112
  end
113
+
103
114
  it "should raise UnknownObjectException if the element does not exist" do
104
115
  lambda {@browser.div(:id, "no_such_id").style }.should raise_error(UnknownObjectException)
105
116
  end
@@ -111,9 +122,11 @@ describe Div do
111
122
  @browser.div(:title, "Closing remarks").text.strip.should == "This is a footer."
112
123
  @browser.div(:xpath, "//div[@id='footer']").text.strip.should == "This is a footer."
113
124
  end
125
+
114
126
  it "should return an empty string if the element exists but contains no text" do
115
127
  @browser.div(:index, 1).text.strip.should == ""
116
128
  end
129
+
117
130
  it "should raise UnknownObjectException if the element does not exist" do
118
131
  lambda { @browser.div(:id, "no_such_id").text }.should raise_error(UnknownObjectException)
119
132
  lambda { @browser.div(:title, "no_such_title").text }.should raise_error(UnknownObjectException)
@@ -126,9 +139,11 @@ describe Div do
126
139
  it "should return the value attribute if the element exists" do
127
140
  @browser.div(:id, 'promo').value.should == "invalid_attribute"
128
141
  end
142
+
129
143
  it "should return an empty string if the element exists but the attribute doesn't" do
130
144
  @browser.div(:index, 1).value.should == ""
131
145
  end
146
+
132
147
  it "should raise UnknownObjectException if the element does not exist" do
133
148
  lambda {@browser.div(:id, "no_such_id").value }.should raise_error(UnknownObjectException)
134
149
  lambda {@browser.div(:title, "no_such_title").value }.should raise_error(UnknownObjectException)
@@ -136,6 +151,17 @@ describe Div do
136
151
  end
137
152
  end
138
153
 
154
+ describe "#respond_to?" do
155
+ it "should return true for all attribute methods" do
156
+ @browser.div(:index, 1).should respond_to(:class_name)
157
+ @browser.div(:index, 1).should respond_to(:id)
158
+ @browser.div(:index, 1).should respond_to(:name)
159
+ @browser.div(:index, 1).should respond_to(:style)
160
+ @browser.div(:index, 1).should respond_to(:text)
161
+ @browser.div(:index, 1).should respond_to(:value)
162
+ end
163
+ end
164
+
139
165
  # Manipulation methods
140
166
  describe "#click" do
141
167
  it "should fire events when clicked" do
@@ -143,6 +169,7 @@ describe Div do
143
169
  @browser.div(:id, 'best_language').click
144
170
  @browser.div(:id, 'best_language').text.should == 'Ruby!'
145
171
  end
172
+
146
173
  it "should raise UnknownObjectException if the element does not exist" do
147
174
  lambda { @browser.div(:id, "no_such_id").click }.should raise_error(UnknownObjectException)
148
175
  lambda { @browser.div(:title, "no_such_title").click }.should raise_error(UnknownObjectException)
@@ -1,9 +1,8 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper.rb'
2
2
 
3
- describe Divs do
3
+ describe "Divs" do
4
4
  before :all do
5
- @browser = IE.new
6
- add_spec_checker(@browser)
5
+ @browser = Browser.new
7
6
  end
8
7
 
9
8
  before :each do
@@ -1,38 +1,61 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper.rb'
2
2
 
3
- describe Element do
3
+ describe "Element" do
4
4
 
5
5
  before :all do
6
- @browser = IE.new
7
- add_spec_checker(@browser)
6
+ @browser = Browser.new
8
7
  end
9
8
 
10
9
  before :each do
11
10
  @browser.goto(TEST_HOST + "/forms_with_input_elements.html")
12
11
  end
13
12
 
14
- describe "#new" do
13
+ describe "::new" do
15
14
  it "should find elements matching the conditions when given a hash of :how => 'what' arguments" do
16
15
  @browser.checkbox(:name => 'new_user_interests', :title => 'Dancing is fun!').value.should == 'dancing'
17
16
  @browser.text_field(:class_name => 'name', :index => 2).id.should == 'new_user_last_name'
18
17
  end
19
- it "should raise UnknownObjectException with a sane error message when given a hash of :how => 'what' arguments" do
18
+
19
+ it "should raise UnknownObjectException with a sane error message when given a hash of :how => 'what' arguments (non-existing object)" do
20
20
  conditions = {:index => 100, :name => "foo"}
21
21
  lambda { @browser.text_field(conditions).id }.should raise_error(UnknownObjectException, /Unable to locate object, using (\{:name=>"foo", :index=>100\}|\{:index=>100, :name=>"foo"\})/)
22
22
  end
23
+
24
+ it "should raise ArgumentError if given the wrong number of arguments" do
25
+ container = mock("container", :null_object => true)
26
+ lambda { Element.new(container, 1,2,3,4) }.should raise_error(ArgumentError, "wrong number of arguments (4 for 2)")
27
+ lambda { Element.new(container, "foo") }.should raise_error(ArgumentError, "wrong number of arguments (1 for 2)")
28
+ end
29
+
30
+ end
31
+
32
+ describe "#focus" do
33
+ it "should fire the onfocus event for the given element" do
34
+ tf = @browser.text_field(:id, "new_user_occupation")
35
+ tf.value.should == "Developer"
36
+ tf.focus
37
+ @browser.div(:id, "onfocus_test").text.should == "changed by onfocus event"
38
+ end
39
+ end
40
+
41
+ describe "#parent" do
42
+ it "should get the parent of this element" do
43
+ @browser.text_field(:id, "new_user_email").parent.should be_instance_of(Form)
44
+ end
23
45
  end
24
46
 
25
47
  describe "#method_missing" do
26
48
  it "should magically return the requested attribute if the attribute is defined in the attribute list" do
27
49
  @browser.form(:index, 1).action.should == 'post_to_me'
28
50
  end
51
+
29
52
  it "should raise NoMethodError if the requested method isn't among the attributes" do
30
53
  lambda { @browser.button(:index, 1).no_such_attribute_or_method }.should raise_error(NoMethodError)
31
54
  end
32
55
  end
33
56
 
34
57
  describe "#html" do
35
- it "should return the normative (actual) html for the image element" do
58
+ it "should return the descriptive (actual) html for the image element" do
36
59
  @browser.goto(TEST_HOST + "/images.html")
37
60
  @browser.image(:id, 'non_self_closing').html.chomp.should == '<img src="images/1.gif" alt="1" id="non_self_closing"></img>'
38
61
  @browser.goto(TEST_HOST + "/non_control_elements.html")
@@ -43,6 +66,13 @@ describe Element do
43
66
  end
44
67
  end
45
68
 
69
+ describe "#text" do
70
+ it "should return a text representation including newlines" do
71
+ @browser.goto(TEST_HOST + "/forms_with_input_elements.html")
72
+ @browser.form(:id, "delete_user").text.should == "Username Username 1 Username 2 Username 3 \nComment Default comment."
73
+ end
74
+ end
75
+
46
76
  after :all do
47
77
  @browser.close
48
78
  end