capybara 2.13.0 → 2.14.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.
- checksums.yaml +4 -4
- data/History.md +82 -17
- data/README.md +29 -0
- data/lib/capybara.rb +81 -116
- data/lib/capybara/config.rb +121 -0
- data/lib/capybara/cucumber.rb +1 -0
- data/lib/capybara/driver/base.rb +6 -0
- data/lib/capybara/dsl.rb +1 -3
- data/lib/capybara/helpers.rb +3 -3
- data/lib/capybara/node/actions.rb +2 -2
- data/lib/capybara/node/base.rb +7 -2
- data/lib/capybara/node/element.rb +7 -1
- data/lib/capybara/node/finders.rb +13 -3
- data/lib/capybara/node/matchers.rb +15 -4
- data/lib/capybara/node/simple.rb +5 -0
- data/lib/capybara/queries/base_query.rb +8 -3
- data/lib/capybara/queries/selector_query.rb +11 -9
- data/lib/capybara/queries/text_query.rb +9 -4
- data/lib/capybara/rack_test/browser.rb +8 -5
- data/lib/capybara/rspec.rb +3 -1
- data/lib/capybara/rspec/matcher_proxies.rb +41 -0
- data/lib/capybara/rspec/matchers.rb +19 -5
- data/lib/capybara/selector.rb +13 -4
- data/lib/capybara/selector/selector.rb +3 -3
- data/lib/capybara/selenium/driver.rb +20 -6
- data/lib/capybara/selenium/node.rb +6 -2
- data/lib/capybara/server.rb +6 -5
- data/lib/capybara/session.rb +71 -14
- data/lib/capybara/session/config.rb +100 -0
- data/lib/capybara/spec/public/test.js +1 -1
- data/lib/capybara/spec/session/all_spec.rb +11 -0
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +24 -8
- data/lib/capybara/spec/session/fill_in_spec.rb +6 -0
- data/lib/capybara/spec/session/find_field_spec.rb +1 -0
- data/lib/capybara/spec/session/find_spec.rb +4 -3
- data/lib/capybara/spec/session/has_selector_spec.rb +1 -3
- data/lib/capybara/spec/session/node_spec.rb +23 -17
- data/lib/capybara/spec/session/reset_session_spec.rb +1 -1
- data/lib/capybara/spec/session/window/become_closed_spec.rb +4 -4
- data/lib/capybara/spec/spec_helper.rb +22 -0
- data/lib/capybara/spec/views/form.erb +6 -1
- data/lib/capybara/spec/views/with_html.erb +1 -0
- data/lib/capybara/version.rb +1 -1
- data/lib/capybara/window.rb +1 -1
- data/spec/capybara_spec.rb +14 -2
- data/spec/dsl_spec.rb +1 -0
- data/spec/per_session_config_spec.rb +67 -0
- data/spec/rspec/shared_spec_matchers.rb +2 -2
- data/spec/rspec/views_spec.rb +4 -0
- data/spec/rspec_spec.rb +77 -0
- data/spec/session_spec.rb +44 -0
- data/spec/shared_selenium_session.rb +9 -0
- data/spec/spec_helper.rb +4 -0
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95059b9953d4a957739d739dadd55c294e39046b
|
4
|
+
data.tar.gz: fd4c944ff4a42c21661a1b6d39a243032b4ea7a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b3bfd9f5c365c483b058461d58abe63e58f162b051e739794d30f69ea84e93ed7993245dfffc9ca48f96270022aa40df5e32a60bb6df29bbc93d85c0a7f714d3
|
7
|
+
data.tar.gz: bdb337934a2477819f03e9cfbbd683832a4d69775f6a688e5098079b48fc0ef630de10a8a5e7e78198ac9144cc2afe063dfeb9b73a15d73204688b789358d4a8
|
data/History.md
CHANGED
@@ -1,4 +1,24 @@
|
|
1
|
-
#Version 2.
|
1
|
+
# Version 2.14.0
|
2
|
+
|
3
|
+
Release date: 2017-05-01
|
4
|
+
|
5
|
+
### Added
|
6
|
+
|
7
|
+
* "threadsafe" mode that allows per-session configuration
|
8
|
+
* `:type` filter added to the `:fillable_field` selector
|
9
|
+
* Proxy methods when using RSpec for `all`/`within` that call either the Capybara::DSL or RSpec matchers
|
10
|
+
depending on arguments passed
|
11
|
+
* Support for the new errors in selenium-webdriver 3.4
|
12
|
+
|
13
|
+
### Fixed
|
14
|
+
|
15
|
+
* Element#inspect doesn't raise an error on obsolete elements
|
16
|
+
* Setting a contenteditable element with Selenium and Chrome 59
|
17
|
+
* Workaround a hang while setting the window size when using geckodriver 0.16 and Firefox 53
|
18
|
+
* Clicking on url with a blank href goes to the current url when using the RackTest driver
|
19
|
+
|
20
|
+
# Version 2.13.0
|
21
|
+
|
2
22
|
Release date: 2017-03-16
|
3
23
|
|
4
24
|
### Added
|
@@ -7,16 +27,19 @@ Release date: 2017-03-16
|
|
7
27
|
* rack_test driver supports click on checkboxes and radio buttons to change their states [Thomas Walpole]
|
8
28
|
* Support RSpec equivalent assertions and expectations for MiniTest [Thomas Walpole]
|
9
29
|
|
10
|
-
###
|
30
|
+
### Fixed
|
31
|
+
|
11
32
|
* Editing of content editable children with selenium
|
12
33
|
|
13
|
-
#Version 2.12.1
|
34
|
+
# Version 2.12.1
|
35
|
+
|
14
36
|
Release date: 2017-02-16
|
15
37
|
|
16
38
|
### Fixed
|
17
39
|
* Disable lazy Capybara::Results evaluation for JRuby due to ongoing issues
|
18
40
|
|
19
|
-
#Version 2.12.0
|
41
|
+
# Version 2.12.0
|
42
|
+
|
20
43
|
Release date: 2017-01-22
|
21
44
|
|
22
45
|
### Added
|
@@ -35,6 +58,7 @@ Release date: 2017-01-22
|
|
35
58
|
* `within_element` as an alias of `within` due to RSpec collision
|
36
59
|
|
37
60
|
### Fixed
|
61
|
+
|
38
62
|
* Fields inside a disabled fieldset are now correctly considered disabled - Issue #1816 [Thomas Walpole]
|
39
63
|
* Lazy Capybara::Results evaluation enabled for JRuby 9.1.6.0+
|
40
64
|
* A driver returning nil for #current_url won't raise an exception when calling #current_path [Dylan Reichstadt]
|
@@ -42,10 +66,12 @@ Release date: 2017-01-22
|
|
42
66
|
* RackTest driver no longer modifies the text content of textarea elements in order to behave more like a real browser [Thomas Walpole]
|
43
67
|
* 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
68
|
|
45
|
-
#Version 2.11.0
|
69
|
+
# Version 2.11.0
|
70
|
+
|
46
71
|
Release date: 2016-12-05
|
47
72
|
|
48
73
|
### Added
|
74
|
+
|
49
75
|
* Options for clearing session/local storage on reset added to the Selenium driver
|
50
76
|
* Window size changes wait for the size to stabilize
|
51
77
|
* Defined return value for most actions
|
@@ -54,17 +80,21 @@ Release date: 2016-12-05
|
|
54
80
|
* Capybara::Result#each now returns an `Enumerator` when called without a block - Issue #1777 [Thomas Walpole]
|
55
81
|
|
56
82
|
### Fixed
|
83
|
+
|
57
84
|
* Selenium driver with Chrome should support multiple file upload [Thomas Walpole]
|
58
85
|
* Fix visible: :hidden with :text option behavior [Thomas Walpole]
|
59
86
|
|
60
|
-
#Version 2.10.2
|
87
|
+
# Version 2.10.2
|
88
|
+
|
61
89
|
Release date: 2016-11-30
|
62
90
|
|
63
91
|
### Fixed
|
92
|
+
|
64
93
|
* App exceptions with multiple parameter initializers now re-raised correctly - Issue #1785 [Michael Lutsiuk]
|
65
94
|
* Use Addressable::URI when parsing current_path since it's more lenient of technically invalid URLs - Issue #1801 [Marcos Duque, Thomas Walpole]
|
66
95
|
|
67
|
-
#Version 2.10.1
|
96
|
+
# Version 2.10.1
|
97
|
+
|
68
98
|
Release date: 2016-10-08
|
69
99
|
|
70
100
|
### Fixed
|
@@ -72,52 +102,64 @@ Release date: 2016-10-08
|
|
72
102
|
* Capybara::Result optimization disabled in JRuby due to issue with lazy enumerator evaluation [Thomas Walpole]
|
73
103
|
See: https://github.com/jruby/jruby/issues/4212
|
74
104
|
|
75
|
-
#Version 2.10.0
|
105
|
+
# Version 2.10.0
|
106
|
+
|
76
107
|
Release date: 2016-10-05
|
77
108
|
|
78
109
|
### Added
|
110
|
+
|
79
111
|
* Select `<button>` elements with descendant images with `alt` attributes matching the locator [Ian Lesperance]
|
80
112
|
* Locator string is optional in selector based matchers [Thomas Walpole]
|
81
113
|
* Selectors can specify their default visible setting [Thomas Walpole]
|
82
114
|
* Selector based finders and matchers can be passed a block to filter the results within the retry behavior [Thomas Walpole]
|
83
115
|
|
84
|
-
#Version 2.9.2
|
116
|
+
# Version 2.9.2
|
117
|
+
|
85
118
|
Release date: 2016-09-29
|
86
119
|
|
87
120
|
### Fixed
|
88
121
|
* :label built-in selector finds nested label/control by control id if the label has no 'for' attribute [Thomas Walpole]
|
89
122
|
* Warning issued if an unknown selector type is specified [Thomas Walpole]
|
90
123
|
|
91
|
-
#Version 2.9.1
|
124
|
+
# Version 2.9.1
|
125
|
+
|
92
126
|
Release date: 2016-09-23
|
93
127
|
|
94
128
|
### Fixed
|
129
|
+
|
95
130
|
* allow_label_click option did not work in some cases with Poltergeist - Issue #1762 [Thomas Walpole]
|
96
131
|
* matches_selector? should have access to all of a selectors options except the count options [Thomas Walpole]
|
97
132
|
|
98
|
-
#Version 2.9.0
|
133
|
+
# Version 2.9.0
|
134
|
+
|
99
135
|
Release date: 2016-09-19
|
100
136
|
|
101
137
|
### Fixed
|
138
|
+
|
102
139
|
* Issue with rack-test driver and obselete mime-types when using `#attach_file` - Issue #1756 [Thomas Walpole]
|
103
140
|
|
104
141
|
### Added
|
142
|
+
|
105
143
|
* `:class` option to many of the built-in selectors [Thomas Walpole]
|
106
144
|
* Removed need to specify value when creating `:boolean` filter type in custom selectors [Thomas Walpole]
|
107
145
|
* Filters can now be implemented through the XPath/CSS expressions in custom selectors [Thomas Walpole]
|
108
146
|
* `Element#matches_xpath?` and `Element#matches_css?` [Thomas Walpole]
|
109
147
|
|
110
|
-
#Version 2.8.1
|
148
|
+
# Version 2.8.1
|
149
|
+
|
111
150
|
Release date: 2016-08-25
|
112
151
|
|
113
152
|
###Fixed
|
153
|
+
|
114
154
|
* Fixed error message from have_text when text is not found but contains regex special characters [Ryunosuke Sato]
|
115
155
|
* Warn when :exact option is passed that has no effect [Thomas Walpole]
|
116
156
|
|
117
157
|
# Version 2.8.0
|
158
|
+
|
118
159
|
Release date: 2016-08-16
|
119
160
|
|
120
161
|
### Fixed
|
162
|
+
|
121
163
|
* Issue with modals present when closing the page using selenium - Issue #1696 [Jonas Nicklas, Thomas Walpole]
|
122
164
|
* Server errors raised in test code have the cause set to an explanatory exception
|
123
165
|
in rubies that support Exception#cause rather than a confusing ExpectationNotMet - Issue #1719 [Thomas Walpole]
|
@@ -125,6 +167,7 @@ Release date: 2016-08-16
|
|
125
167
|
* Fixed setting of unexpectedAlertError now that Selenium will be freezing the Capabilities::DEFAULTS [Thomas Walpole]
|
126
168
|
|
127
169
|
### Added
|
170
|
+
|
128
171
|
* 'check', 'uncheck', and 'choose' can now optionally click the associated label if the checkbox/radio button is not visible [Thomas Walpole]
|
129
172
|
* Raise error if Capybara.app_host/default_host are specified incorrectly [Thomas Walpole]
|
130
173
|
* Capybara::Selector::FilterSet allows for sharing filter definitions between selectors [Thomas Walpole]
|
@@ -136,19 +179,22 @@ Release date: 2016-08-16
|
|
136
179
|
* Support matching on aria-label attribute when finding fields/links/buttons - Issue #1528 [Thomas Walpole]
|
137
180
|
* Optimize Capybara::Result to only apply fields as necessary in common use-case of `.all[idx]` [Thomas Walpole]
|
138
181
|
|
139
|
-
#Version 2.7.1
|
182
|
+
# Version 2.7.1
|
183
|
+
|
140
184
|
Release date: 2016-05-01
|
141
185
|
|
142
186
|
### Fixed
|
187
|
+
|
143
188
|
* Issue where within_Frame would fail with Selenium if the frame is removed from within itself [Thomas Walpole]
|
144
189
|
* Reset sessions in reverse order so sessions with active servers are reset last - Issue #1692 [Jonas Nicklas, Thomas Walpole]
|
145
190
|
|
146
191
|
# Version 2.7.0
|
192
|
+
|
147
193
|
Release date: 2016-04-07
|
148
194
|
|
149
195
|
### Fixed
|
150
|
-
|
151
|
-
|
196
|
+
|
197
|
+
* Element#visible?/checked?/disabled?/selected? Now return boolean as expected when using the rack_test driver [Thomas Walpole]
|
152
198
|
* The rack_test driver now considers \<input type="hidden"> elements as non-visible [Thomas Walpole]
|
153
199
|
* A nil locator passed to the built-in html type selectors now behaves consistently, and finds elements of the expected types [Thomas Walpole]
|
154
200
|
* Capybara::Server now searches for available ports on the same interface it binds to [Aaron Stone]
|
@@ -156,6 +202,7 @@ Release date: 2016-04-07
|
|
156
202
|
* Warning output if unused parameters are passed to a selector query [Thomas Walpole]
|
157
203
|
|
158
204
|
### Added
|
205
|
+
|
159
206
|
* Capybara now waits for requests to Capybaras server to complete while restting the session [John Hawthorn, Thomas Walpole]
|
160
207
|
* Capybara.reuse_server option to allow disabling of sharing server instance between sessions [Thomas Walpole]
|
161
208
|
* :multiple filter added to relevant selectors [Thomas Walpole]
|
@@ -168,22 +215,28 @@ Release date: 2016-04-07
|
|
168
215
|
save_page/save_screenshot [Thomas Walpole]
|
169
216
|
* :label selector [Thomas Walpole]
|
170
217
|
|
171
|
-
#Version 2.6.2
|
218
|
+
# Version 2.6.2
|
219
|
+
|
172
220
|
Relase date: 2016-01-27
|
173
221
|
|
174
222
|
### Fixed
|
223
|
+
|
175
224
|
* support for more than just addressable 2.4.0 [Thomas Walpole]
|
176
225
|
|
177
226
|
# Version 2.6.1
|
227
|
+
|
178
228
|
Release date: 2016-01-27
|
179
229
|
|
180
230
|
### Fixed
|
231
|
+
|
181
232
|
* Add missing require for addressable [Jorge Bejar]
|
182
233
|
|
183
234
|
# Version 2.6.0
|
235
|
+
|
184
236
|
Relase date: 2016-01-17
|
185
237
|
|
186
238
|
### Fixed
|
239
|
+
|
187
240
|
* Fixed path escaping issue with current_path matchers [Thomas Walpole, Luke Rollans] (Issue #1611)
|
188
241
|
* Fixed circular require [David Rodríguez]
|
189
242
|
* Capybara::RackTest::Form no longer overrides Object#method [David Rodriguez]
|
@@ -192,6 +245,7 @@ Relase date: 2016-01-17
|
|
192
245
|
|
193
246
|
|
194
247
|
### Added
|
248
|
+
|
195
249
|
* Capybara.modify_selector [Thomas Walpole]
|
196
250
|
* xfeature and ffeature aliases added when using RSpec [Filip Bartuzi]
|
197
251
|
* Selenium driver supports a :clear option to #set to handle different strategies for clearing a field [Thomas Walpole]
|
@@ -200,15 +254,18 @@ Relase date: 2016-01-17
|
|
200
254
|
* Modal API methods now default wait time to Capybara.default_max_wait_time [Thomas Walpole]
|
201
255
|
|
202
256
|
# Version 2.5.0
|
257
|
+
|
203
258
|
Release date: 2015-08-25
|
204
259
|
|
205
260
|
### Fixed
|
261
|
+
|
206
262
|
* Error message now raised correctly when invalid options passed to 'have_text'/'have_content' [Thomas Walpole]
|
207
263
|
* Rack-test driver correctly gets document title when elements on the page have nested title elements (SVG) [Thomas Walpole]
|
208
264
|
* 'save_page' no longer errors when using Capybara.asset_host if the page has no \<head> element [Travis Grathwell]
|
209
265
|
* rack-test driver will ignore clicks on links with href starting with '#' or 'javascript:'
|
210
266
|
|
211
267
|
### Added
|
268
|
+
|
212
269
|
* has_current_path? and associated asserts/matchers added [Thomas Walpole]
|
213
270
|
* Implement Node#path in selenium driver [Soutaro Matsumoto]
|
214
271
|
* 'using_session' is now nestable [Thomas Walpole]
|
@@ -226,25 +283,32 @@ Release date: 2015-08-25
|
|
226
283
|
* Clear field using backspaces in Selenium driver by using `:fill_options => { :clear => :backspace }` [Joe Lencioni]
|
227
284
|
|
228
285
|
### Deprecated
|
286
|
+
|
229
287
|
* Capybara.default_wait_time deprecated in favor of Capybara.default_max_wait_time to more clearly explain its purpose [Paul Pettengill]
|
230
288
|
|
231
|
-
#Version 2.4.4
|
289
|
+
# Version 2.4.4
|
290
|
+
|
232
291
|
Release date: 2014-10-13
|
233
292
|
|
234
293
|
### Fixed
|
294
|
+
|
235
295
|
* Test for visit behavior updated [Phil Baker]
|
236
296
|
* Removed concurrency prevention in favor of a note in the README - due to load order issues
|
237
297
|
|
238
298
|
# Version 2.4.3
|
299
|
+
|
239
300
|
Relase date: 2014-09-21
|
240
301
|
|
241
302
|
### Fixed
|
303
|
+
|
242
304
|
* Update concurrency prevention to match Rails 4.2 behavior
|
243
305
|
|
244
306
|
# Version 2.4.2
|
307
|
+
|
245
308
|
Release date: 2014-09-20
|
246
309
|
|
247
310
|
### Fixed
|
311
|
+
|
248
312
|
* Prevent concurrency issue when testing Rails app with default test environment [Thomas Walpole]
|
249
313
|
* Tags for windows API tests fixed [Dmitry Vorotilin]
|
250
314
|
* Documentation Fixes [Andrey Botalov]
|
@@ -279,6 +343,7 @@ Release date: 2014-07-03
|
|
279
343
|
Release date: 2014-06-02
|
280
344
|
|
281
345
|
### Added
|
346
|
+
|
282
347
|
* New window management API [Andrey Botalov]
|
283
348
|
* Speed improvement for visible text detection in RackTest [Thomas Walpole]
|
284
349
|
Thanks to Phillipe Creux for instigating this
|
data/README.md
CHANGED
@@ -67,6 +67,7 @@ You can read more about the missing features [here](https://github.com/teamcapyb
|
|
67
67
|
- [Beware the XPath // trap](#beware-the-xpath--trap)
|
68
68
|
- [Configuring and adding drivers](#configuring-and-adding-drivers)
|
69
69
|
- [Gotchas:](#gotchas)
|
70
|
+
- ["Threadsafe" mode](#threadsafe)
|
70
71
|
- [Development](#development)
|
71
72
|
|
72
73
|
## <a name="key-benefits"></a>Key benefits
|
@@ -241,6 +242,9 @@ RSpec.describe "todos/show.html.erb", type: :view do
|
|
241
242
|
end
|
242
243
|
```
|
243
244
|
|
245
|
+
**Note: When you require 'capybara/rspec' proxy methods are installed to work around name collisions between Capybara::DSL methods
|
246
|
+
`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'**
|
247
|
+
|
244
248
|
## <a name="using-capybara-with-testunit"></a>Using Capybara with Test::Unit
|
245
249
|
|
246
250
|
* If you are using `Test::Unit`, define a base class for your Capybara tests
|
@@ -1045,6 +1049,31 @@ additional info about how the underlying driver can be configured.
|
|
1045
1049
|
are testing for specific server errors and using multiple sessions make sure to test for the
|
1046
1050
|
errors using the initial session (usually :default)
|
1047
1051
|
|
1052
|
+
## <a name="threadsafe"></a>"Threadsafe" mode - BETA - may change
|
1053
|
+
|
1054
|
+
In normal mode most of Capybara's configuration options are global settings which can cause issues
|
1055
|
+
if using multiple sessions and wanting to change a setting for only one of the sessions. To provide
|
1056
|
+
support for this type of usage Capybara now provides a "threadsafe" mode which can be enabled by setting
|
1057
|
+
|
1058
|
+
Capybara.threadsafe = true
|
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
|
+
my_session = Capybara::Session.new(:driver, some_app) do |config|
|
1069
|
+
config.automatic_label_click = true # only set for my_session
|
1070
|
+
end
|
1071
|
+
my_session.config.default_max_wait_time = 10 # only set for my_session
|
1072
|
+
Capybara.default_max_wait_time = 2 # will not change the default_max_wait in my_session
|
1073
|
+
|
1074
|
+
* `current_driver` and `session_name` are thread specific. This means that `using_session' and
|
1075
|
+
`using_driver` also only affect the current thread.
|
1076
|
+
|
1048
1077
|
## <a name="development"></a>Development
|
1049
1078
|
|
1050
1079
|
To set up a development environment, simply do:
|
data/lib/capybara.rb
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
require 'timeout'
|
3
3
|
require 'nokogiri'
|
4
4
|
require 'xpath'
|
5
|
+
require 'forwardable'
|
6
|
+
require 'capybara/config'
|
5
7
|
|
6
8
|
module Capybara
|
7
9
|
class CapybaraError < StandardError; end
|
@@ -19,18 +21,41 @@ module Capybara
|
|
19
21
|
class WindowError < CapybaraError; end
|
20
22
|
class ReadOnlyElementError < CapybaraError; end
|
21
23
|
|
24
|
+
|
22
25
|
class << self
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
26
|
+
extend Forwardable
|
27
|
+
|
28
|
+
# DelegateCapybara global configurations
|
29
|
+
# @!method app
|
30
|
+
# See {Capybara#configure}
|
31
|
+
# @!method reuse_server
|
32
|
+
# See {Capybara#configure}
|
33
|
+
# @!method threadsafe
|
34
|
+
# See {Capybara#configure}
|
35
|
+
# @!method server
|
36
|
+
# See {Capybara#configure}
|
37
|
+
# @!method default_driver
|
38
|
+
# See {Capybara#configure}
|
39
|
+
# @!method javascript_driver
|
40
|
+
# See {Capybara#configure}
|
41
|
+
Config::OPTIONS.each do |method|
|
42
|
+
def_delegators :config, method, "#{method}="
|
43
|
+
end
|
44
|
+
|
45
|
+
# Delegate Capybara global configurations
|
46
|
+
# @!method default_selector
|
47
|
+
# See {Capybara#configure}
|
48
|
+
# @!method default_max_wait_time
|
49
|
+
# See {Capybara#configure}
|
50
|
+
# @!method app_host
|
51
|
+
# See {Capybara#configure}
|
52
|
+
# @!method always_include_port
|
53
|
+
# See {Capybara#configure}
|
54
|
+
# @!method wait_on_first_by_default
|
55
|
+
# See {Capybara#configure}
|
56
|
+
SessionConfig::OPTIONS.each do |method|
|
57
|
+
def_delegators :config, method, "#{method}="
|
58
|
+
end
|
34
59
|
|
35
60
|
##
|
36
61
|
#
|
@@ -58,6 +83,9 @@ module Capybara
|
|
58
83
|
# [automatic_label_click = Boolean] Whether Node#choose, Node#check, Node#uncheck will attempt to click the associated label element if the checkbox/radio button are non-visible (Default: false)
|
59
84
|
# [enable_aria_label = Boolean] Whether fields, links, and buttons will match against aria-label attribute (Default: false)
|
60
85
|
# [reuse_server = Boolean] Reuse the server thread between multiple sessions using the same app object (Default: true)
|
86
|
+
# [threadsafe = Boolean] Whether sessions can be configured individually (Default: false)
|
87
|
+
# [server = Symbol] The name of the registered server to use when running the app under test (Default: :webrick)
|
88
|
+
#
|
61
89
|
# === DSL Options
|
62
90
|
#
|
63
91
|
# when using capybara/dsl, the following options are also available:
|
@@ -66,7 +94,7 @@ module Capybara
|
|
66
94
|
# [javascript_driver = Symbol] The name of a driver to use for JavaScript enabled tests. (Default: :selenium)
|
67
95
|
#
|
68
96
|
def configure
|
69
|
-
yield
|
97
|
+
yield ConfigureDeprecator.new(config)
|
70
98
|
end
|
71
99
|
|
72
100
|
##
|
@@ -163,45 +191,6 @@ module Capybara
|
|
163
191
|
@servers ||= {}
|
164
192
|
end
|
165
193
|
|
166
|
-
##
|
167
|
-
#
|
168
|
-
# Register a proc that Capybara will call to run the Rack application.
|
169
|
-
#
|
170
|
-
# Capybara.server do |app, port, host|
|
171
|
-
# require 'rack/handler/mongrel'
|
172
|
-
# Rack::Handler::Mongrel.run(app, :Port => port)
|
173
|
-
# end
|
174
|
-
#
|
175
|
-
# By default, Capybara will try to run webrick.
|
176
|
-
#
|
177
|
-
# @yield [app, port, host] This block receives a rack app, port, and host/ip and should run a Rack handler
|
178
|
-
#
|
179
|
-
def server(&block)
|
180
|
-
if block_given?
|
181
|
-
warn "DEPRECATED: Passing a block to Capybara::server is deprecated, please use Capybara::register_server instead"
|
182
|
-
@server = block
|
183
|
-
else
|
184
|
-
@server
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
##
|
189
|
-
#
|
190
|
-
# Set the server to use.
|
191
|
-
#
|
192
|
-
# Capybara.server = :webrick
|
193
|
-
#
|
194
|
-
# @param [Symbol] name Name of the server type to use
|
195
|
-
# @see register_server
|
196
|
-
#
|
197
|
-
def server=(name)
|
198
|
-
@server = if name.respond_to? :call
|
199
|
-
name
|
200
|
-
else
|
201
|
-
servers[name.to_sym]
|
202
|
-
end
|
203
|
-
end
|
204
|
-
|
205
194
|
##
|
206
195
|
#
|
207
196
|
# Wraps the given string, which should contain an HTML document or fragment
|
@@ -251,29 +240,25 @@ module Capybara
|
|
251
240
|
servers[:webrick].call(app, port, server_host)
|
252
241
|
end
|
253
242
|
|
254
|
-
##
|
255
|
-
#
|
256
|
-
# @return [Symbol] The name of the driver to use by default
|
257
|
-
#
|
258
|
-
def default_driver
|
259
|
-
@default_driver || :rack_test
|
260
|
-
end
|
261
|
-
|
262
243
|
##
|
263
244
|
#
|
264
245
|
# @return [Symbol] The name of the driver currently in use
|
265
246
|
#
|
266
247
|
def current_driver
|
267
|
-
|
248
|
+
if threadsafe
|
249
|
+
Thread.current['capybara_current_driver']
|
250
|
+
else
|
251
|
+
@current_driver
|
252
|
+
end || default_driver
|
268
253
|
end
|
269
254
|
alias_method :mode, :current_driver
|
270
255
|
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
256
|
+
def current_driver=(name)
|
257
|
+
if threadsafe
|
258
|
+
Thread.current['capybara_current_driver'] = name
|
259
|
+
else
|
260
|
+
@current_driver = name
|
261
|
+
end
|
277
262
|
end
|
278
263
|
|
279
264
|
##
|
@@ -281,7 +266,7 @@ module Capybara
|
|
281
266
|
# Use the default driver as the current driver
|
282
267
|
#
|
283
268
|
def use_default_driver
|
284
|
-
|
269
|
+
self.current_driver = nil
|
285
270
|
end
|
286
271
|
|
287
272
|
##
|
@@ -293,15 +278,7 @@ module Capybara
|
|
293
278
|
Capybara.current_driver = driver
|
294
279
|
yield
|
295
280
|
ensure
|
296
|
-
|
297
|
-
end
|
298
|
-
|
299
|
-
##
|
300
|
-
#
|
301
|
-
# @return [String] The IP address bound by default server
|
302
|
-
#
|
303
|
-
def server_host
|
304
|
-
@server_host || '127.0.0.1'
|
281
|
+
self.current_driver = previous_driver
|
305
282
|
end
|
306
283
|
|
307
284
|
##
|
@@ -344,7 +321,19 @@ module Capybara
|
|
344
321
|
# @return [Symbol] The name of the currently used session.
|
345
322
|
#
|
346
323
|
def session_name
|
347
|
-
|
324
|
+
if threadsafe
|
325
|
+
Thread.current['capybara_session_name'] ||= :default
|
326
|
+
else
|
327
|
+
@session_name ||= :default
|
328
|
+
end
|
329
|
+
end
|
330
|
+
|
331
|
+
def session_name=(name)
|
332
|
+
if threadsafe
|
333
|
+
Thread.current['capybara_session_name'] = name
|
334
|
+
else
|
335
|
+
@session_name = name
|
336
|
+
end
|
348
337
|
end
|
349
338
|
|
350
339
|
##
|
@@ -352,11 +341,19 @@ module Capybara
|
|
352
341
|
# Yield a block using a specific session name.
|
353
342
|
#
|
354
343
|
def using_session(name)
|
355
|
-
|
344
|
+
previous_session_info = {
|
345
|
+
session_name: session_name,
|
346
|
+
current_driver: current_driver,
|
347
|
+
app: app
|
348
|
+
}
|
356
349
|
self.session_name = name
|
357
350
|
yield
|
358
351
|
ensure
|
359
|
-
self.session_name =
|
352
|
+
self.session_name = previous_session_info[:session_name]
|
353
|
+
if threadsafe
|
354
|
+
self.current_driver = previous_session_info[:current_driver]
|
355
|
+
self.app = previous_session_info[:app]
|
356
|
+
end
|
360
357
|
end
|
361
358
|
|
362
359
|
##
|
@@ -374,32 +371,8 @@ module Capybara
|
|
374
371
|
end
|
375
372
|
end
|
376
373
|
|
377
|
-
|
378
|
-
|
379
|
-
deprecate('default_wait_time', 'default_max_wait_time', true)
|
380
|
-
default_max_wait_time
|
381
|
-
end
|
382
|
-
|
383
|
-
# @deprecated Use default_max_wait_time= instead
|
384
|
-
def default_wait_time=(t)
|
385
|
-
deprecate('default_wait_time=', 'default_max_wait_time=')
|
386
|
-
self.default_max_wait_time = t
|
387
|
-
end
|
388
|
-
|
389
|
-
def save_and_open_page_path=(path)
|
390
|
-
warn "DEPRECATED: #save_and_open_page_path is deprecated, please use #save_path instead. \n"\
|
391
|
-
"Note: Behavior is slightly different with relative paths - see documentation" unless path.nil?
|
392
|
-
@save_and_open_page_path = path
|
393
|
-
end
|
394
|
-
|
395
|
-
def app_host=(url)
|
396
|
-
raise ArgumentError.new("Capybara.app_host should be set to a url (http://www.example.com)") unless url.nil? || (url =~ URI::Parser.new.make_regexp)
|
397
|
-
@app_host = url
|
398
|
-
end
|
399
|
-
|
400
|
-
def default_host=(url)
|
401
|
-
raise ArgumentError.new("Capybara.default_host should be set to a url (http://www.example.com)") unless url.nil? || (url =~ URI::Parser.new.make_regexp)
|
402
|
-
@default_host = url
|
374
|
+
def session_options
|
375
|
+
config.session_options
|
403
376
|
end
|
404
377
|
|
405
378
|
def included(base)
|
@@ -407,18 +380,10 @@ module Capybara
|
|
407
380
|
warn "`include Capybara` is deprecated. Please use `include Capybara::DSL` instead."
|
408
381
|
end
|
409
382
|
|
410
|
-
def reuse_server=(bool)
|
411
|
-
warn "Capybara.reuse_server == false is a BETA feature and may change in a future version" unless bool
|
412
|
-
@reuse_server = bool
|
413
|
-
end
|
414
|
-
|
415
|
-
def deprecate(method, alternate_method, once=false)
|
416
|
-
@deprecation_notified ||= {}
|
417
|
-
warn "DEPRECATED: ##{method} is deprecated, please use ##{alternate_method} instead" unless once and @deprecation_notified[method]
|
418
|
-
@deprecation_notified[method]=true
|
419
|
-
end
|
420
|
-
|
421
383
|
private
|
384
|
+
def config
|
385
|
+
@config ||= Capybara::Config.new
|
386
|
+
end
|
422
387
|
|
423
388
|
def session_pool
|
424
389
|
@session_pool ||= {}
|