capybara_minitest_spec 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gemtest +0 -0
- data/.gitignore +4 -0
- data/.gitmodules +3 -0
- data/.rvmrc +1 -0
- data/Gemfile +7 -0
- data/README.md +31 -0
- data/Rakefile +9 -0
- data/capybara_minitest_spec.gemspec +25 -0
- data/lib/capybara_minitest_spec/version.rb +3 -0
- data/lib/capybara_minitest_spec.rb +45 -0
- data/test/matchers_spec.rb +447 -0
- data/test/spec_helper.rb +28 -0
- data/test_app/driver.rb +297 -0
- data/test_app/fixtures/capybara.jpg +3 -0
- data/test_app/fixtures/test_file.txt +1 -0
- data/test_app/public/test.js +43 -0
- data/test_app/session/all_spec.rb +78 -0
- data/test_app/session/attach_file_spec.rb +73 -0
- data/test_app/session/check_spec.rb +65 -0
- data/test_app/session/choose_spec.rb +26 -0
- data/test_app/session/click_button_spec.rb +304 -0
- data/test_app/session/click_link_or_button_spec.rb +36 -0
- data/test_app/session/click_link_spec.rb +119 -0
- data/test_app/session/current_host_spec.rb +68 -0
- data/test_app/session/current_url_spec.rb +15 -0
- data/test_app/session/fill_in_spec.rb +125 -0
- data/test_app/session/find_button_spec.rb +18 -0
- data/test_app/session/find_by_id_spec.rb +18 -0
- data/test_app/session/find_field_spec.rb +26 -0
- data/test_app/session/find_link_spec.rb +19 -0
- data/test_app/session/find_spec.rb +149 -0
- data/test_app/session/first_spec.rb +105 -0
- data/test_app/session/has_button_spec.rb +32 -0
- data/test_app/session/has_content_spec.rb +106 -0
- data/test_app/session/has_css_spec.rb +243 -0
- data/test_app/session/has_field_spec.rb +192 -0
- data/test_app/session/has_link_spec.rb +37 -0
- data/test_app/session/has_select_spec.rb +129 -0
- data/test_app/session/has_selector_spec.rb +129 -0
- data/test_app/session/has_table_spec.rb +96 -0
- data/test_app/session/has_xpath_spec.rb +123 -0
- data/test_app/session/headers.rb +19 -0
- data/test_app/session/javascript.rb +289 -0
- data/test_app/session/response_code.rb +19 -0
- data/test_app/session/select_spec.rb +113 -0
- data/test_app/session/text_spec.rb +19 -0
- data/test_app/session/uncheck_spec.rb +21 -0
- data/test_app/session/unselect_spec.rb +61 -0
- data/test_app/session/within_spec.rb +178 -0
- data/test_app/session.rb +154 -0
- data/test_app/test_app.rb +142 -0
- data/test_app/views/buttons.erb +4 -0
- data/test_app/views/fieldsets.erb +29 -0
- data/test_app/views/form.erb +365 -0
- data/test_app/views/frame_one.erb +8 -0
- data/test_app/views/frame_two.erb +8 -0
- data/test_app/views/header_links.erb +7 -0
- data/test_app/views/host_links.erb +12 -0
- data/test_app/views/popup_one.erb +8 -0
- data/test_app/views/popup_two.erb +8 -0
- data/test_app/views/postback.erb +13 -0
- data/test_app/views/tables.erb +122 -0
- data/test_app/views/with_html.erb +74 -0
- data/test_app/views/with_html_entities.erb +1 -0
- data/test_app/views/with_js.erb +48 -0
- data/test_app/views/with_scope.erb +36 -0
- data/test_app/views/with_simple_html.erb +1 -0
- data/test_app/views/within_frames.erb +10 -0
- data/test_app/views/within_popups.erb +25 -0
- metadata +158 -0
@@ -0,0 +1,304 @@
|
|
1
|
+
shared_examples_for "click_button" do
|
2
|
+
describe '#click_button' do
|
3
|
+
before do
|
4
|
+
@session.visit('/form')
|
5
|
+
end
|
6
|
+
|
7
|
+
context "with multiple values with the same name" do
|
8
|
+
it "should use the latest given value" do
|
9
|
+
@session.check('Terms of Use')
|
10
|
+
@session.click_button('awesome')
|
11
|
+
extract_results(@session)['terms_of_use'].should == '1'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "with a form that has a relative url as an action" do
|
16
|
+
it "should post to the correct url" do
|
17
|
+
@session.click_button('Relative Action')
|
18
|
+
@session.current_path.should == '/relative'
|
19
|
+
extract_results(@session)['relative'].should == 'Relative Action'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "with a form that has no action specified" do
|
24
|
+
it "should post to the correct url" do
|
25
|
+
@session.click_button('No Action')
|
26
|
+
@session.current_path.should == '/form'
|
27
|
+
extract_results(@session)['no_action'].should == 'No Action'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context "with value given on a submit button" do
|
32
|
+
context "on a form with HTML5 fields" do
|
33
|
+
before do
|
34
|
+
@session.click_button('html5_submit')
|
35
|
+
@results = extract_results(@session)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should serialise and submit search fields" do
|
39
|
+
@results['html5_search'].should == 'what are you looking for'
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should serialise and submit email fields" do
|
43
|
+
@results['html5_email'].should == 'person@email.com'
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should serialise and submit url fields" do
|
47
|
+
@results['html5_url'].should == 'http://www.example.com'
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should serialise and submit tel fields" do
|
51
|
+
@results['html5_tel'].should == '911'
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should serialise and submit color fields" do
|
55
|
+
@results['html5_color'].should == '#FFFFFF'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "on an HTML4 form" do
|
60
|
+
before do
|
61
|
+
@session.click_button('awesome')
|
62
|
+
@results = extract_results(@session)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should serialize and submit text fields" do
|
66
|
+
@results['first_name'].should == 'John'
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should escape fields when submitting" do
|
70
|
+
@results['phone'].should == '+1 555 7021'
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should serialize and submit password fields" do
|
74
|
+
@results['password'].should == 'seeekrit'
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should serialize and submit hidden fields" do
|
78
|
+
@results['token'].should == '12345'
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should not serialize fields from other forms" do
|
82
|
+
@results['middle_name'].should be_nil
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should submit the button that was clicked, but not other buttons" do
|
86
|
+
@results['awesome'].should == 'awesome'
|
87
|
+
@results['crappy'].should be_nil
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should serialize radio buttons" do
|
91
|
+
@results['gender'].should == 'female'
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should serialize check boxes" do
|
95
|
+
@results['pets'].should include('dog', 'hamster')
|
96
|
+
@results['pets'].should_not include('cat')
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should serialize text areas" do
|
100
|
+
@results['description'].should == 'Descriptive text goes here'
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should serialize select tag with values" do
|
104
|
+
@results['locale'].should == 'en'
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should serialize select tag without values" do
|
108
|
+
@results['region'].should == 'Norway'
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should serialize first option for select tag with no selection" do
|
112
|
+
@results['city'].should == 'London'
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should not serialize a select tag without options" do
|
116
|
+
@results['tendency'].should be_nil
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should not submit disabled fields" do
|
120
|
+
@results['disabled_text_field'].should be_nil
|
121
|
+
@results['disabled_textarea'].should be_nil
|
122
|
+
@results['disabled_checkbox'].should be_nil
|
123
|
+
@results['disabled_radio'].should be_nil
|
124
|
+
@results['disabled_select'].should be_nil
|
125
|
+
@results['disabled_file'].should be_nil
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
context "with id given on a submit button" do
|
131
|
+
it "should submit the associated form" do
|
132
|
+
@session.click_button('awe123')
|
133
|
+
extract_results(@session)['first_name'].should == 'John'
|
134
|
+
end
|
135
|
+
|
136
|
+
it "should work with partial matches" do
|
137
|
+
@session.click_button('Go')
|
138
|
+
@session.body.should include('You landed')
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
context "with title given on a submit button" do
|
143
|
+
it "should submit the associated form" do
|
144
|
+
@session.click_button('What an Awesome Button')
|
145
|
+
extract_results(@session)['first_name'].should == 'John'
|
146
|
+
end
|
147
|
+
|
148
|
+
it "should work with partial matches" do
|
149
|
+
@session.click_button('What an Awesome')
|
150
|
+
extract_results(@session)['first_name'].should == 'John'
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
context "with alt given on an image button" do
|
155
|
+
it "should submit the associated form" do
|
156
|
+
@session.click_button('oh hai thar')
|
157
|
+
extract_results(@session)['first_name'].should == 'John'
|
158
|
+
end
|
159
|
+
|
160
|
+
it "should work with partial matches" do
|
161
|
+
@session.click_button('hai')
|
162
|
+
extract_results(@session)['first_name'].should == 'John'
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
context "with value given on an image button" do
|
167
|
+
it "should submit the associated form" do
|
168
|
+
@session.click_button('okay')
|
169
|
+
extract_results(@session)['first_name'].should == 'John'
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should work with partial matches" do
|
173
|
+
@session.click_button('kay')
|
174
|
+
extract_results(@session)['first_name'].should == 'John'
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
context "with id given on an image button" do
|
179
|
+
it "should submit the associated form" do
|
180
|
+
@session.click_button('okay556')
|
181
|
+
extract_results(@session)['first_name'].should == 'John'
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
context "with title given on an image button" do
|
186
|
+
it "should submit the associated form" do
|
187
|
+
@session.click_button('Okay 556 Image')
|
188
|
+
extract_results(@session)['first_name'].should == 'John'
|
189
|
+
end
|
190
|
+
|
191
|
+
it "should work with partial matches" do
|
192
|
+
@session.click_button('Okay 556')
|
193
|
+
extract_results(@session)['first_name'].should == 'John'
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
context "with text given on a button defined by <button> tag" do
|
198
|
+
it "should submit the associated form" do
|
199
|
+
@session.click_button('Click me')
|
200
|
+
extract_results(@session)['first_name'].should == 'John'
|
201
|
+
end
|
202
|
+
|
203
|
+
it "should work with partial matches" do
|
204
|
+
@session.click_button('Click')
|
205
|
+
extract_results(@session)['first_name'].should == 'John'
|
206
|
+
end
|
207
|
+
|
208
|
+
it "should prefer exact matches over partial matches" do
|
209
|
+
@session.click_button('Just an input')
|
210
|
+
extract_results(@session)['button'].should == 'button_second'
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
context "with id given on a button defined by <button> tag" do
|
215
|
+
it "should submit the associated form" do
|
216
|
+
@session.click_button('click_me_123')
|
217
|
+
extract_results(@session)['first_name'].should == 'John'
|
218
|
+
end
|
219
|
+
|
220
|
+
it "should serialize and send GET forms" do
|
221
|
+
@session.visit('/form')
|
222
|
+
@session.click_button('med')
|
223
|
+
@results = extract_results(@session)
|
224
|
+
@results['middle_name'].should == 'Darren'
|
225
|
+
@results['foo'].should be_nil
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
context "with value given on a button defined by <button> tag" do
|
230
|
+
it "should submit the associated form" do
|
231
|
+
@session.click_button('click_me')
|
232
|
+
extract_results(@session)['first_name'].should == 'John'
|
233
|
+
end
|
234
|
+
|
235
|
+
it "should work with partial matches" do
|
236
|
+
@session.click_button('ck_me')
|
237
|
+
extract_results(@session)['first_name'].should == 'John'
|
238
|
+
end
|
239
|
+
|
240
|
+
it "should prefer exact matches over partial matches" do
|
241
|
+
@session.click_button('Just a button')
|
242
|
+
extract_results(@session)['button'].should == 'Just a button'
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
context "with title given on a button defined by <button> tag" do
|
247
|
+
it "should submit the associated form" do
|
248
|
+
@session.click_button('Click Title button')
|
249
|
+
extract_results(@session)['first_name'].should == 'John'
|
250
|
+
end
|
251
|
+
|
252
|
+
it "should work with partial matches" do
|
253
|
+
@session.click_button('Click Title')
|
254
|
+
extract_results(@session)['first_name'].should == 'John'
|
255
|
+
end
|
256
|
+
end
|
257
|
+
context "with a locator that doesn't exist" do
|
258
|
+
it "should raise an error" do
|
259
|
+
running do
|
260
|
+
@session.click_button('does not exist')
|
261
|
+
end.should raise_error(Capybara::ElementNotFound)
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
it "should serialize and send valueless buttons that were clicked" do
|
266
|
+
@session.click_button('No Value!')
|
267
|
+
@results = extract_results(@session)
|
268
|
+
@results['no_value'].should_not be_nil
|
269
|
+
end
|
270
|
+
|
271
|
+
it "should not send image buttons that were not clicked" do
|
272
|
+
@session.click_button('Click me!')
|
273
|
+
@results = extract_results(@session)
|
274
|
+
@results['okay'].should be_nil
|
275
|
+
end
|
276
|
+
|
277
|
+
it "should serialize and send GET forms" do
|
278
|
+
@session.visit('/form')
|
279
|
+
@session.click_button('med')
|
280
|
+
@results = extract_results(@session)
|
281
|
+
@results['middle_name'].should == 'Darren'
|
282
|
+
@results['foo'].should be_nil
|
283
|
+
end
|
284
|
+
|
285
|
+
it "should follow redirects" do
|
286
|
+
@session.click_button('Go FAR')
|
287
|
+
@session.current_url.should match(%r{/landed$})
|
288
|
+
@session.body.should include('You landed')
|
289
|
+
end
|
290
|
+
|
291
|
+
it "should post pack to the same URL when no action given" do
|
292
|
+
@session.visit('/postback')
|
293
|
+
@session.click_button('With no action')
|
294
|
+
@session.body.should include('Postback')
|
295
|
+
end
|
296
|
+
|
297
|
+
it "should post pack to the same URL when blank action given" do
|
298
|
+
@session.visit('/postback')
|
299
|
+
@session.click_button('With blank action')
|
300
|
+
@session.body.should include('Postback')
|
301
|
+
end
|
302
|
+
end
|
303
|
+
|
304
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
shared_examples_for "click_link_or_button" do
|
2
|
+
describe '#click' do
|
3
|
+
it "should click on a link" do
|
4
|
+
@session.visit('/with_html')
|
5
|
+
@session.click_link_or_button('labore')
|
6
|
+
@session.body.should include('Bar')
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should click on a button" do
|
10
|
+
@session.visit('/form')
|
11
|
+
@session.click_link_or_button('awe123')
|
12
|
+
extract_results(@session)['first_name'].should == 'John'
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should click on a button with no type attribute" do
|
16
|
+
@session.visit('/form')
|
17
|
+
@session.click_link_or_button('no_type')
|
18
|
+
extract_results(@session)['first_name'].should == 'John'
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should be aliased as click_on" do
|
22
|
+
@session.visit('/form')
|
23
|
+
@session.click_on('awe123')
|
24
|
+
extract_results(@session)['first_name'].should == 'John'
|
25
|
+
end
|
26
|
+
|
27
|
+
context "with a locator that doesn't exist" do
|
28
|
+
it "should raise an error" do
|
29
|
+
@session.visit('/with_html')
|
30
|
+
running do
|
31
|
+
@session.click_link_or_button('does not exist')
|
32
|
+
end.should raise_error(Capybara::ElementNotFound)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
shared_examples_for "click_link" do
|
2
|
+
describe '#click_link' do
|
3
|
+
before do
|
4
|
+
@session.visit('/with_html')
|
5
|
+
end
|
6
|
+
|
7
|
+
context "with id given" do
|
8
|
+
it "should take user to the linked page" do
|
9
|
+
@session.click_link('foo')
|
10
|
+
@session.body.should include('Another World')
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
context "with text given" do
|
15
|
+
it "should take user to the linked page" do
|
16
|
+
@session.click_link('labore')
|
17
|
+
@session.body.should include('Bar')
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should accept partial matches" do
|
21
|
+
@session.click_link('abo')
|
22
|
+
@session.body.should include('Bar')
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should prefer exact matches over partial matches" do
|
26
|
+
@session.click_link('A link')
|
27
|
+
@session.body.should include('Bar')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context "with title given" do
|
32
|
+
it "should take user to the linked page" do
|
33
|
+
@session.click_link('awesome title')
|
34
|
+
@session.body.should include('Bar')
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should accept partial matches" do
|
38
|
+
@session.click_link('some tit')
|
39
|
+
@session.body.should include('Bar')
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should prefer exact matches over partial matches" do
|
43
|
+
@session.click_link('a fine link')
|
44
|
+
@session.body.should include('Bar')
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "with alternative text given to a contained image" do
|
49
|
+
it "should take user to the linked page" do
|
50
|
+
@session.click_link('awesome image')
|
51
|
+
@session.body.should include('Bar')
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should take user to the linked page" do
|
55
|
+
@session.click_link('some imag')
|
56
|
+
@session.body.should include('Bar')
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should prefer exact matches over partial matches" do
|
60
|
+
@session.click_link('fine image')
|
61
|
+
@session.body.should include('Bar')
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context "with a locator that doesn't exist" do
|
66
|
+
it "should raise an error" do
|
67
|
+
running do
|
68
|
+
@session.click_link('does not exist')
|
69
|
+
end.should raise_error(Capybara::ElementNotFound)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should follow relative links" do
|
74
|
+
@session.visit('/')
|
75
|
+
@session.click_link('Relative')
|
76
|
+
@session.body.should include('This is a test')
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should follow redirects" do
|
80
|
+
@session.click_link('Redirect')
|
81
|
+
@session.body.should include('You landed')
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should follow redirects" do
|
85
|
+
@session.click_link('BackToMyself')
|
86
|
+
@session.body.should include('This is a test')
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should add query string to current URL with naked query string" do
|
90
|
+
@session.click_link('Naked Query String')
|
91
|
+
@session.body.should include('Query String sent')
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should do nothing on anchor links" do
|
95
|
+
@session.fill_in("test_field", :with => 'blah')
|
96
|
+
@session.click_link('Anchor')
|
97
|
+
@session.find_field("test_field").value.should == 'blah'
|
98
|
+
@session.click_link('Blank Anchor')
|
99
|
+
@session.find_field("test_field").value.should == 'blah'
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should do nothing on URL+anchor links for the same page" do
|
103
|
+
@session.fill_in("test_field", :with => 'blah')
|
104
|
+
@session.click_link('Anchor on same page')
|
105
|
+
@session.find_field("test_field").value.should == 'blah'
|
106
|
+
end
|
107
|
+
|
108
|
+
it "should follow link on URL+anchor links for a different page" do
|
109
|
+
@session.click_link('Anchor on different page')
|
110
|
+
@session.body.should include('Bar')
|
111
|
+
end
|
112
|
+
|
113
|
+
it "raise an error with links with no href" do
|
114
|
+
running do
|
115
|
+
@session.click_link('No Href')
|
116
|
+
end.should raise_error(Capybara::ElementNotFound)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
shared_examples_for "current_host" do
|
2
|
+
after do
|
3
|
+
Capybara.app_host = nil
|
4
|
+
end
|
5
|
+
|
6
|
+
describe '#current_host' do
|
7
|
+
it "is affected by visiting a page directly" do
|
8
|
+
@session.visit('http://capybara-testapp.heroku.com/host')
|
9
|
+
@session.body.should include('Current host is http://capybara-testapp.heroku.com')
|
10
|
+
@session.current_host.should == 'http://capybara-testapp.heroku.com'
|
11
|
+
end
|
12
|
+
|
13
|
+
it "returns to the app host when visiting a relative url" do
|
14
|
+
Capybara.app_host = "http://capybara1.elabs.se"
|
15
|
+
@session.visit('http://capybara-testapp.heroku.com/host')
|
16
|
+
@session.body.should include('Current host is http://capybara-testapp.heroku.com')
|
17
|
+
@session.current_host.should == 'http://capybara-testapp.heroku.com'
|
18
|
+
@session.visit('/host')
|
19
|
+
@session.body.should include('Current host is http://capybara1.elabs.se')
|
20
|
+
@session.current_host.should == 'http://capybara1.elabs.se'
|
21
|
+
end
|
22
|
+
|
23
|
+
it "is affected by setting Capybara.app_host" do
|
24
|
+
Capybara.app_host = "http://capybara-testapp.heroku.com"
|
25
|
+
@session.visit('/host')
|
26
|
+
@session.body.should include('Current host is http://capybara-testapp.heroku.com')
|
27
|
+
@session.current_host.should == 'http://capybara-testapp.heroku.com'
|
28
|
+
Capybara.app_host = "http://capybara1.elabs.se"
|
29
|
+
@session.visit('/host')
|
30
|
+
@session.body.should include('Current host is http://capybara1.elabs.se')
|
31
|
+
@session.current_host.should == 'http://capybara1.elabs.se'
|
32
|
+
end
|
33
|
+
|
34
|
+
it "is unaffected by following a relative link" do
|
35
|
+
@session.visit('http://capybara-testapp.heroku.com/host_links')
|
36
|
+
@session.click_link('Relative Host')
|
37
|
+
@session.body.should include('Current host is http://capybara-testapp.heroku.com')
|
38
|
+
@session.current_host.should == 'http://capybara-testapp.heroku.com'
|
39
|
+
end
|
40
|
+
|
41
|
+
it "is affected by following an absolute link" do
|
42
|
+
@session.visit('http://capybara-testapp.heroku.com/host_links')
|
43
|
+
@session.click_link('Absolute Host')
|
44
|
+
@session.body.should include('Current host is http://capybara2.elabs.se')
|
45
|
+
@session.current_host.should == 'http://capybara2.elabs.se'
|
46
|
+
end
|
47
|
+
|
48
|
+
it "is unaffected by posting through a relative form" do
|
49
|
+
@session.visit('http://capybara-testapp.heroku.com/host_links')
|
50
|
+
@session.click_button('Relative Host')
|
51
|
+
@session.body.should include('Current host is http://capybara-testapp.heroku.com')
|
52
|
+
@session.current_host.should == 'http://capybara-testapp.heroku.com'
|
53
|
+
end
|
54
|
+
|
55
|
+
it "is affected by posting through an absolute form" do
|
56
|
+
@session.visit('http://capybara-testapp.heroku.com/host_links')
|
57
|
+
@session.click_button('Absolute Host')
|
58
|
+
@session.body.should include('Current host is http://capybara2.elabs.se')
|
59
|
+
@session.current_host.should == 'http://capybara2.elabs.se'
|
60
|
+
end
|
61
|
+
|
62
|
+
it "is affected by following a redirect" do
|
63
|
+
@session.visit('http://capybara-testapp.heroku.com/redirect_secure')
|
64
|
+
@session.body.should include('Current host is https://capybara-testapp.heroku.com')
|
65
|
+
@session.current_host.should == 'https://capybara-testapp.heroku.com'
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
shared_examples_for "current_url" do
|
2
|
+
describe '#current_url' do
|
3
|
+
it "should return the current url" do
|
4
|
+
@session.visit('/form')
|
5
|
+
@session.current_url.should =~ %r(http://[^/]+/form)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '#current_path' do
|
10
|
+
it 'should show the correct location' do
|
11
|
+
@session.visit('/foo')
|
12
|
+
@session.current_path.should == '/foo'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
shared_examples_for "fill_in" do
|
2
|
+
describe "#fill_in" do
|
3
|
+
before do
|
4
|
+
@session.visit('/form')
|
5
|
+
end
|
6
|
+
|
7
|
+
it "should fill in a text field by id" do
|
8
|
+
@session.fill_in('form_first_name', :with => 'Harry')
|
9
|
+
@session.click_button('awesome')
|
10
|
+
extract_results(@session)['first_name'].should == 'Harry'
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should fill in a text field by name" do
|
14
|
+
@session.fill_in('form[last_name]', :with => 'Green')
|
15
|
+
@session.click_button('awesome')
|
16
|
+
extract_results(@session)['last_name'].should == 'Green'
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should fill in a text field by label without for" do
|
20
|
+
@session.fill_in('Street', :with => 'Avenue Q')
|
21
|
+
@session.click_button('awesome')
|
22
|
+
extract_results(@session)['street'].should == 'Avenue Q'
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should fill in a url field by label without for" do
|
26
|
+
@session.fill_in('Html5 Url', :with => 'http://www.avenueq.com')
|
27
|
+
@session.click_button('html5_submit')
|
28
|
+
extract_results(@session)['html5_url'].should == 'http://www.avenueq.com'
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should favour exact label matches over partial matches" do
|
32
|
+
@session.fill_in('Name', :with => 'Harry Jones')
|
33
|
+
@session.click_button('awesome')
|
34
|
+
extract_results(@session)['name'].should == 'Harry Jones'
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should fill in a textarea by id" do
|
38
|
+
@session.fill_in('form_description', :with => 'Texty text')
|
39
|
+
@session.click_button('awesome')
|
40
|
+
extract_results(@session)['description'].should == 'Texty text'
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should fill in a textarea by label" do
|
44
|
+
@session.fill_in('Description', :with => 'Texty text')
|
45
|
+
@session.click_button('awesome')
|
46
|
+
extract_results(@session)['description'].should == 'Texty text'
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should fill in a textarea by name" do
|
50
|
+
@session.fill_in('form[description]', :with => 'Texty text')
|
51
|
+
@session.click_button('awesome')
|
52
|
+
extract_results(@session)['description'].should == 'Texty text'
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should fill in a password field by id" do
|
56
|
+
@session.fill_in('form_password', :with => 'supasikrit')
|
57
|
+
@session.click_button('awesome')
|
58
|
+
extract_results(@session)['password'].should == 'supasikrit'
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should fill in a field with a custom type" do
|
62
|
+
@session.fill_in('Schmooo', :with => 'Schmooo is the game')
|
63
|
+
@session.click_button('awesome')
|
64
|
+
extract_results(@session)['schmooo'].should == 'Schmooo is the game'
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should fill in a field without a type" do
|
68
|
+
@session.fill_in('Phone', :with => '+1 555 7022')
|
69
|
+
@session.click_button('awesome')
|
70
|
+
extract_results(@session)['phone'].should == '+1 555 7022'
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should fill in a text field respecting its maxlength attribute" do
|
74
|
+
@session.fill_in('Zipcode', :with => '52071350')
|
75
|
+
@session.click_button('awesome')
|
76
|
+
extract_results(@session)['zipcode'].should == '52071'
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should fill in a password field by name" do
|
80
|
+
@session.fill_in('form[password]', :with => 'supasikrit')
|
81
|
+
@session.click_button('awesome')
|
82
|
+
extract_results(@session)['password'].should == 'supasikrit'
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should fill in a password field by label" do
|
86
|
+
@session.fill_in('Password', :with => 'supasikrit')
|
87
|
+
@session.click_button('awesome')
|
88
|
+
extract_results(@session)['password'].should == 'supasikrit'
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should fill in a password field by name" do
|
92
|
+
@session.fill_in('form[password]', :with => 'supasikrit')
|
93
|
+
@session.click_button('awesome')
|
94
|
+
extract_results(@session)['password'].should == 'supasikrit'
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should prefer exact matches over partial matches" do
|
98
|
+
@session.fill_in('Name', :with => 'Ford Prefect')
|
99
|
+
@session.click_button('awesome')
|
100
|
+
extract_results(@session)['name'].should == 'Ford Prefect'
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should throw an exception if a hash containing 'with' is not provided" do
|
104
|
+
lambda{@session.fill_in 'Name', 'ignu'}.should raise_error
|
105
|
+
end
|
106
|
+
|
107
|
+
context "with ignore_hidden_fields" do
|
108
|
+
before { Capybara.ignore_hidden_elements = true }
|
109
|
+
after { Capybara.ignore_hidden_elements = false }
|
110
|
+
it "should not find a hidden field" do
|
111
|
+
running do
|
112
|
+
@session.fill_in('Super Secret', :with => '777')
|
113
|
+
end.should raise_error(Capybara::ElementNotFound)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
context "with a locator that doesn't exist" do
|
118
|
+
it "should raise an error" do
|
119
|
+
running do
|
120
|
+
@session.fill_in('does not exist', :with => 'Blah blah')
|
121
|
+
end.should raise_error(Capybara::ElementNotFound)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
shared_examples_for "find_button" do
|
2
|
+
describe '#find_button' do
|
3
|
+
before do
|
4
|
+
@session.visit('/form')
|
5
|
+
end
|
6
|
+
|
7
|
+
it "should find any field" do
|
8
|
+
@session.find_button('med')[:id].should == "mediocre"
|
9
|
+
@session.find_button('crap321').value.should == "crappy"
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should raise error if the field doesn't exist" do
|
13
|
+
running do
|
14
|
+
@session.find_button('Does not exist')
|
15
|
+
end.should raise_error(Capybara::ElementNotFound)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|