capybara 2.13.0 → 2.18.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. checksums.yaml +5 -5
  2. data/History.md +218 -18
  3. data/README.md +54 -23
  4. data/lib/capybara/config.rb +132 -0
  5. data/lib/capybara/cucumber.rb +1 -0
  6. data/lib/capybara/driver/base.rb +14 -0
  7. data/lib/capybara/dsl.rb +1 -3
  8. data/lib/capybara/helpers.rb +3 -3
  9. data/lib/capybara/minitest/spec.rb +14 -37
  10. data/lib/capybara/minitest.rb +95 -114
  11. data/lib/capybara/node/actions.rb +10 -10
  12. data/lib/capybara/node/base.rb +7 -2
  13. data/lib/capybara/node/element.rb +9 -3
  14. data/lib/capybara/node/finders.rb +92 -18
  15. data/lib/capybara/node/matchers.rb +21 -9
  16. data/lib/capybara/node/simple.rb +5 -0
  17. data/lib/capybara/queries/ancestor_query.rb +25 -0
  18. data/lib/capybara/queries/base_query.rb +12 -3
  19. data/lib/capybara/queries/current_path_query.rb +13 -9
  20. data/lib/capybara/queries/selector_query.rb +62 -23
  21. data/lib/capybara/queries/sibling_query.rb +25 -0
  22. data/lib/capybara/queries/text_query.rb +10 -5
  23. data/lib/capybara/queries/title_query.rb +1 -0
  24. data/lib/capybara/rack_test/browser.rb +13 -5
  25. data/lib/capybara/rack_test/driver.rb +6 -1
  26. data/lib/capybara/rack_test/form.rb +4 -3
  27. data/lib/capybara/rack_test/node.rb +1 -1
  28. data/lib/capybara/rspec/compound.rb +95 -0
  29. data/lib/capybara/rspec/matcher_proxies.rb +45 -0
  30. data/lib/capybara/rspec/matchers.rb +108 -7
  31. data/lib/capybara/rspec.rb +3 -1
  32. data/lib/capybara/selector/filter.rb +13 -41
  33. data/lib/capybara/selector/filter_set.rb +30 -4
  34. data/lib/capybara/selector/filters/base.rb +33 -0
  35. data/lib/capybara/selector/filters/expression_filter.rb +40 -0
  36. data/lib/capybara/selector/filters/node_filter.rb +27 -0
  37. data/lib/capybara/selector/selector.rb +36 -15
  38. data/lib/capybara/selector.rb +63 -42
  39. data/lib/capybara/selenium/driver.rb +177 -33
  40. data/lib/capybara/selenium/node.rb +106 -55
  41. data/lib/capybara/server.rb +6 -5
  42. data/lib/capybara/session/config.rb +114 -0
  43. data/lib/capybara/session/matchers.rb +15 -4
  44. data/lib/capybara/session.rb +178 -65
  45. data/lib/capybara/spec/fixtures/no_extension +1 -0
  46. data/lib/capybara/spec/public/test.js +18 -3
  47. data/lib/capybara/spec/session/accept_alert_spec.rb +9 -1
  48. data/lib/capybara/spec/session/accept_prompt_spec.rb +29 -1
  49. data/lib/capybara/spec/session/all_spec.rb +13 -1
  50. data/lib/capybara/spec/session/ancestor_spec.rb +85 -0
  51. data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +24 -8
  52. data/lib/capybara/spec/session/assert_selector.rb +1 -1
  53. data/lib/capybara/spec/session/assert_text.rb +8 -0
  54. data/lib/capybara/spec/session/assert_title.rb +22 -9
  55. data/lib/capybara/spec/session/attach_file_spec.rb +8 -1
  56. data/lib/capybara/spec/session/check_spec.rb +4 -4
  57. data/lib/capybara/spec/session/choose_spec.rb +2 -2
  58. data/lib/capybara/spec/session/click_button_spec.rb +1 -1
  59. data/lib/capybara/spec/session/click_link_or_button_spec.rb +3 -3
  60. data/lib/capybara/spec/session/click_link_spec.rb +1 -1
  61. data/lib/capybara/spec/session/current_url_spec.rb +3 -3
  62. data/lib/capybara/spec/session/dismiss_confirm_spec.rb +3 -3
  63. data/lib/capybara/spec/session/dismiss_prompt_spec.rb +1 -1
  64. data/lib/capybara/spec/session/evaluate_async_script_spec.rb +22 -0
  65. data/lib/capybara/spec/session/evaluate_script_spec.rb +1 -1
  66. data/lib/capybara/spec/session/fill_in_spec.rb +8 -2
  67. data/lib/capybara/spec/session/find_field_spec.rb +1 -0
  68. data/lib/capybara/spec/session/find_spec.rb +8 -6
  69. data/lib/capybara/spec/session/first_spec.rb +10 -5
  70. data/lib/capybara/spec/session/has_all_selectors_spec.rb +69 -0
  71. data/lib/capybara/spec/session/has_css_spec.rb +11 -0
  72. data/lib/capybara/spec/session/has_current_path_spec.rb +52 -7
  73. data/lib/capybara/spec/session/has_link_spec.rb +4 -4
  74. data/lib/capybara/spec/session/has_none_selectors_spec.rb +76 -0
  75. data/lib/capybara/spec/session/has_select_spec.rb +64 -6
  76. data/lib/capybara/spec/session/has_selector_spec.rb +1 -3
  77. data/lib/capybara/spec/session/has_text_spec.rb +5 -3
  78. data/lib/capybara/spec/session/has_title_spec.rb +4 -2
  79. data/lib/capybara/spec/session/has_xpath_spec.rb +5 -3
  80. data/lib/capybara/spec/session/node_spec.rb +50 -26
  81. data/lib/capybara/spec/session/refresh_spec.rb +28 -0
  82. data/lib/capybara/spec/session/reset_session_spec.rb +3 -3
  83. data/lib/capybara/spec/session/select_spec.rb +3 -2
  84. data/lib/capybara/spec/session/sibling_spec.rb +52 -0
  85. data/lib/capybara/spec/session/uncheck_spec.rb +2 -2
  86. data/lib/capybara/spec/session/unselect_spec.rb +2 -2
  87. data/lib/capybara/spec/session/visit_spec.rb +56 -1
  88. data/lib/capybara/spec/session/window/become_closed_spec.rb +11 -11
  89. data/lib/capybara/spec/session/window/switch_to_window_spec.rb +11 -9
  90. data/lib/capybara/spec/session/window/window_opened_by_spec.rb +4 -4
  91. data/lib/capybara/spec/session/window/within_window_spec.rb +27 -2
  92. data/lib/capybara/spec/spec_helper.rb +28 -4
  93. data/lib/capybara/spec/test_app.rb +3 -1
  94. data/lib/capybara/spec/views/form.erb +27 -1
  95. data/lib/capybara/spec/views/initial_alert.erb +10 -0
  96. data/lib/capybara/spec/views/with_fixed_header_footer.erb +17 -0
  97. data/lib/capybara/spec/views/with_hover.erb +5 -0
  98. data/lib/capybara/spec/views/with_html.erb +33 -2
  99. data/lib/capybara/spec/views/with_js.erb +12 -0
  100. data/lib/capybara/spec/views/with_windows.erb +4 -0
  101. data/lib/capybara/version.rb +1 -1
  102. data/lib/capybara/window.rb +1 -1
  103. data/lib/capybara.rb +102 -124
  104. data/spec/capybara_spec.rb +43 -21
  105. data/spec/dsl_spec.rb +1 -0
  106. data/spec/filter_set_spec.rb +28 -0
  107. data/spec/minitest_spec.rb +9 -1
  108. data/spec/minitest_spec_spec.rb +19 -5
  109. data/spec/per_session_config_spec.rb +67 -0
  110. data/spec/result_spec.rb +20 -0
  111. data/spec/rspec/shared_spec_matchers.rb +148 -44
  112. data/spec/rspec/views_spec.rb +4 -0
  113. data/spec/rspec_matchers_spec.rb +46 -0
  114. data/spec/rspec_spec.rb +77 -0
  115. data/spec/selector_spec.rb +2 -1
  116. data/spec/selenium_spec_chrome.rb +25 -17
  117. data/spec/selenium_spec_firefox.rb +2 -1
  118. data/spec/selenium_spec_marionette.rb +18 -5
  119. data/spec/session_spec.rb +44 -0
  120. data/spec/shared_selenium_session.rb +72 -8
  121. data/spec/spec_helper.rb +4 -0
  122. metadata +55 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 266938107d80bacdd4f95cc21e79fe6b7af2e131
4
- data.tar.gz: dac8ea7395988fc218da8a556df246db661125b0
2
+ SHA256:
3
+ metadata.gz: fb46b7bc5ae7408ca3870b781d015a84bd84abd0a9c7e3ea2bcdf3d8fff85ce8
4
+ data.tar.gz: 1865dc1efa384c3792161a134bc536c56dca3aa0670ca298ad9f3aa12b49830d
5
5
  SHA512:
6
- metadata.gz: a548da527db279933776ebd86daa6ddf1d7e714bc9b22225959d58b67bbecfa8458f503cde377fc262f0d4442ef6d0f47a88a1bcf66efd58bc5014d80b80f87d
7
- data.tar.gz: f040e322ba5e591dbc3546b0e5c7672f21b6e9eab99ff848780f42e1e1d9e5ce87bdfe242ae0dbb7a45b4ecb37611d3c1c1a202cedcc1e16cc00040114422213
6
+ metadata.gz: 9bc2cb739af408323d977b7ca829aa0862ef68ab7d1778c5ae67fb127a47a09258c1f5b53f9d7955bcfcd2892c869a136d7a5346b9115a9e55713ea47c95ebb3
7
+ data.tar.gz: e8d234ded45305e026b615c60e4eb8597e31fd67b7daefff51d13ab3d79868745e21668a6b45452366ac5a552b38e8c01dc669e73dbe45a9b38ecf8363b54e83
data/History.md CHANGED
@@ -1,4 +1,159 @@
1
- #Version 2.13.0
1
+ #Version 2.18.0
2
+ Release date: 2018-02-12
3
+
4
+ ### Fixed
5
+
6
+ * Firefox/geckodriver setting of contenteditable childs contents
7
+ * Ignore Selenium::WebDriver::Error::SessionNotCreatedError when quitting driver [Tim Connor]
8
+
9
+ ### Removed
10
+
11
+ * Headless chrome modal JS injection that is no longer needed for Chrome 64+/chromedriver 2.35+
12
+
13
+ # Version 2.17.0
14
+ Release date: 2018-01-02
15
+
16
+ ### Added
17
+
18
+ * `have_all_of_selectors`, `have_none_of_selectors` RSpec matchers for parity with minitest assertions [Thomas Walpole]
19
+
20
+ ### Fixed
21
+
22
+ * Allow xpath 3.x gem [Thomas Walpole]
23
+ * Issue when drivers returned nil for `current_path` and a matcher was used with a Regexp [Thomas Walpole]
24
+ * Error message when visible element not found, but non-visible was [Andy Klimczak]
25
+
26
+ # Version 2.16.1
27
+ Release date: 2017-11-20
28
+
29
+ ### Fixed
30
+
31
+ * Fix rack_test driver for rack_test 0.7.1/0.8.0 [Thomas Walpole]
32
+ * `accept_prompt` response text can contain quotes when using selenium with headless chrome [Thomas Walpole]
33
+
34
+ # Version 2.16.0
35
+ Release date: 2017-11-13
36
+
37
+ ### Added
38
+
39
+ * Attempt to move element into view when selenium doesn't correctly do it - See PR #1917 [Thomas Walpole]
40
+ * `current_path` matchers will now autodetect path vs url based on string to be matched. Deprecates
41
+ `:only_path` in favor of `:ignore_query` option [Thomas Walpole]
42
+ * Session#evaluate_async_script [Thomas Walpole]
43
+
44
+ ### Fixed
45
+
46
+ * Default prompt value when using headless Chrome works correctly [Thomas Walpole]
47
+ * Support new modal error returned by selenium-webdriver 3.7 for W3C drivers [Thomas Walpole]
48
+ * Calling `respond_to?` on the object passed to `Capybara.configure` block - Issue #1935
49
+
50
+ # Version 2.15.4
51
+ Release date: 2017-10-07
52
+
53
+ ### Fixed
54
+ * Visiting an absolute URL shouldn't overwrite the port when no server or always_include_port=false - Issue #1921
55
+
56
+ # Version 2.15.3
57
+ Release date: 2017-10-03
58
+
59
+ ### Fixed
60
+ * Visiting '/' when Capybara.app_host has a trailing '/' - Issue #1918 [Thomas Walpole]
61
+
62
+ # Version 2.15.2
63
+ Release date: 2017-10-02
64
+
65
+ ### Fixed
66
+
67
+ * Include within scope description in element not found/ambiguous errors [Thomas Walpole]
68
+ * Raise error when no activation block is passed to modal methods if using headless chrome [Thomas Walpole]
69
+ * Don't retry element access when inspecting [Ivan Neverov]
70
+ * Don't override a specified port (even if it is default port) in visited url [Thomas Walpole]
71
+
72
+ # Version 2.15.1
73
+
74
+ Release date: 2017-08-04
75
+
76
+ ### Fixed
77
+
78
+ * `attach_file` with no extension/MIME type when using the `:rack_test` driver [Thomas Walpole]
79
+
80
+ # Version 2.15.0
81
+
82
+ Release date: 2017-08-04
83
+
84
+ ### Added
85
+
86
+ * `sibling` and `ancestor` finders added [Thomas Walpole]
87
+ * Added ability to pass options to registered servers when setting
88
+ * Added basic built-in driver registrations `:selenium_chrome` and `:selenium_chrome_headless` [Thomas Walpole]
89
+ * Add `and_then` to Capybara RSpec matchers which behaves like the previous `and` compounder. [Thomas Walpole]
90
+ * Compound RSpec expectations with Capybara matchers now run both matchers inside a retry loop rather
91
+ than waiting for one to pass/fail before checking the second. Will make `#or` more performant and confirm
92
+ both conditions are true "simultaneously" for `and`. [Thomas Walpole]
93
+ If you still want the
94
+ * Default filter values are now included in error descriptions [Thomas Walpole]
95
+ * Add `Session#refresh` [Thomas Walpole]
96
+ * Loosened restrictions on where `Session#within_window` can be called from [Thomas Walpole]
97
+ * Switched from `mime-types` dependency to `mini_mime` [Jason Frey]
98
+
99
+ # Version 2.14.4
100
+
101
+ Release date: 2017-06-27
102
+
103
+ ### Fixed
104
+
105
+ * Fix retrieval of session_options for HaveSelector matcher descriptions - Issue #1883
106
+
107
+ # Version 2.14.3
108
+
109
+ Release date: 2017-06-15
110
+
111
+ ### Fixed
112
+
113
+ * Minitest assertions now raise the correct error type - Issue #1879 [Thomas Walpole]
114
+ * Improve flexibility of detecting Chrome headless mode [Thomas Walpole]
115
+
116
+ # Version 2.14.2
117
+
118
+ Release date: 2017-06-09
119
+
120
+ ### Fixed
121
+
122
+ * Workaround for system modals when using headless Chrome now works if the page changes
123
+
124
+ # Version 2.14.1
125
+
126
+ Release date: 2017-06-07
127
+
128
+ ### Fixed
129
+
130
+ * Catch correct error when unexpected system modals are discovered in latest selenium [Thomas Walpole]
131
+ * Update default `puma` server registration to encourage it to run in single mode [Thomas Walpole]
132
+ * Suppress invalid element errors raised while lazily evaluating the results of `all` [Thomas Walpole]
133
+ * Added missing `with_selected` option to the :select selector to match `options`/`with_options` options - Issue #1865 [Bartosz Nowak]
134
+ * Workaround broken system modals when using selenium with headless Chrome
135
+
136
+ # Version 2.14.0
137
+
138
+ Release date: 2017-05-01
139
+
140
+ ### Added
141
+
142
+ * "threadsafe" mode that allows per-session configuration
143
+ * `:type` filter added to the `:fillable_field` selector
144
+ * Proxy methods when using RSpec for `all`/`within` that call either the Capybara::DSL or RSpec matchers
145
+ depending on arguments passed
146
+ * Support for the new errors in selenium-webdriver 3.4
147
+
148
+ ### Fixed
149
+
150
+ * Element#inspect doesn't raise an error on obsolete elements
151
+ * Setting a contenteditable element with Selenium and Chrome 59
152
+ * Workaround a hang while setting the window size when using geckodriver 0.16 and Firefox 53
153
+ * Clicking on url with a blank href goes to the current url when using the RackTest driver
154
+
155
+ # Version 2.13.0
156
+
2
157
  Release date: 2017-03-16
3
158
 
4
159
  ### Added
@@ -7,16 +162,19 @@ Release date: 2017-03-16
7
162
  * rack_test driver supports click on checkboxes and radio buttons to change their states [Thomas Walpole]
8
163
  * Support RSpec equivalent assertions and expectations for MiniTest [Thomas Walpole]
9
164
 
10
- ### Foxed
165
+ ### Fixed
166
+
11
167
  * Editing of content editable children with selenium
12
168
 
13
- #Version 2.12.1
169
+ # Version 2.12.1
170
+
14
171
  Release date: 2017-02-16
15
172
 
16
173
  ### Fixed
17
174
  * Disable lazy Capybara::Results evaluation for JRuby due to ongoing issues
18
175
 
19
- #Version 2.12.0
176
+ # Version 2.12.0
177
+
20
178
  Release date: 2017-01-22
21
179
 
22
180
  ### Added
@@ -35,6 +193,7 @@ Release date: 2017-01-22
35
193
  * `within_element` as an alias of `within` due to RSpec collision
36
194
 
37
195
  ### Fixed
196
+
38
197
  * Fields inside a disabled fieldset are now correctly considered disabled - Issue #1816 [Thomas Walpole]
39
198
  * Lazy Capybara::Results evaluation enabled for JRuby 9.1.6.0+
40
199
  * A driver returning nil for #current_url won't raise an exception when calling #current_path [Dylan Reichstadt]
@@ -42,10 +201,12 @@ Release date: 2017-01-22
42
201
  * RackTest driver no longer modifies the text content of textarea elements in order to behave more like a real browser [Thomas Walpole]
43
202
  * TextQuery (assert_text/have_text/etc) now ignores errors when trying to generate more helpful errors messages so the original error isn't hidden [Thomas Walpole]
44
203
 
45
- #Version 2.11.0
204
+ # Version 2.11.0
205
+
46
206
  Release date: 2016-12-05
47
207
 
48
208
  ### Added
209
+
49
210
  * Options for clearing session/local storage on reset added to the Selenium driver
50
211
  * Window size changes wait for the size to stabilize
51
212
  * Defined return value for most actions
@@ -54,17 +215,21 @@ Release date: 2016-12-05
54
215
  * Capybara::Result#each now returns an `Enumerator` when called without a block - Issue #1777 [Thomas Walpole]
55
216
 
56
217
  ### Fixed
218
+
57
219
  * Selenium driver with Chrome should support multiple file upload [Thomas Walpole]
58
220
  * Fix visible: :hidden with :text option behavior [Thomas Walpole]
59
221
 
60
- #Version 2.10.2
222
+ # Version 2.10.2
223
+
61
224
  Release date: 2016-11-30
62
225
 
63
226
  ### Fixed
227
+
64
228
  * App exceptions with multiple parameter initializers now re-raised correctly - Issue #1785 [Michael Lutsiuk]
65
229
  * Use Addressable::URI when parsing current_path since it's more lenient of technically invalid URLs - Issue #1801 [Marcos Duque, Thomas Walpole]
66
230
 
67
- #Version 2.10.1
231
+ # Version 2.10.1
232
+
68
233
  Release date: 2016-10-08
69
234
 
70
235
  ### Fixed
@@ -72,52 +237,64 @@ Release date: 2016-10-08
72
237
  * Capybara::Result optimization disabled in JRuby due to issue with lazy enumerator evaluation [Thomas Walpole]
73
238
  See: https://github.com/jruby/jruby/issues/4212
74
239
 
75
- #Version 2.10.0
240
+ # Version 2.10.0
241
+
76
242
  Release date: 2016-10-05
77
243
 
78
244
  ### Added
245
+
79
246
  * Select `<button>` elements with descendant images with `alt` attributes matching the locator [Ian Lesperance]
80
247
  * Locator string is optional in selector based matchers [Thomas Walpole]
81
248
  * Selectors can specify their default visible setting [Thomas Walpole]
82
249
  * Selector based finders and matchers can be passed a block to filter the results within the retry behavior [Thomas Walpole]
83
250
 
84
- #Version 2.9.2
251
+ # Version 2.9.2
252
+
85
253
  Release date: 2016-09-29
86
254
 
87
255
  ### Fixed
88
256
  * :label built-in selector finds nested label/control by control id if the label has no 'for' attribute [Thomas Walpole]
89
257
  * Warning issued if an unknown selector type is specified [Thomas Walpole]
90
258
 
91
- #Version 2.9.1
259
+ # Version 2.9.1
260
+
92
261
  Release date: 2016-09-23
93
262
 
94
263
  ### Fixed
264
+
95
265
  * allow_label_click option did not work in some cases with Poltergeist - Issue #1762 [Thomas Walpole]
96
266
  * matches_selector? should have access to all of a selectors options except the count options [Thomas Walpole]
97
267
 
98
- #Version 2.9.0
268
+ # Version 2.9.0
269
+
99
270
  Release date: 2016-09-19
100
271
 
101
272
  ### Fixed
273
+
102
274
  * Issue with rack-test driver and obselete mime-types when using `#attach_file` - Issue #1756 [Thomas Walpole]
103
275
 
104
276
  ### Added
277
+
105
278
  * `:class` option to many of the built-in selectors [Thomas Walpole]
106
279
  * Removed need to specify value when creating `:boolean` filter type in custom selectors [Thomas Walpole]
107
280
  * Filters can now be implemented through the XPath/CSS expressions in custom selectors [Thomas Walpole]
108
281
  * `Element#matches_xpath?` and `Element#matches_css?` [Thomas Walpole]
109
282
 
110
- #Version 2.8.1
283
+ # Version 2.8.1
284
+
111
285
  Release date: 2016-08-25
112
286
 
113
- ###Fixed
287
+ ### Fixed
288
+
114
289
  * Fixed error message from have_text when text is not found but contains regex special characters [Ryunosuke Sato]
115
290
  * Warn when :exact option is passed that has no effect [Thomas Walpole]
116
291
 
117
292
  # Version 2.8.0
293
+
118
294
  Release date: 2016-08-16
119
295
 
120
296
  ### Fixed
297
+
121
298
  * Issue with modals present when closing the page using selenium - Issue #1696 [Jonas Nicklas, Thomas Walpole]
122
299
  * Server errors raised in test code have the cause set to an explanatory exception
123
300
  in rubies that support Exception#cause rather than a confusing ExpectationNotMet - Issue #1719 [Thomas Walpole]
@@ -125,6 +302,7 @@ Release date: 2016-08-16
125
302
  * Fixed setting of unexpectedAlertError now that Selenium will be freezing the Capabilities::DEFAULTS [Thomas Walpole]
126
303
 
127
304
  ### Added
305
+
128
306
  * 'check', 'uncheck', and 'choose' can now optionally click the associated label if the checkbox/radio button is not visible [Thomas Walpole]
129
307
  * Raise error if Capybara.app_host/default_host are specified incorrectly [Thomas Walpole]
130
308
  * Capybara::Selector::FilterSet allows for sharing filter definitions between selectors [Thomas Walpole]
@@ -136,19 +314,22 @@ Release date: 2016-08-16
136
314
  * Support matching on aria-label attribute when finding fields/links/buttons - Issue #1528 [Thomas Walpole]
137
315
  * Optimize Capybara::Result to only apply fields as necessary in common use-case of `.all[idx]` [Thomas Walpole]
138
316
 
139
- #Version 2.7.1
317
+ # Version 2.7.1
318
+
140
319
  Release date: 2016-05-01
141
320
 
142
321
  ### Fixed
322
+
143
323
  * Issue where within_Frame would fail with Selenium if the frame is removed from within itself [Thomas Walpole]
144
324
  * Reset sessions in reverse order so sessions with active servers are reset last - Issue #1692 [Jonas Nicklas, Thomas Walpole]
145
325
 
146
326
  # Version 2.7.0
327
+
147
328
  Release date: 2016-04-07
148
329
 
149
330
  ### Fixed
150
- * Element#visible?/checked?/disabled?/selected? Now return boolean
151
- as expected when using the rack_test driver [Thomas Walpole]
331
+
332
+ * Element#visible?/checked?/disabled?/selected? Now return boolean as expected when using the rack_test driver [Thomas Walpole]
152
333
  * The rack_test driver now considers \<input type="hidden"> elements as non-visible [Thomas Walpole]
153
334
  * A nil locator passed to the built-in html type selectors now behaves consistently, and finds elements of the expected types [Thomas Walpole]
154
335
  * Capybara::Server now searches for available ports on the same interface it binds to [Aaron Stone]
@@ -156,6 +337,7 @@ Release date: 2016-04-07
156
337
  * Warning output if unused parameters are passed to a selector query [Thomas Walpole]
157
338
 
158
339
  ### Added
340
+
159
341
  * Capybara now waits for requests to Capybaras server to complete while restting the session [John Hawthorn, Thomas Walpole]
160
342
  * Capybara.reuse_server option to allow disabling of sharing server instance between sessions [Thomas Walpole]
161
343
  * :multiple filter added to relevant selectors [Thomas Walpole]
@@ -168,22 +350,28 @@ Release date: 2016-04-07
168
350
  save_page/save_screenshot [Thomas Walpole]
169
351
  * :label selector [Thomas Walpole]
170
352
 
171
- #Version 2.6.2
353
+ # Version 2.6.2
354
+
172
355
  Relase date: 2016-01-27
173
356
 
174
357
  ### Fixed
358
+
175
359
  * support for more than just addressable 2.4.0 [Thomas Walpole]
176
360
 
177
361
  # Version 2.6.1
362
+
178
363
  Release date: 2016-01-27
179
364
 
180
365
  ### Fixed
366
+
181
367
  * Add missing require for addressable [Jorge Bejar]
182
368
 
183
369
  # Version 2.6.0
370
+
184
371
  Relase date: 2016-01-17
185
372
 
186
373
  ### Fixed
374
+
187
375
  * Fixed path escaping issue with current_path matchers [Thomas Walpole, Luke Rollans] (Issue #1611)
188
376
  * Fixed circular require [David Rodríguez]
189
377
  * Capybara::RackTest::Form no longer overrides Object#method [David Rodriguez]
@@ -192,6 +380,7 @@ Relase date: 2016-01-17
192
380
 
193
381
 
194
382
  ### Added
383
+
195
384
  * Capybara.modify_selector [Thomas Walpole]
196
385
  * xfeature and ffeature aliases added when using RSpec [Filip Bartuzi]
197
386
  * Selenium driver supports a :clear option to #set to handle different strategies for clearing a field [Thomas Walpole]
@@ -200,15 +389,18 @@ Relase date: 2016-01-17
200
389
  * Modal API methods now default wait time to Capybara.default_max_wait_time [Thomas Walpole]
201
390
 
202
391
  # Version 2.5.0
392
+
203
393
  Release date: 2015-08-25
204
394
 
205
395
  ### Fixed
396
+
206
397
  * Error message now raised correctly when invalid options passed to 'have_text'/'have_content' [Thomas Walpole]
207
398
  * Rack-test driver correctly gets document title when elements on the page have nested title elements (SVG) [Thomas Walpole]
208
399
  * 'save_page' no longer errors when using Capybara.asset_host if the page has no \<head> element [Travis Grathwell]
209
400
  * rack-test driver will ignore clicks on links with href starting with '#' or 'javascript:'
210
401
 
211
402
  ### Added
403
+
212
404
  * has_current_path? and associated asserts/matchers added [Thomas Walpole]
213
405
  * Implement Node#path in selenium driver [Soutaro Matsumoto]
214
406
  * 'using_session' is now nestable [Thomas Walpole]
@@ -226,25 +418,32 @@ Release date: 2015-08-25
226
418
  * Clear field using backspaces in Selenium driver by using `:fill_options => { :clear => :backspace }` [Joe Lencioni]
227
419
 
228
420
  ### Deprecated
421
+
229
422
  * Capybara.default_wait_time deprecated in favor of Capybara.default_max_wait_time to more clearly explain its purpose [Paul Pettengill]
230
423
 
231
- #Version 2.4.4
424
+ # Version 2.4.4
425
+
232
426
  Release date: 2014-10-13
233
427
 
234
428
  ### Fixed
429
+
235
430
  * Test for visit behavior updated [Phil Baker]
236
431
  * Removed concurrency prevention in favor of a note in the README - due to load order issues
237
432
 
238
433
  # Version 2.4.3
434
+
239
435
  Relase date: 2014-09-21
240
436
 
241
437
  ### Fixed
438
+
242
439
  * Update concurrency prevention to match Rails 4.2 behavior
243
440
 
244
441
  # Version 2.4.2
442
+
245
443
  Release date: 2014-09-20
246
444
 
247
445
  ### Fixed
446
+
248
447
  * Prevent concurrency issue when testing Rails app with default test environment [Thomas Walpole]
249
448
  * Tags for windows API tests fixed [Dmitry Vorotilin]
250
449
  * Documentation Fixes [Andrey Botalov]
@@ -279,6 +478,7 @@ Release date: 2014-07-03
279
478
  Release date: 2014-06-02
280
479
 
281
480
  ### Added
481
+
282
482
  * New window management API [Andrey Botalov]
283
483
  * Speed improvement for visible text detection in RackTest [Thomas Walpole]
284
484
  Thanks to Phillipe Creux for instigating this
data/README.md CHANGED
@@ -10,24 +10,14 @@ interact with your app. It is agnostic about the driver running your tests and
10
10
  comes with Rack::Test and Selenium support built in. WebKit is supported
11
11
  through an external gem.
12
12
 
13
- **Need help?** Ask on the mailing list (please do not open an issue on
14
- GitHub): http://groups.google.com/group/ruby-capybara
13
+ ## Support Capybara
15
14
 
16
- **Note: Firefox 48+** If you're using Firefox with selenium-webdriver and want full functionality stay on either Firefox [45.0esr](https://ftp.mozilla.org/pub/firefox/releases/45.0esr/) or [47.0.1](https://ftp.mozilla.org/pub/firefox/releases/47.0.1/).
17
- If using selenium-webdriver 3.0+ this will require configuring your driver with the `marionette: false` option as shown below
15
+ If you and/or your company find value in Capybara and would like to contribute financially to its ongoing maintenance and development, please visit
16
+ <a href="https://www.patreon.com/capybara">Patreon</a>
18
17
 
19
- ```ruby
20
- Capybara.register_driver :selenium do |app|
21
- Capybara::Selenium::Driver.new(
22
- app,
23
- browser: :firefox,
24
- desired_capabilities: Selenium::WebDriver::Remote::Capabilities.firefox(marionette: false)
25
- )
26
- end
27
- ```
28
18
 
29
- Using Firefox 48+ requires geckodriver and selenium-webdriver v3, the combo of which currently has multiple issues and is feature incomplete.
30
- You can read more about the missing features [here](https://github.com/teamcapybara/capybara/issues/1710).
19
+ **Need help?** Ask on the mailing list (please do not open an issue on
20
+ GitHub): http://groups.google.com/group/ruby-capybara
31
21
 
32
22
  ## Table of contents
33
23
 
@@ -67,6 +57,7 @@ You can read more about the missing features [here](https://github.com/teamcapyb
67
57
  - [Beware the XPath // trap](#beware-the-xpath--trap)
68
58
  - [Configuring and adding drivers](#configuring-and-adding-drivers)
69
59
  - [Gotchas:](#gotchas)
60
+ - ["Threadsafe" mode](#threadsafe)
70
61
  - [Development](#development)
71
62
 
72
63
  ## <a name="key-benefits"></a>Key benefits
@@ -87,7 +78,7 @@ Capybara requires Ruby 1.9.3 or later. To install, add this line to your
87
78
  gem 'capybara'
88
79
  ```
89
80
 
90
- **Note:** If using Ruby < 2.0 you will also need to limit the version of mime-types to < 3.0 and the version of rack to < 2.0
81
+ **Note:** If using Ruby < 2.0 you will also need to limit the version of rack to < 2.0
91
82
 
92
83
  If the application that you are testing is a Rails app, add this line to your test helper file:
93
84
 
@@ -105,7 +96,13 @@ Capybara.app = MyRackApp
105
96
  ```
106
97
 
107
98
  If you need to test JavaScript, or if your app interacts with (or is located at)
108
- a remote URL, you'll need to [use a different driver](#drivers).
99
+ a remote URL, you'll need to [use a different driver](#drivers). If using Rails 5.0+, but not using the Rails system tests from 5.1, you'll probably also
100
+ want to swap the "server" used to launch your app to Puma in order to match Rails defaults.
101
+
102
+ ```ruby
103
+ Capybara.server = :puma # Until your setup is working
104
+ Capybara.server = :puma, { Silent: true } # To clean up your test output
105
+ ```
109
106
 
110
107
  ## <a name="using-capybara-with-cucumber"></a>Using Capybara with Cucumber
111
108
 
@@ -139,8 +136,7 @@ Scenario: do something Ajaxy
139
136
  ...
140
137
  ```
141
138
 
142
- There are also explicit `@selenium` and `@rack_test`
143
- tags set up for you.
139
+ There are also explicit tags for each registered driver set up for you (`@selenium`, `@rack_test`, etc).
144
140
 
145
141
  ## <a name="using-capybara-with-rspec"></a>Using Capybara with RSpec
146
142
 
@@ -241,6 +237,9 @@ RSpec.describe "todos/show.html.erb", type: :view do
241
237
  end
242
238
  ```
243
239
 
240
+ **Note: When you require 'capybara/rspec' proxy methods are installed to work around name collisions between Capybara::DSL methods
241
+ `all`/`within` and the identically named built-in RSpec matchers. If you opt not to require 'capybara/rspec' you can install the proxy methods by requiring 'capybara/rspec/matcher_proxies' after requiring RSpec and 'capybara/dsl'**
242
+
244
243
  ## <a name="using-capybara-with-testunit"></a>Using Capybara with Test::Unit
245
244
 
246
245
  * If you are using `Test::Unit`, define a base class for your Capybara tests
@@ -339,7 +338,7 @@ these limitations, you can set up a different default driver for your features.
339
338
  For example if you'd prefer to run everything in Selenium, you could do:
340
339
 
341
340
  ```ruby
342
- Capybara.default_driver = :selenium
341
+ Capybara.default_driver = :selenium # :selenium_chrome and :selenium_chrome_headless are also registered
343
342
  ```
344
343
 
345
344
  However, if you are using RSpec or Cucumber, you may instead want to consider
@@ -388,7 +387,7 @@ See the section on adding and configuring drivers.
388
387
 
389
388
  ### <a name="selenium"></a>Selenium
390
389
 
391
- At the moment, Capybara supports [Selenium 2.0
390
+ At the moment, Capybara supports [Selenium 2.0+
392
391
  (Webdriver)](http://seleniumhq.org/docs/01_introducing_selenium.html#selenium-2-aka-selenium-webdriver),
393
392
  *not* Selenium RC. In order to use Selenium, you'll need to install the
394
393
  `selenium-webdriver` gem, and add it to your Gemfile if you're using bundler.
@@ -550,7 +549,7 @@ If you find yourself needing to use this a lot you may be better off adding a [c
550
549
  ```ruby
551
550
  find_field('First Name'){ |el| el['data-xyz'] == '123' }
552
551
  find("#img_loading"){ |img| img['complete'] == true }
553
- ````
552
+ ```
554
553
 
555
554
  **Note**: `find` will wait for an element to appear on the page, as explained in the
556
555
  Ajax section. If the element does not appear it will raise an error.
@@ -743,6 +742,9 @@ Capybara 1.x, set `Capybara.match` to `:prefer_exact`.
743
742
 
744
743
  ## <a name="transactions-and-database-setup"></a>Transactions and database setup
745
744
 
745
+ **Note:** Rails 5.1+ now "safely" shares the database connection between the app and test threads. Therefore,
746
+ if using Rails 5.1+ you SHOULD be able to ignore this section.
747
+
746
748
  Some Capybara drivers need to run against an actual HTTP server. Capybara takes
747
749
  care of this and starts one for you in the same process as your test, but on
748
750
  another thread. Selenium is one of those drivers, whereas RackTest is not.
@@ -892,7 +894,7 @@ To permanently switch the current session to a different session
892
894
 
893
895
  ```ruby
894
896
  Capybara.session_name = "some other session"
895
- ````
897
+ ```
896
898
 
897
899
  ### <a name="using-sessions-manually"></a>Using sessions manually
898
900
 
@@ -1045,6 +1047,35 @@ additional info about how the underlying driver can be configured.
1045
1047
  are testing for specific server errors and using multiple sessions make sure to test for the
1046
1048
  errors using the initial session (usually :default)
1047
1049
 
1050
+ ## <a name="threadsafe"></a>"Threadsafe" mode - BETA - may change
1051
+
1052
+ In normal mode most of Capybara's configuration options are global settings which can cause issues
1053
+ if using multiple sessions and wanting to change a setting for only one of the sessions. To provide
1054
+ support for this type of usage Capybara now provides a "threadsafe" mode which can be enabled by setting
1055
+
1056
+ ```ruby
1057
+ Capybara.threadsafe = true
1058
+ ```
1059
+
1060
+ This setting can only be changed before any sessions have been created. In "threadsafe" mode the following
1061
+ behaviors of Capybara change
1062
+
1063
+ * Most options can now be set on a session. These can either be set at session creation time or after, and
1064
+ default to the global options at the time of session creation. Options which are NOT session specific are
1065
+ `app`, `reuse_server`, `default_driver`, `javascript_driver`, and (obviously) `threadsafe`. Any drivers and servers
1066
+ registered through `register_driver` and `register_server` are also global.
1067
+
1068
+ ```ruby
1069
+ my_session = Capybara::Session.new(:driver, some_app) do |config|
1070
+ config.automatic_label_click = true # only set for my_session
1071
+ end
1072
+ my_session.config.default_max_wait_time = 10 # only set for my_session
1073
+ Capybara.default_max_wait_time = 2 # will not change the default_max_wait in my_session
1074
+ ```
1075
+
1076
+ * `current_driver` and `session_name` are thread specific. This means that `using_session` and
1077
+ `using_driver` also only affect the current thread.
1078
+
1048
1079
  ## <a name="development"></a>Development
1049
1080
 
1050
1081
  To set up a development environment, simply do: