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.
Files changed (70) hide show
  1. data/.gemtest +0 -0
  2. data/.gitignore +4 -0
  3. data/.gitmodules +3 -0
  4. data/.rvmrc +1 -0
  5. data/Gemfile +7 -0
  6. data/README.md +31 -0
  7. data/Rakefile +9 -0
  8. data/capybara_minitest_spec.gemspec +25 -0
  9. data/lib/capybara_minitest_spec/version.rb +3 -0
  10. data/lib/capybara_minitest_spec.rb +45 -0
  11. data/test/matchers_spec.rb +447 -0
  12. data/test/spec_helper.rb +28 -0
  13. data/test_app/driver.rb +297 -0
  14. data/test_app/fixtures/capybara.jpg +3 -0
  15. data/test_app/fixtures/test_file.txt +1 -0
  16. data/test_app/public/test.js +43 -0
  17. data/test_app/session/all_spec.rb +78 -0
  18. data/test_app/session/attach_file_spec.rb +73 -0
  19. data/test_app/session/check_spec.rb +65 -0
  20. data/test_app/session/choose_spec.rb +26 -0
  21. data/test_app/session/click_button_spec.rb +304 -0
  22. data/test_app/session/click_link_or_button_spec.rb +36 -0
  23. data/test_app/session/click_link_spec.rb +119 -0
  24. data/test_app/session/current_host_spec.rb +68 -0
  25. data/test_app/session/current_url_spec.rb +15 -0
  26. data/test_app/session/fill_in_spec.rb +125 -0
  27. data/test_app/session/find_button_spec.rb +18 -0
  28. data/test_app/session/find_by_id_spec.rb +18 -0
  29. data/test_app/session/find_field_spec.rb +26 -0
  30. data/test_app/session/find_link_spec.rb +19 -0
  31. data/test_app/session/find_spec.rb +149 -0
  32. data/test_app/session/first_spec.rb +105 -0
  33. data/test_app/session/has_button_spec.rb +32 -0
  34. data/test_app/session/has_content_spec.rb +106 -0
  35. data/test_app/session/has_css_spec.rb +243 -0
  36. data/test_app/session/has_field_spec.rb +192 -0
  37. data/test_app/session/has_link_spec.rb +37 -0
  38. data/test_app/session/has_select_spec.rb +129 -0
  39. data/test_app/session/has_selector_spec.rb +129 -0
  40. data/test_app/session/has_table_spec.rb +96 -0
  41. data/test_app/session/has_xpath_spec.rb +123 -0
  42. data/test_app/session/headers.rb +19 -0
  43. data/test_app/session/javascript.rb +289 -0
  44. data/test_app/session/response_code.rb +19 -0
  45. data/test_app/session/select_spec.rb +113 -0
  46. data/test_app/session/text_spec.rb +19 -0
  47. data/test_app/session/uncheck_spec.rb +21 -0
  48. data/test_app/session/unselect_spec.rb +61 -0
  49. data/test_app/session/within_spec.rb +178 -0
  50. data/test_app/session.rb +154 -0
  51. data/test_app/test_app.rb +142 -0
  52. data/test_app/views/buttons.erb +4 -0
  53. data/test_app/views/fieldsets.erb +29 -0
  54. data/test_app/views/form.erb +365 -0
  55. data/test_app/views/frame_one.erb +8 -0
  56. data/test_app/views/frame_two.erb +8 -0
  57. data/test_app/views/header_links.erb +7 -0
  58. data/test_app/views/host_links.erb +12 -0
  59. data/test_app/views/popup_one.erb +8 -0
  60. data/test_app/views/popup_two.erb +8 -0
  61. data/test_app/views/postback.erb +13 -0
  62. data/test_app/views/tables.erb +122 -0
  63. data/test_app/views/with_html.erb +74 -0
  64. data/test_app/views/with_html_entities.erb +1 -0
  65. data/test_app/views/with_js.erb +48 -0
  66. data/test_app/views/with_scope.erb +36 -0
  67. data/test_app/views/with_simple_html.erb +1 -0
  68. data/test_app/views/within_frames.erb +10 -0
  69. data/test_app/views/within_popups.erb +25 -0
  70. 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