terminus 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/bin/terminus +5 -5
  2. data/lib/capybara/driver/terminus.rb +24 -13
  3. data/lib/terminus.rb +21 -15
  4. data/lib/terminus/application.rb +6 -6
  5. data/lib/terminus/browser.rb +77 -60
  6. data/lib/terminus/client.rb +33 -16
  7. data/lib/terminus/client/browser.rb +10 -9
  8. data/lib/terminus/client/phantom.js +25 -3
  9. data/lib/terminus/client/phantomjs.rb +44 -7
  10. data/lib/terminus/connector.rb +2 -2
  11. data/lib/terminus/connector/server.rb +15 -15
  12. data/lib/terminus/connector/socket_handler.rb +11 -11
  13. data/lib/terminus/controller.rb +62 -26
  14. data/lib/terminus/headers.rb +25 -0
  15. data/lib/terminus/host.rb +6 -6
  16. data/lib/terminus/node.rb +36 -22
  17. data/lib/terminus/proxy.rb +81 -45
  18. data/lib/terminus/proxy/driver_body.rb +14 -15
  19. data/lib/terminus/proxy/external.rb +12 -6
  20. data/lib/terminus/proxy/rewrite.rb +7 -6
  21. data/lib/terminus/public/compiled/terminus-min.js +3 -3
  22. data/lib/terminus/public/compiled/terminus.js +225 -180
  23. data/lib/terminus/public/pathology.js +87 -87
  24. data/lib/terminus/public/terminus.js +138 -93
  25. data/lib/terminus/server.rb +7 -7
  26. data/lib/terminus/timeouts.rb +8 -8
  27. data/lib/terminus/views/bootstrap.erb +7 -7
  28. data/lib/terminus/views/index.erb +4 -4
  29. data/lib/terminus/views/infinite.html +4 -4
  30. data/spec/1.1/reports/android.txt +874 -0
  31. data/spec/{reports → 1.1/reports}/chrome.txt +72 -69
  32. data/spec/{reports → 1.1/reports}/firefox.txt +72 -69
  33. data/spec/{reports → 1.1/reports}/opera.txt +72 -69
  34. data/spec/{reports → 1.1/reports}/phantomjs.txt +72 -69
  35. data/spec/{reports → 1.1/reports}/safari.txt +72 -69
  36. data/spec/{spec_helper.rb → 1.1/spec_helper.rb} +5 -2
  37. data/spec/{terminus_driver_spec.rb → 1.1/terminus_driver_spec.rb} +2 -2
  38. data/spec/{terminus_session_spec.rb → 1.1/terminus_session_spec.rb} +2 -2
  39. data/spec/2.0/reports/android.txt +815 -0
  40. data/spec/2.0/reports/chrome.txt +806 -0
  41. data/spec/2.0/reports/firefox.txt +812 -0
  42. data/spec/2.0/reports/opera.txt +806 -0
  43. data/spec/2.0/reports/phantomjs.txt +803 -0
  44. data/spec/2.0/reports/safari.txt +806 -0
  45. data/spec/2.0/spec_helper.rb +21 -0
  46. data/spec/2.0/terminus_spec.rb +25 -0
  47. metadata +41 -32
  48. data/spec/reports/android.txt +0 -875
@@ -6,29 +6,29 @@ Thin::Logging.silent = true
6
6
 
7
7
  module Terminus
8
8
  class Server
9
-
9
+
10
10
  def initialize(options = {})
11
11
  @options = options
12
12
  end
13
-
13
+
14
14
  def running?
15
15
  not @server.nil?
16
16
  end
17
-
17
+
18
18
  def run!
19
19
  return if running?
20
20
  handler = Rack::Handler.get('thin')
21
21
  handler.run(app, :Port => @options[:port]) { |s| @server = s }
22
22
  end
23
-
23
+
24
24
  def stop!
25
25
  return unless running?
26
26
  @server.stop!
27
27
  @server = nil
28
28
  end
29
-
29
+
30
30
  private
31
-
31
+
32
32
  def app
33
33
  @app ||= Rack::Builder.new {
34
34
  use Terminus::Proxy
@@ -36,7 +36,7 @@ module Terminus
36
36
  run Application.new
37
37
  }.to_app
38
38
  end
39
-
39
+
40
40
  end
41
41
  end
42
42
 
@@ -1,29 +1,29 @@
1
1
  module Terminus
2
2
  module Timeouts
3
-
3
+
4
4
  class TimeoutError < StandardError
5
5
  end
6
-
6
+
7
7
  include Faye::Timeouts
8
8
  TIMEOUT = 30
9
-
9
+
10
10
  def wait_with_timeout(name, duration = TIMEOUT, &predicate)
11
11
  result, time_out = predicate.call, false
12
12
  return result if result
13
-
13
+
14
14
  add_timeout(name, duration) { time_out = true }
15
-
15
+
16
16
  while !result and !time_out
17
17
  result = predicate.call
18
18
  sleep(0.001)
19
19
  end
20
-
20
+
21
21
  raise TimeoutError.new("Waited #{duration}s but could not get a #{name}") if time_out
22
22
  remove_timeout(name)
23
-
23
+
24
24
  result
25
25
  end
26
-
26
+
27
27
  end
28
28
  end
29
29
 
@@ -2,16 +2,16 @@
2
2
  var faye = '<%= ::Terminus::FAYE_MOUNT %>',
3
3
  host = '<%= env['SERVER_NAME'] %>',
4
4
  origin = 'http://' + host + ':' + <%= Terminus.port %>;
5
-
5
+
6
6
  var withPackageManager = function(callback) {
7
7
  if (window.JS && JS.Packages) return callback();
8
-
8
+
9
9
  var script = document.createElement('script'),
10
10
  head = document.getElementsByTagName('head')[0];
11
-
11
+
12
12
  script.type = 'text/javascript';
13
13
  script.src = origin + '/loader.js';
14
-
14
+
15
15
  script.onload = script.onreadystatechange = function() {
16
16
  var state = script.readyState;
17
17
  if (!state || state === 'loaded' || state === 'complete') {
@@ -21,15 +21,15 @@
21
21
  };
22
22
  head.appendChild(script);
23
23
  };
24
-
24
+
25
25
  withPackageManager(function() {
26
26
  JS.cacheBust = true;
27
-
27
+
28
28
  JS.Packages(function() { with(this) {
29
29
  file(origin + faye + '/client.js').provides('Faye', 'Faye.Client');
30
30
  file(origin + '/compiled/terminus-min.js').requires('Faye.Client').provides('Terminus');
31
31
  }});
32
-
32
+
33
33
  JS.require('Faye.Client', function() {
34
34
  JS.require('Terminus', function() {
35
35
  Terminus.connect(host, <%= ::Terminus.port %>);
@@ -7,15 +7,15 @@
7
7
  <title>Terminus</title>
8
8
  </head>
9
9
  <body>
10
-
10
+
11
11
  <div class="bg"></div>
12
-
12
+
13
13
  <h1><a href="javascript:<%= bootstrap %>">Terminus</a></h1>
14
-
14
+
15
15
  <p><a href="http://terminus.jcoglan.com">Terminus</a><br>
16
16
  Copyright &copy; 2010&ndash;2012 <a href="http://jcoglan.com">James Coglan</a><br>
17
17
  Released under the MIT license</p>
18
-
18
+
19
19
  </body>
20
20
  </html>
21
21
 
@@ -1,16 +1,16 @@
1
1
  <!doctype html>
2
2
  <html>
3
3
  <head>
4
- <meta http-equiv="Content-type" content="text/html; charset=utf-8">
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5
5
  <title>Infinite Redirect Detected</title>
6
6
  </head>
7
7
  <body>
8
-
8
+
9
9
  <h1>Infinite Redirect Detected</h1>
10
-
10
+
11
11
  <script type="text/javascript">
12
12
  TERMINUS_INFINITE_REDIRECT = true
13
13
  </script>
14
-
14
+
15
15
  </body>
16
16
  </html>
@@ -0,0 +1,874 @@
1
+
2
+ Capybara::Session
3
+ with non-existant driver
4
+ should raise an error
5
+
6
+ Capybara::Driver::Terminus
7
+ it should behave like driver
8
+ #visit
9
+ should move to another page
10
+ should show the correct URL
11
+ #body
12
+ should return text reponses
13
+ should return the full response html
14
+ encoding of response between ascii and utf8
15
+ should be valid with html entities
16
+ should be valid without html entities
17
+ #find
18
+ with xpath selector
19
+ should extract node texts
20
+ should extract node attributes
21
+ should extract boolean node attributes
22
+ should allow retrieval of the value
23
+ should not swallow extra newlines in textarea
24
+ should allow assignment of field value
25
+ should extract node tag name
26
+ should extract node visibility
27
+ should extract node checked state
28
+ should extract node selected state
29
+ should return document text on /html selector
30
+ it should behave like driver with javascript support
31
+ #find
32
+ should find dynamically changed nodes
33
+ #drag_to
34
+ should drag and drop an object
35
+ #evaluate_script
36
+ should return the value of the executed script
37
+ it should behave like driver with resynchronization support
38
+ #find
39
+ with synchronization turned on
40
+ should wait for all ajax requests to finish
41
+ with resynchronization turned off
42
+ should not wait for ajax requests to finish
43
+ with short synchronization timeout
44
+ should raise an error
45
+ it should behave like driver with header support
46
+ should make headers available through response_headers
47
+ it should behave like driver with status code support
48
+ should make the status code available through status_code
49
+ it should behave like driver with frame support
50
+ #within_frame
51
+ should find the div in frameOne
52
+ should find the div in FrameTwo
53
+ should find the text div in the main window after finding text in frameOne
54
+ should find the text div in the main window after finding text in frameTwo
55
+ it should behave like driver with cookies support
56
+ #reset!
57
+ should set and clean cookies
58
+ it should behave like driver with infinite redirect detection
59
+ should follow 5 redirects
60
+ should not follow more than 5 redirects
61
+
62
+ Capybara::Session
63
+ with terminus driver
64
+ it should behave like session
65
+ should encode complex field names, like array[][value]
66
+ #visit
67
+ should fetch a response from the driver
68
+ #body
69
+ should return the unmodified page body
70
+ #html
71
+ should return the unmodified page body
72
+ #source
73
+ should return the unmodified page source
74
+ #reset_session!
75
+ removes cookies
76
+ resets current host
77
+ resets current path
78
+ resets page body
79
+ it should behave like all
80
+ #all
81
+ should find all elements using the given locator
82
+ should return an empty array when nothing was found
83
+ should accept an XPath instance
84
+ with css selectors
85
+ should find all elements using the given selector
86
+ should find all elements when given a list of selectors
87
+ with xpath selectors
88
+ should find the first element using the given locator
89
+ with css as default selector
90
+ should find the first element using the given locator
91
+ with visible filter
92
+ should only find visible nodes
93
+ should only find invisible nodes
94
+ within a scope
95
+ should find any element using the given locator
96
+ it should behave like first
97
+ #first
98
+ should find the first element using the given locator
99
+ should return nil when nothing was found
100
+ should accept an XPath instance
101
+ with css selectors
102
+ should find the first element using the given selector
103
+ with xpath selectors
104
+ should find the first element using the given locator
105
+ with css as default selector
106
+ should find the first element using the given locator
107
+ with visible filter
108
+ should only find visible nodes if true given
109
+ should include invisible nodes if false given
110
+ with prefer visible elements
111
+ should find invisible elements if no visible element exists
112
+ should prefer visible elements over invisible elements
113
+ should return the first invisible element if no visible elements exist
114
+ find visible links normally
115
+ without prefer visible elements
116
+ should find invisible elements if no visible element exists
117
+ should not prefer visible elements over invisible elements
118
+ within a scope
119
+ should find the first element using the given locator
120
+ it should behave like attach_file
121
+ #attach_file
122
+ with normal form
123
+ should set a file path by id (FAILED - 1)
124
+ should set a file path by label (FAILED - 2)
125
+ with multipart form
126
+ should set a file path by id (FAILED - 3)
127
+ should set a file path by label (FAILED - 4)
128
+ should not break if no file is submitted
129
+ should send content type text/plain when uploading a text file (FAILED - 5)
130
+ should send content type image/jpeg when uploading an image (FAILED - 6)
131
+ should not break when using HTML5 multiple file input (FAILED - 7)
132
+ with a locator that doesn't exist
133
+ should raise an error
134
+ with a path that doesn't exist
135
+ should raise an error
136
+ it should behave like check
137
+ #check
138
+ should check a checkbox by id
139
+ should check a checkbox by label
140
+ 'checked' attribute
141
+ should be true if checked
142
+ should be false if unchecked
143
+ checking
144
+ should not change an already checked checkbox
145
+ should check an unchecked checkbox
146
+ unchecking
147
+ should not change an already unchecked checkbox
148
+ should uncheck a checked checkbox
149
+ with a locator that doesn't exist
150
+ should raise an error
151
+ it should behave like choose
152
+ #choose
153
+ should choose a radio button by id
154
+ should choose a radio button by label
155
+ with a locator that doesn't exist
156
+ should raise an error
157
+ it should behave like click_link_or_button
158
+ #click
159
+ should click on a link
160
+ should click on a button
161
+ should click on a button with no type attribute
162
+ should be aliased as click_on
163
+ with a locator that doesn't exist
164
+ should raise an error
165
+ it should behave like click_button
166
+ #click_button
167
+ should serialize and send valueless buttons that were clicked
168
+ should not send image buttons that were not clicked
169
+ should serialize and send GET forms
170
+ should follow redirects
171
+ should post pack to the same URL when no action given
172
+ should post pack to the same URL when blank action given
173
+ with multiple values with the same name
174
+ should use the latest given value
175
+ with a form that has a relative url as an action
176
+ should post to the correct url
177
+ with a form that has no action specified
178
+ should post to the correct url
179
+ with value given on a submit button
180
+ on a form with HTML5 fields
181
+ should serialise and submit search fields
182
+ should serialise and submit email fields
183
+ should serialise and submit url fields
184
+ should serialise and submit tel fields
185
+ should serialise and submit color fields
186
+ on an HTML4 form
187
+ should serialize and submit text fields
188
+ should escape fields when submitting
189
+ should serialize and submit password fields
190
+ should serialize and submit hidden fields
191
+ should not serialize fields from other forms
192
+ should submit the button that was clicked, but not other buttons
193
+ should serialize radio buttons
194
+ should serialize check boxes
195
+ should serialize text areas
196
+ should serialize select tag with values
197
+ should serialize select tag without values
198
+ should serialize first option for select tag with no selection
199
+ should not serialize a select tag without options
200
+ should not submit disabled fields
201
+ with id given on a submit button
202
+ should submit the associated form
203
+ should work with partial matches
204
+ with title given on a submit button
205
+ should submit the associated form
206
+ should work with partial matches
207
+ with alt given on an image button
208
+ should submit the associated form
209
+ should work with partial matches
210
+ with value given on an image button
211
+ should submit the associated form
212
+ should work with partial matches
213
+ with id given on an image button
214
+ should submit the associated form
215
+ with title given on an image button
216
+ should submit the associated form
217
+ should work with partial matches
218
+ with text given on a button defined by <button> tag
219
+ should submit the associated form
220
+ should work with partial matches
221
+ should prefer exact matches over partial matches
222
+ with id given on a button defined by <button> tag
223
+ should submit the associated form
224
+ should serialize and send GET forms
225
+ with value given on a button defined by <button> tag
226
+ should submit the associated form
227
+ should work with partial matches
228
+ should prefer exact matches over partial matches
229
+ with title given on a button defined by <button> tag
230
+ should submit the associated form
231
+ should work with partial matches
232
+ with a locator that doesn't exist
233
+ should raise an error
234
+ it should behave like click_link
235
+ #click_link
236
+ should follow relative links
237
+ should follow redirects
238
+ should follow redirects
239
+ should add query string to current URL with naked query string
240
+ should do nothing on anchor links
241
+ should do nothing on URL+anchor links for the same page
242
+ should follow link on URL+anchor links for a different page
243
+ raise an error with links with no href
244
+ with id given
245
+ should take user to the linked page
246
+ with text given
247
+ should take user to the linked page
248
+ should accept partial matches
249
+ should prefer exact matches over partial matches
250
+ with title given
251
+ should take user to the linked page
252
+ should accept partial matches
253
+ should prefer exact matches over partial matches
254
+ with alternative text given to a contained image
255
+ should take user to the linked page
256
+ should take user to the linked page
257
+ should prefer exact matches over partial matches
258
+ with a locator that doesn't exist
259
+ should raise an error
260
+ it should behave like fill_in
261
+ #fill_in
262
+ should fill in a text field by id
263
+ should fill in a text field by name
264
+ should fill in a text field by label without for (FAILED - 8)
265
+ should fill in a url field by label without for
266
+ should favour exact label matches over partial matches
267
+ should fill in a textarea by id
268
+ should fill in a textarea by label
269
+ should fill in a textarea by name
270
+ should fill in a password field by id
271
+ should fill in a field with a custom type
272
+ should fill in a field without a type
273
+ should fill in a text field respecting its maxlength attribute
274
+ should fill in a password field by name
275
+ should fill in a password field by label
276
+ should fill in a password field by name
277
+ should prefer exact matches over partial matches
278
+ should throw an exception if a hash containing 'with' is not provided
279
+ with ignore_hidden_fields
280
+ should not find a hidden field
281
+ with a locator that doesn't exist
282
+ should raise an error
283
+ it should behave like find_button
284
+ #find_button
285
+ should find any field
286
+ should raise error if the field doesn't exist
287
+ it should behave like find_field
288
+ #find_field
289
+ should find any field
290
+ should raise error if the field doesn't exist
291
+ should be aliased as 'field_labeled' for webrat compatibility
292
+ it should behave like find_link
293
+ #find_link
294
+ should find any field
295
+ should raise error if the field doesn't exist
296
+ it should behave like find_by_id
297
+ #find_by_id
298
+ should find any element by id
299
+ should raise error if no element with id is found
300
+ it should behave like find
301
+ #find
302
+ should find the first element using the given locator
303
+ should find the first element using the given locator and options
304
+ should raise ElementNotFound with specified fail message if nothing was found
305
+ should raise ElementNotFound with a useful default message if nothing was found
306
+ should accept an XPath instance and respect the order of paths
307
+ the returned node
308
+ should act like a session object
309
+ should scope CSS selectors
310
+ should have a reference to its parent if there is one
311
+ with css selectors
312
+ should find the first element using the given locator
313
+ with id selectors
314
+ should find the first element using the given locator
315
+ with xpath selectors
316
+ should find the first element using the given locator
317
+ with custom selector
318
+ should use the custom selector
319
+ with custom selector with :for option
320
+ should use the selector when it matches the :for option
321
+ with custom selector with failure_message option
322
+ should raise an error with the failure message if the element is not found
323
+ should pass the selector as the second argument
324
+ with css as default selector
325
+ should find the first element using the given locator
326
+ within a scope
327
+ should find the first element using the given locator
328
+ it should behave like has_content
329
+ #has_content?
330
+ should be true if the given content is on the page at least once
331
+ should be true if scoped to an element which has the content
332
+ should be false if scoped to an element which does not have the content
333
+ should ignore tags
334
+ should ignore extra whitespace and newlines
335
+ should be false if the given content is not on the page
336
+ should handle single quotes in the content
337
+ should handle double quotes in the content
338
+ should handle mixed single and double quotes in the content
339
+ #has_no_content?
340
+ should be false if the given content is on the page at least once
341
+ should be false if scoped to an element which has the content
342
+ should be true if scoped to an element which does not have the content
343
+ should ignore tags
344
+ should be true if the given content is not on the page
345
+ should handle single quotes in the content
346
+ should handle double quotes in the content
347
+ should handle mixed single and double quotes in the content
348
+ it should behave like has_css
349
+ #has_css?
350
+ should be true if the given selector is on the page
351
+ should be false if the given selector is not on the page
352
+ should respect scopes
353
+ with between
354
+ should be true if the content occurs within the range given
355
+ should be false if the content occurs more or fewer times than range
356
+ should be false if the content isn't on the page at all
357
+ with count
358
+ should be true if the content is on the page the given number of times
359
+ should be false if the content occurs the given number of times
360
+ should be false if the content isn't on the page at all
361
+ should coerce count to an integer
362
+ with maximum
363
+ should be true when content occurs same or fewer times than given
364
+ should be false when content occurs more times than given
365
+ should be false if the content isn't on the page at all
366
+ should coerce maximum to an integer
367
+ with minimum
368
+ should be true when content occurs same or more times than given
369
+ should be false when content occurs fewer times than given
370
+ should be false if the content isn't on the page at all
371
+ should coerce minimum to an integer
372
+ with text
373
+ should discard all matches where the given string is not contained
374
+ should discard all matches where the given regexp is not matched
375
+ #has_no_css?
376
+ should be false if the given selector is on the page
377
+ should be true if the given selector is not on the page
378
+ should respect scopes
379
+ with between
380
+ should be false if the content occurs within the range given
381
+ should be true if the content occurs more or fewer times than range
382
+ should be true if the content isn't on the page at all
383
+ with count
384
+ should be false if the content is on the page the given number of times
385
+ should be true if the content is on the page the given number of times
386
+ should be true if the content isn't on the page at all
387
+ should coerce count to an integer
388
+ with maximum
389
+ should be false when content occurs same or fewer times than given
390
+ should be true when content occurs more times than given
391
+ should be true if the content isn't on the page at all
392
+ should coerce maximum to an integer
393
+ with minimum
394
+ should be false when content occurs more times than given
395
+ should be true when content occurs fewer times than given
396
+ should be true if the content isn't on the page at all
397
+ should coerce minimum to an integer
398
+ with text
399
+ should discard all matches where the given string is not contained
400
+ should discard all matches where the given regexp is not matched
401
+ it should behave like has_css
402
+ #has_css?
403
+ should be true if the given selector is on the page
404
+ should be false if the given selector is not on the page
405
+ should respect scopes
406
+ with between
407
+ should be true if the content occurs within the range given
408
+ should be false if the content occurs more or fewer times than range
409
+ should be false if the content isn't on the page at all
410
+ with count
411
+ should be true if the content is on the page the given number of times
412
+ should be false if the content occurs the given number of times
413
+ should be false if the content isn't on the page at all
414
+ should coerce count to an integer
415
+ with maximum
416
+ should be true when content occurs same or fewer times than given
417
+ should be false when content occurs more times than given
418
+ should be false if the content isn't on the page at all
419
+ should coerce maximum to an integer
420
+ with minimum
421
+ should be true when content occurs same or more times than given
422
+ should be false when content occurs fewer times than given
423
+ should be false if the content isn't on the page at all
424
+ should coerce minimum to an integer
425
+ with text
426
+ should discard all matches where the given string is not contained
427
+ should discard all matches where the given regexp is not matched
428
+ #has_no_css?
429
+ should be false if the given selector is on the page
430
+ should be true if the given selector is not on the page
431
+ should respect scopes
432
+ with between
433
+ should be false if the content occurs within the range given
434
+ should be true if the content occurs more or fewer times than range
435
+ should be true if the content isn't on the page at all
436
+ with count
437
+ should be false if the content is on the page the given number of times
438
+ should be true if the content is on the page the given number of times
439
+ should be true if the content isn't on the page at all
440
+ should coerce count to an integer
441
+ with maximum
442
+ should be false when content occurs same or fewer times than given
443
+ should be true when content occurs more times than given
444
+ should be true if the content isn't on the page at all
445
+ should coerce maximum to an integer
446
+ with minimum
447
+ should be false when content occurs more times than given
448
+ should be true when content occurs fewer times than given
449
+ should be true if the content isn't on the page at all
450
+ should coerce minimum to an integer
451
+ with text
452
+ should discard all matches where the given string is not contained
453
+ should discard all matches where the given regexp is not matched
454
+ it should behave like has_selector
455
+ #has_selector?
456
+ should be true if the given selector is on the page
457
+ should be false if the given selector is not on the page
458
+ should use default selector
459
+ should respect scopes
460
+ with count
461
+ should be true if the content is on the page the given number of times
462
+ should be false if the content is on the page the given number of times
463
+ should be false if the content isn't on the page at all
464
+ with text
465
+ should discard all matches where the given string is not contained
466
+ should discard all matches where the given regexp is not matched
467
+ #has_no_selector?
468
+ should be false if the given selector is on the page
469
+ should be true if the given selector is not on the page
470
+ should use default selector
471
+ should respect scopes
472
+ with count
473
+ should be false if the content is on the page the given number of times
474
+ should be true if the content is on the page the wrong number of times
475
+ should be true if the content isn't on the page at all
476
+ with text
477
+ should discard all matches where the given string is contained
478
+ should discard all matches where the given regexp is matched
479
+ it should behave like has_xpath
480
+ #has_xpath?
481
+ should be true if the given selector is on the page
482
+ should be false if the given selector is not on the page
483
+ should use xpath even if default selector is CSS
484
+ should respect scopes
485
+ with count
486
+ should be true if the content is on the page the given number of times
487
+ should be false if the content is on the page the given number of times
488
+ should be false if the content isn't on the page at all
489
+ with text
490
+ should discard all matches where the given string is not contained
491
+ should discard all matches where the given regexp is not matched
492
+ #has_no_xpath?
493
+ should be false if the given selector is on the page
494
+ should be true if the given selector is not on the page
495
+ should use xpath even if default selector is CSS
496
+ should respect scopes
497
+ with count
498
+ should be false if the content is on the page the given number of times
499
+ should be true if the content is on the page the wrong number of times
500
+ should be true if the content isn't on the page at all
501
+ with text
502
+ should discard all matches where the given string is contained
503
+ should discard all matches where the given regexp is matched
504
+ it should behave like has_link
505
+ #has_link?
506
+ should be true if the given link is on the page
507
+ should be false if the given link is not on the page
508
+ #has_no_link?
509
+ should be false if the given link is on the page
510
+ should be true if the given link is not on the page
511
+ it should behave like has_button
512
+ #has_button?
513
+ should be true if the given button is on the page
514
+ should be false if the given button is not on the page
515
+ #has_no_button?
516
+ should be true if the given button is on the page
517
+ should be false if the given button is not on the page
518
+ it should behave like has_field
519
+ #has_field
520
+ should be true if the field is on the page
521
+ should be false if the field is not on the page
522
+ with value
523
+ should be true if a field with the given value is on the page
524
+ should be false if the given field is not on the page
525
+ should be true after the field has been filled in with the given value
526
+ should be false after the field has been filled in with a different value
527
+ #has_no_field
528
+ should be false if the field is on the page
529
+ should be true if the field is not on the page
530
+ with value
531
+ should be false if a field with the given value is on the page
532
+ should be true if the given field is not on the page
533
+ should be false after the field has been filled in with the given value
534
+ should be true after the field has been filled in with a different value
535
+ #has_checked_field?
536
+ should be true if a checked field is on the page
537
+ should be false if an unchecked field is on the page
538
+ should be false if no field is on the page
539
+ should be true after an unchecked checkbox is checked
540
+ should be false after a checked checkbox is unchecked
541
+ should be true after an unchecked radio button is chosen
542
+ should be false after another radio button in the group is chosen
543
+ #has_no_checked_field?
544
+ should be false if a checked field is on the page
545
+ should be true if an unchecked field is on the page
546
+ should be true if no field is on the page
547
+ #has_unchecked_field?
548
+ should be false if a checked field is on the page
549
+ should be true if an unchecked field is on the page
550
+ should be false if no field is on the page
551
+ should be false after an unchecked checkbox is checked
552
+ should be true after a checked checkbox is unchecked
553
+ should be false after an unchecked radio button is chosen
554
+ should be true after another radio button in the group is chosen
555
+ #has_no_unchecked_field?
556
+ should be true if a checked field is on the page
557
+ should be false if an unchecked field is on the page
558
+ should be true if no field is on the page
559
+ it should behave like has_select
560
+ #has_select?
561
+ should be true if the field is on the page
562
+ should be false if the field is not on the page
563
+ with selected value
564
+ should be true if a field with the given value is on the page
565
+ should be false if the given field is not on the page
566
+ should be true after the given value is selected
567
+ should be false after a different value is selected
568
+ should be true after the given values are selected
569
+ should be false after one of the values is unselected
570
+ with options
571
+ should be true if a field with the given options is on the page
572
+ should be false if the given field is not on the page
573
+ #has_no_select?
574
+ should be false if the field is on the page
575
+ should be true if the field is not on the page
576
+ with selected value
577
+ should be false if a field with the given value is on the page
578
+ should be true if the given field is not on the page
579
+ should be false after the given value is selected
580
+ should be true after a different value is selected
581
+ should be false after the given values are selected
582
+ should be true after one of the values is unselected
583
+ with options
584
+ should be false if a field with the given options is on the page
585
+ should be true if the given field is not on the page
586
+ it should behave like has_table
587
+ #has_table?
588
+ should be true if the field is on the page
589
+ should be false if the field is not on the page
590
+ with rows
591
+ should be true if a table with the given rows is on the page
592
+ should be true if the given rows are incomplete
593
+ should be false if the given table is not on the page
594
+ should be false if the given rows contain incorrect elements
595
+ should be false if the given rows are incorrectly ordered
596
+ should be false if the only some of the given rows are correct
597
+ should be false if the given rows are out of order
598
+ #has_no_table?
599
+ should be false if the field is on the page
600
+ should be true if the field is not on the page
601
+ with rows
602
+ should be false if a table with the given rows is on the page
603
+ should be false if the given rows are incomplete
604
+ should be true if the given table is not on the page
605
+ should be true if the given rows contain incorrect elements
606
+ should be true if the given rows are incorrectly ordered
607
+ should be true if the only some of the given rows are correct
608
+ should be true if the given rows are out of order
609
+ it should behave like select
610
+ #select
611
+ should return value of the first option
612
+ should return value of the selected option
613
+ should return the value attribute rather than content if present
614
+ should select an option from a select box by id
615
+ should select an option from a select box by label
616
+ should select an option without giving a select box
617
+ should favour exact matches to option labels
618
+ should escape quotes
619
+ should obey from
620
+ show match labels with preceding or trailing whitespace
621
+ with a locator that doesn't exist
622
+ should raise an error
623
+ with an option that doesn't exist
624
+ should raise an error
625
+ with multiple select
626
+ should return an empty value
627
+ should return value of the selected options
628
+ should select one option
629
+ should select multiple options
630
+ should remain selected if already selected
631
+ should return value attribute rather than content if present
632
+ it should behave like text
633
+ #text
634
+ should print the text of the page
635
+ with css as default selector
636
+ should print the text of the page
637
+ it should behave like uncheck
638
+ #uncheck
639
+ should uncheck a checkbox by id
640
+ should uncheck a checkbox by label
641
+ it should behave like unselect
642
+ #unselect
643
+ with multiple select
644
+ should unselect an option from a select box by id
645
+ should unselect an option without a select box
646
+ should unselect an option from a select box by label
647
+ should favour exact matches to option labels
648
+ should escape quotes
649
+ with single select
650
+ should raise an error
651
+ with a locator that doesn't exist
652
+ should raise an error
653
+ with an option that doesn't exist
654
+ should raise an error
655
+ it should behave like within
656
+ #within
657
+ with CSS selector
658
+ should click links in the given scope
659
+ should assert content in the given scope
660
+ should accept additional options
661
+ with XPath selector
662
+ should click links in the given scope
663
+ with the default selector
664
+ should use XPath
665
+ with Node rather than selector
666
+ should click links in the given scope
667
+ with the default selector set to CSS
668
+ should use CSS
669
+ with click_link
670
+ should click links in the given scope
671
+ should raise an error if the scope is not found on the page
672
+ should restore the scope when an error is raised
673
+ with nested scopes
674
+ should respect the inner scope
675
+ should respect the outer scope
676
+ with forms
677
+ should fill in a field and click a button
678
+ #within_fieldset
679
+ should restrict scope to a fieldset given by id
680
+ should restrict scope to a fieldset given by legend
681
+ #within_table
682
+ should restrict scope to a fieldset given by id
683
+ should restrict scope to a fieldset given by legend
684
+ it should behave like current_url
685
+ #current_url
686
+ should return the current url
687
+ #current_path
688
+ should show the correct location
689
+ it should behave like current_host
690
+ #current_host
691
+ is affected by visiting a page directly
692
+ returns to the app host when visiting a relative url
693
+ is affected by setting Capybara.app_host
694
+ is unaffected by following a relative link
695
+ is affected by following an absolute link
696
+ is unaffected by posting through a relative form
697
+ is affected by posting through an absolute form
698
+ is affected by following a redirect
699
+ it should behave like session with headers support
700
+ #response_headers
701
+ should return response headers
702
+ it should behave like session with javascript support
703
+ all JS specs
704
+ Node#drag_to
705
+ should drag and drop an object
706
+ Node#reload
707
+ without automatic reload
708
+ should reload the current context of the node
709
+ should reload a parent node
710
+ should not automatically reload
711
+ with automatic reload
712
+ should reload the current context of the node automatically
713
+ should reload a parent node automatically
714
+ should reload a node automatically when using find
715
+ should not reload nodes which haven't been found
716
+ should reload nodes with options
717
+ #find
718
+ should allow triggering of custom JS events
719
+ #body
720
+ should return the current state of the page
721
+ #source
722
+ should return the original, unmodified source of the page
723
+ #evaluate_script
724
+ should evaluate the given script and return whatever it produces
725
+ #execute_script
726
+ should execute the given script and return nothing
727
+ #find
728
+ should wait for asynchronous load
729
+ with frozen time
730
+ raises an error suggesting that Capybara is stuck in time
731
+ #wait_until
732
+ should wait for block to return true
733
+ should raise Capybara::TimeoutError if block doesn't return true within timeout
734
+ should accept custom timeout in seconds
735
+ should default to Capybara.default_wait_time before timeout
736
+ #click_link_or_button
737
+ should wait for asynchronous load
738
+ #click_link
739
+ should wait for asynchronous load
740
+ #click_button
741
+ should wait for asynchronous load
742
+ #fill_in
743
+ should wait for asynchronous load
744
+ #check
745
+ should trigger associated events
746
+ #has_xpath?
747
+ should wait for content to appear
748
+ #has_no_xpath?
749
+ should wait for content to disappear
750
+ #has_css?
751
+ should wait for content to appear
752
+ #has_no_xpath?
753
+ should wait for content to disappear
754
+ #has_content?
755
+ should wait for content to appear
756
+ #has_no_content?
757
+ should wait for content to disappear
758
+ it should behave like session with status code support
759
+ #status_code
760
+ should return response codes
761
+
762
+ Failures:
763
+
764
+ 1) Capybara::Session with terminus driver it should behave like session it should behave like attach_file #attach_file with normal form should set a file path by id
765
+ Failure/Error: @session.attach_file "form_image", __FILE__
766
+ Capybara::NotSupportedByDriverError:
767
+ Capybara::NotSupportedByDriverError
768
+ Shared Example Group: "attach_file" called from ./vendor/capybara/1.1/lib/capybara/spec/session.rb:88
769
+ # ./lib/terminus/node.rb:66:in `set'
770
+ # ./vendor/capybara/1.1/lib/capybara/node/element.rb:79:in `block in set'
771
+ # ./vendor/capybara/1.1/lib/capybara/node/base.rb:54:in `wait_until'
772
+ # ./vendor/capybara/1.1/lib/capybara/node/element.rb:79:in `set'
773
+ # ./vendor/capybara/1.1/lib/capybara/node/actions.rb:158:in `attach_file'
774
+ # (eval):2:in `attach_file'
775
+ # ./vendor/capybara/1.1/lib/capybara/spec/session/attach_file_spec.rb:12:in `block (4 levels) in <top (required)>'
776
+
777
+ 2) Capybara::Session with terminus driver it should behave like session it should behave like attach_file #attach_file with normal form should set a file path by label
778
+ Failure/Error: @session.attach_file "Image", __FILE__
779
+ Capybara::NotSupportedByDriverError:
780
+ Capybara::NotSupportedByDriverError
781
+ Shared Example Group: "attach_file" called from ./vendor/capybara/1.1/lib/capybara/spec/session.rb:88
782
+ # ./lib/terminus/node.rb:66:in `set'
783
+ # ./vendor/capybara/1.1/lib/capybara/node/element.rb:79:in `block in set'
784
+ # ./vendor/capybara/1.1/lib/capybara/node/base.rb:54:in `wait_until'
785
+ # ./vendor/capybara/1.1/lib/capybara/node/element.rb:79:in `set'
786
+ # ./vendor/capybara/1.1/lib/capybara/node/actions.rb:158:in `attach_file'
787
+ # (eval):2:in `attach_file'
788
+ # ./vendor/capybara/1.1/lib/capybara/spec/session/attach_file_spec.rb:18:in `block (4 levels) in <top (required)>'
789
+
790
+ 3) Capybara::Session with terminus driver it should behave like session it should behave like attach_file #attach_file with multipart form should set a file path by id
791
+ Failure/Error: @session.attach_file "form_document", @test_file_path
792
+ Capybara::NotSupportedByDriverError:
793
+ Capybara::NotSupportedByDriverError
794
+ Shared Example Group: "attach_file" called from ./vendor/capybara/1.1/lib/capybara/spec/session.rb:88
795
+ # ./lib/terminus/node.rb:66:in `set'
796
+ # ./vendor/capybara/1.1/lib/capybara/node/element.rb:79:in `block in set'
797
+ # ./vendor/capybara/1.1/lib/capybara/node/base.rb:54:in `wait_until'
798
+ # ./vendor/capybara/1.1/lib/capybara/node/element.rb:79:in `set'
799
+ # ./vendor/capybara/1.1/lib/capybara/node/actions.rb:158:in `attach_file'
800
+ # (eval):2:in `attach_file'
801
+ # ./vendor/capybara/1.1/lib/capybara/spec/session/attach_file_spec.rb:26:in `block (4 levels) in <top (required)>'
802
+
803
+ 4) Capybara::Session with terminus driver it should behave like session it should behave like attach_file #attach_file with multipart form should set a file path by label
804
+ Failure/Error: @session.attach_file "Document", @test_file_path
805
+ Capybara::NotSupportedByDriverError:
806
+ Capybara::NotSupportedByDriverError
807
+ Shared Example Group: "attach_file" called from ./vendor/capybara/1.1/lib/capybara/spec/session.rb:88
808
+ # ./lib/terminus/node.rb:66:in `set'
809
+ # ./vendor/capybara/1.1/lib/capybara/node/element.rb:79:in `block in set'
810
+ # ./vendor/capybara/1.1/lib/capybara/node/base.rb:54:in `wait_until'
811
+ # ./vendor/capybara/1.1/lib/capybara/node/element.rb:79:in `set'
812
+ # ./vendor/capybara/1.1/lib/capybara/node/actions.rb:158:in `attach_file'
813
+ # (eval):2:in `attach_file'
814
+ # ./vendor/capybara/1.1/lib/capybara/spec/session/attach_file_spec.rb:32:in `block (4 levels) in <top (required)>'
815
+
816
+ 5) Capybara::Session with terminus driver it should behave like session it should behave like attach_file #attach_file with multipart form should send content type text/plain when uploading a text file
817
+ Failure/Error: @session.attach_file "Document", @test_file_path
818
+ Capybara::NotSupportedByDriverError:
819
+ Capybara::NotSupportedByDriverError
820
+ Shared Example Group: "attach_file" called from ./vendor/capybara/1.1/lib/capybara/spec/session.rb:88
821
+ # ./lib/terminus/node.rb:66:in `set'
822
+ # ./vendor/capybara/1.1/lib/capybara/node/element.rb:79:in `block in set'
823
+ # ./vendor/capybara/1.1/lib/capybara/node/base.rb:54:in `wait_until'
824
+ # ./vendor/capybara/1.1/lib/capybara/node/element.rb:79:in `set'
825
+ # ./vendor/capybara/1.1/lib/capybara/node/actions.rb:158:in `attach_file'
826
+ # (eval):2:in `attach_file'
827
+ # ./vendor/capybara/1.1/lib/capybara/spec/session/attach_file_spec.rb:43:in `block (4 levels) in <top (required)>'
828
+
829
+ 6) Capybara::Session with terminus driver it should behave like session it should behave like attach_file #attach_file with multipart form should send content type image/jpeg when uploading an image
830
+ Failure/Error: @session.attach_file "Document", @test_jpg_file_path
831
+ Capybara::NotSupportedByDriverError:
832
+ Capybara::NotSupportedByDriverError
833
+ Shared Example Group: "attach_file" called from ./vendor/capybara/1.1/lib/capybara/spec/session.rb:88
834
+ # ./lib/terminus/node.rb:66:in `set'
835
+ # ./vendor/capybara/1.1/lib/capybara/node/element.rb:79:in `block in set'
836
+ # ./vendor/capybara/1.1/lib/capybara/node/base.rb:54:in `wait_until'
837
+ # ./vendor/capybara/1.1/lib/capybara/node/element.rb:79:in `set'
838
+ # ./vendor/capybara/1.1/lib/capybara/node/actions.rb:158:in `attach_file'
839
+ # (eval):2:in `attach_file'
840
+ # ./vendor/capybara/1.1/lib/capybara/spec/session/attach_file_spec.rb:49:in `block (4 levels) in <top (required)>'
841
+
842
+ 7) Capybara::Session with terminus driver it should behave like session it should behave like attach_file #attach_file with multipart form should not break when using HTML5 multiple file input
843
+ Failure/Error: @session.attach_file "Multiple Documents", @test_file_path
844
+ Capybara::NotSupportedByDriverError:
845
+ Capybara::NotSupportedByDriverError
846
+ Shared Example Group: "attach_file" called from ./vendor/capybara/1.1/lib/capybara/spec/session.rb:88
847
+ # ./lib/terminus/node.rb:66:in `set'
848
+ # ./vendor/capybara/1.1/lib/capybara/node/element.rb:79:in `block in set'
849
+ # ./vendor/capybara/1.1/lib/capybara/node/base.rb:54:in `wait_until'
850
+ # ./vendor/capybara/1.1/lib/capybara/node/element.rb:79:in `set'
851
+ # ./vendor/capybara/1.1/lib/capybara/node/actions.rb:158:in `attach_file'
852
+ # (eval):2:in `attach_file'
853
+ # ./vendor/capybara/1.1/lib/capybara/spec/session/attach_file_spec.rb:55:in `block (4 levels) in <top (required)>'
854
+
855
+ 8) Capybara::Session with terminus driver it should behave like session it should behave like fill_in #fill_in should fill in a text field by label without for
856
+ Failure/Error: extract_results(@session)['street'].should == 'Avenue Q'
857
+ expected: "Avenue Q"
858
+ got: "Sesame street 66" (using ==)
859
+ Shared Example Group: "fill_in" called from ./vendor/capybara/1.1/lib/capybara/spec/session.rb:94
860
+ # ./vendor/capybara/1.1/lib/capybara/spec/session/fill_in_spec.rb:22:in `block (3 levels) in <top (required)>'
861
+
862
+ Finished in 55 minutes 27.8 seconds
863
+ 509 examples, 8 failures
864
+
865
+ Failed examples:
866
+
867
+ rspec ./vendor/capybara/1.1/lib/capybara/spec/session/attach_file_spec.rb:11 # Capybara::Session with terminus driver it should behave like session it should behave like attach_file #attach_file with normal form should set a file path by id
868
+ rspec ./vendor/capybara/1.1/lib/capybara/spec/session/attach_file_spec.rb:17 # Capybara::Session with terminus driver it should behave like session it should behave like attach_file #attach_file with normal form should set a file path by label
869
+ rspec ./vendor/capybara/1.1/lib/capybara/spec/session/attach_file_spec.rb:25 # Capybara::Session with terminus driver it should behave like session it should behave like attach_file #attach_file with multipart form should set a file path by id
870
+ rspec ./vendor/capybara/1.1/lib/capybara/spec/session/attach_file_spec.rb:31 # Capybara::Session with terminus driver it should behave like session it should behave like attach_file #attach_file with multipart form should set a file path by label
871
+ rspec ./vendor/capybara/1.1/lib/capybara/spec/session/attach_file_spec.rb:42 # Capybara::Session with terminus driver it should behave like session it should behave like attach_file #attach_file with multipart form should send content type text/plain when uploading a text file
872
+ rspec ./vendor/capybara/1.1/lib/capybara/spec/session/attach_file_spec.rb:48 # Capybara::Session with terminus driver it should behave like session it should behave like attach_file #attach_file with multipart form should send content type image/jpeg when uploading an image
873
+ rspec ./vendor/capybara/1.1/lib/capybara/spec/session/attach_file_spec.rb:54 # Capybara::Session with terminus driver it should behave like session it should behave like attach_file #attach_file with multipart form should not break when using HTML5 multiple file input
874
+ rspec ./vendor/capybara/1.1/lib/capybara/spec/session/fill_in_spec.rb:19 # Capybara::Session with terminus driver it should behave like session it should behave like fill_in #fill_in should fill in a text field by label without for