capybara 3.3.1 → 3.4.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 +16 -0
- data/README.md +5 -7
- data/lib/capybara.rb +7 -6
- data/lib/capybara/config.rb +1 -1
- data/lib/capybara/dsl.rb +2 -2
- data/lib/capybara/helpers.rb +3 -3
- data/lib/capybara/minitest/spec.rb +3 -3
- data/lib/capybara/node/actions.rb +18 -18
- data/lib/capybara/node/base.rb +1 -1
- data/lib/capybara/node/element.rb +2 -2
- data/lib/capybara/node/finders.rb +6 -6
- data/lib/capybara/node/matchers.rb +5 -5
- data/lib/capybara/node/simple.rb +2 -2
- data/lib/capybara/queries/ancestor_query.rb +1 -1
- data/lib/capybara/queries/base_query.rb +12 -11
- data/lib/capybara/queries/current_path_query.rb +1 -1
- data/lib/capybara/queries/selector_query.rb +39 -15
- data/lib/capybara/queries/sibling_query.rb +1 -1
- data/lib/capybara/queries/text_query.rb +1 -1
- data/lib/capybara/rack_test/browser.rb +7 -7
- data/lib/capybara/rack_test/driver.rb +1 -1
- data/lib/capybara/rack_test/form.rb +7 -7
- data/lib/capybara/rack_test/node.rb +16 -16
- data/lib/capybara/rails.rb +1 -1
- data/lib/capybara/result.rb +8 -4
- data/lib/capybara/rspec/features.rb +4 -4
- data/lib/capybara/rspec/matchers.rb +6 -6
- data/lib/capybara/selector.rb +106 -90
- data/lib/capybara/selector/css.rb +4 -4
- data/lib/capybara/selector/filter_set.rb +52 -8
- data/lib/capybara/selector/selector.rb +39 -15
- data/lib/capybara/selenium/driver.rb +10 -10
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +8 -0
- data/lib/capybara/selenium/node.rb +9 -10
- data/lib/capybara/selenium/nodes/chrome_node.rb +18 -0
- data/lib/capybara/selenium/nodes/marionette_node.rb +32 -7
- data/lib/capybara/server.rb +3 -3
- data/lib/capybara/server/animation_disabler.rb +1 -1
- data/lib/capybara/server/middleware.rb +1 -1
- data/lib/capybara/session.rb +23 -19
- data/lib/capybara/session/config.rb +18 -3
- data/lib/capybara/spec/public/test.js +1 -1
- data/lib/capybara/spec/session/accept_alert_spec.rb +10 -10
- data/lib/capybara/spec/session/accept_confirm_spec.rb +3 -3
- data/lib/capybara/spec/session/accept_prompt_spec.rb +9 -10
- data/lib/capybara/spec/session/all_spec.rb +33 -32
- data/lib/capybara/spec/session/ancestor_spec.rb +19 -19
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +38 -38
- data/lib/capybara/spec/session/assert_current_path_spec.rb +16 -16
- data/lib/capybara/spec/session/assert_selector_spec.rb +53 -53
- data/lib/capybara/spec/session/assert_style_spec.rb +3 -3
- data/lib/capybara/spec/session/assert_text_spec.rb +31 -30
- data/lib/capybara/spec/session/assert_title_spec.rb +12 -12
- data/lib/capybara/spec/session/attach_file_spec.rb +51 -52
- data/lib/capybara/spec/session/body_spec.rb +6 -6
- data/lib/capybara/spec/session/check_spec.rb +52 -47
- data/lib/capybara/spec/session/choose_spec.rb +32 -32
- data/lib/capybara/spec/session/click_button_spec.rb +103 -103
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +24 -23
- data/lib/capybara/spec/session/click_link_spec.rb +49 -48
- data/lib/capybara/spec/session/current_scope_spec.rb +7 -7
- data/lib/capybara/spec/session/current_url_spec.rb +26 -27
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +3 -3
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +2 -2
- data/lib/capybara/spec/session/element/assert_match_selector_spec.rb +8 -8
- data/lib/capybara/spec/session/element/match_css_spec.rb +10 -10
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +6 -6
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +51 -51
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +7 -7
- data/lib/capybara/spec/session/evaluate_script_spec.rb +15 -8
- data/lib/capybara/spec/session/execute_script_spec.rb +7 -7
- data/lib/capybara/spec/session/fill_in_spec.rb +43 -42
- data/lib/capybara/spec/session/find_button_spec.rb +23 -23
- data/lib/capybara/spec/session/find_by_id_spec.rb +7 -7
- data/lib/capybara/spec/session/find_field_spec.rb +32 -30
- data/lib/capybara/spec/session/find_link_spec.rb +21 -21
- data/lib/capybara/spec/session/find_spec.rb +153 -135
- data/lib/capybara/spec/session/first_spec.rb +41 -41
- data/lib/capybara/spec/session/frame/frame_title_spec.rb +5 -5
- data/lib/capybara/spec/session/frame/frame_url_spec.rb +5 -5
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +17 -17
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +31 -17
- data/lib/capybara/spec/session/go_back_spec.rb +1 -1
- data/lib/capybara/spec/session/go_forward_spec.rb +1 -1
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +17 -17
- data/lib/capybara/spec/session/has_button_spec.rb +13 -13
- data/lib/capybara/spec/session/has_css_spec.rb +133 -131
- data/lib/capybara/spec/session/has_current_path_spec.rb +29 -29
- data/lib/capybara/spec/session/has_field_spec.rb +58 -58
- data/lib/capybara/spec/session/has_link_spec.rb +4 -4
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +24 -24
- data/lib/capybara/spec/session/has_select_spec.rb +43 -43
- data/lib/capybara/spec/session/has_selector_spec.rb +71 -71
- data/lib/capybara/spec/session/has_style_spec.rb +3 -3
- data/lib/capybara/spec/session/has_table_spec.rb +4 -4
- data/lib/capybara/spec/session/has_text_spec.rb +53 -52
- data/lib/capybara/spec/session/has_title_spec.rb +14 -14
- data/lib/capybara/spec/session/has_xpath_spec.rb +39 -38
- data/lib/capybara/spec/session/headers_spec.rb +1 -1
- data/lib/capybara/spec/session/html_spec.rb +6 -6
- data/lib/capybara/spec/session/node_spec.rb +129 -123
- data/lib/capybara/spec/session/node_wrapper_spec.rb +10 -7
- data/lib/capybara/spec/session/refresh_spec.rb +4 -7
- data/lib/capybara/spec/session/reset_session_spec.rb +28 -28
- data/lib/capybara/spec/session/response_code_spec.rb +1 -1
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +2 -2
- data/lib/capybara/spec/session/save_page_spec.rb +37 -37
- data/lib/capybara/spec/session/save_screenshot_spec.rb +6 -6
- data/lib/capybara/spec/session/screenshot_spec.rb +2 -2
- data/lib/capybara/spec/session/select_spec.rb +81 -81
- data/lib/capybara/spec/session/selectors_spec.rb +17 -17
- data/lib/capybara/spec/session/sibling_spec.rb +9 -9
- data/lib/capybara/spec/session/text_spec.rb +23 -23
- data/lib/capybara/spec/session/title_spec.rb +5 -5
- data/lib/capybara/spec/session/uncheck_spec.rb +24 -20
- data/lib/capybara/spec/session/unselect_spec.rb +37 -37
- data/lib/capybara/spec/session/visit_spec.rb +48 -49
- data/lib/capybara/spec/session/window/current_window_spec.rb +1 -1
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +16 -16
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +2 -2
- data/lib/capybara/spec/session/window/window_spec.rb +4 -4
- data/lib/capybara/spec/session/window/within_window_spec.rb +14 -14
- data/lib/capybara/spec/session/within_spec.rb +41 -41
- data/lib/capybara/spec/spec_helper.rb +11 -9
- data/lib/capybara/spec/test_app.rb +18 -17
- data/lib/capybara/spec/views/form.erb +29 -31
- data/lib/capybara/spec/views/with_html.erb +2 -2
- data/lib/capybara/version.rb +1 -1
- data/spec/basic_node_spec.rb +23 -23
- data/spec/capybara_spec.rb +20 -20
- data/spec/css_splitter_spec.rb +7 -7
- data/spec/dsl_spec.rb +37 -32
- data/spec/filter_set_spec.rb +4 -4
- data/spec/fixtures/selenium_driver_rspec_failure.rb +1 -1
- data/spec/fixtures/selenium_driver_rspec_success.rb +1 -1
- data/spec/minitest_spec.rb +4 -4
- data/spec/minitest_spec_spec.rb +23 -23
- data/spec/per_session_config_spec.rb +5 -5
- data/spec/rack_test_spec.rb +44 -44
- data/spec/result_spec.rb +14 -14
- data/spec/rspec/features_spec.rb +13 -13
- data/spec/rspec/scenarios_spec.rb +4 -4
- data/spec/rspec/shared_spec_matchers.rb +282 -281
- data/spec/rspec/views_spec.rb +3 -3
- data/spec/rspec_matchers_spec.rb +10 -10
- data/spec/rspec_spec.rb +29 -29
- data/spec/selector_spec.rb +64 -64
- data/spec/selenium_spec_chrome.rb +14 -22
- data/spec/selenium_spec_chrome_remote.rb +28 -8
- data/spec/selenium_spec_edge.rb +9 -4
- data/spec/selenium_spec_firefox_remote.rb +87 -0
- data/spec/selenium_spec_ie.rb +9 -4
- data/spec/selenium_spec_marionette.rb +42 -18
- data/spec/server_spec.rb +29 -27
- data/spec/session_spec.rb +17 -17
- data/spec/shared_selenium_session.rb +70 -52
- data/spec/spec_helper.rb +1 -1
- metadata +4 -2
data/spec/dsl_spec.rb
CHANGED
@@ -7,9 +7,14 @@ class TestClass
|
|
7
7
|
include Capybara::DSL
|
8
8
|
end
|
9
9
|
|
10
|
-
Capybara::SpecHelper.run_specs TestClass.new,
|
10
|
+
Capybara::SpecHelper.run_specs TestClass.new, 'DSL', capybara_skip: %i[
|
11
11
|
js modals screenshot frames windows send_keys server hover about_scheme psc download css
|
12
|
-
]
|
12
|
+
] do |example|
|
13
|
+
case example.metadata[:full_description]
|
14
|
+
when /doesn't raise exception on a nil current_url$/
|
15
|
+
skip 'Only makes sense when there is a real driver'
|
16
|
+
end
|
17
|
+
end
|
13
18
|
|
14
19
|
RSpec.describe Capybara::DSL do
|
15
20
|
after do
|
@@ -21,42 +26,42 @@ RSpec.describe Capybara::DSL do
|
|
21
26
|
end
|
22
27
|
|
23
28
|
describe '#default_driver' do
|
24
|
-
it
|
29
|
+
it 'should default to rack_test' do
|
25
30
|
expect(Capybara.default_driver).to eq(:rack_test)
|
26
31
|
end
|
27
32
|
|
28
|
-
it
|
33
|
+
it 'should be changeable' do
|
29
34
|
Capybara.default_driver = :culerity
|
30
35
|
expect(Capybara.default_driver).to eq(:culerity)
|
31
36
|
end
|
32
37
|
end
|
33
38
|
|
34
39
|
describe '#current_driver' do
|
35
|
-
it
|
40
|
+
it 'should default to the default driver' do
|
36
41
|
expect(Capybara.current_driver).to eq(:rack_test)
|
37
42
|
Capybara.default_driver = :culerity
|
38
43
|
expect(Capybara.current_driver).to eq(:culerity)
|
39
44
|
end
|
40
45
|
|
41
|
-
it
|
46
|
+
it 'should be changeable' do
|
42
47
|
Capybara.current_driver = :culerity
|
43
48
|
expect(Capybara.current_driver).to eq(:culerity)
|
44
49
|
end
|
45
50
|
end
|
46
51
|
|
47
52
|
describe '#javascript_driver' do
|
48
|
-
it
|
53
|
+
it 'should default to selenium' do
|
49
54
|
expect(Capybara.javascript_driver).to eq(:selenium)
|
50
55
|
end
|
51
56
|
|
52
|
-
it
|
57
|
+
it 'should be changeable' do
|
53
58
|
Capybara.javascript_driver = :culerity
|
54
59
|
expect(Capybara.javascript_driver).to eq(:culerity)
|
55
60
|
end
|
56
61
|
end
|
57
62
|
|
58
63
|
describe '#use_default_driver' do
|
59
|
-
it
|
64
|
+
it 'should restore the default driver' do
|
60
65
|
Capybara.current_driver = :culerity
|
61
66
|
Capybara.use_default_driver
|
62
67
|
expect(Capybara.current_driver).to eq(:rack_test)
|
@@ -84,8 +89,8 @@ RSpec.describe Capybara::DSL do
|
|
84
89
|
it 'should reset the driver even if an exception occurs' do
|
85
90
|
driver_before_block = Capybara.current_driver
|
86
91
|
begin
|
87
|
-
Capybara.using_driver(:selenium) { raise
|
88
|
-
rescue Exception # rubocop:disable Lint/RescueException
|
92
|
+
Capybara.using_driver(:selenium) { raise 'ohnoes!' }
|
93
|
+
rescue Exception # rubocop:disable Lint/RescueException,Lint/HandleExceptions
|
89
94
|
end
|
90
95
|
expect(Capybara.current_driver).to eq(driver_before_block)
|
91
96
|
end
|
@@ -117,7 +122,7 @@ RSpec.describe Capybara::DSL do
|
|
117
122
|
Capybara.default_max_wait_time = @previous_wait_time
|
118
123
|
end
|
119
124
|
|
120
|
-
it
|
125
|
+
it 'should switch the wait time and switch it back' do
|
121
126
|
in_block = nil
|
122
127
|
Capybara.using_wait_time 6 do
|
123
128
|
in_block = Capybara.default_max_wait_time
|
@@ -126,40 +131,40 @@ RSpec.describe Capybara::DSL do
|
|
126
131
|
expect(Capybara.default_max_wait_time).to eq(@previous_wait_time)
|
127
132
|
end
|
128
133
|
|
129
|
-
it
|
134
|
+
it 'should ensure wait time is reset' do
|
130
135
|
expect do
|
131
136
|
Capybara.using_wait_time 6 do
|
132
|
-
raise
|
137
|
+
raise 'hell'
|
133
138
|
end
|
134
|
-
end.to raise_error(RuntimeError,
|
139
|
+
end.to raise_error(RuntimeError, 'hell')
|
135
140
|
expect(Capybara.default_max_wait_time).to eq(@previous_wait_time)
|
136
141
|
end
|
137
142
|
end
|
138
143
|
|
139
144
|
describe '#app' do
|
140
|
-
it
|
141
|
-
Capybara.app =
|
145
|
+
it 'should be changeable' do
|
146
|
+
Capybara.app = 'foobar'
|
142
147
|
expect(Capybara.app).to eq('foobar')
|
143
148
|
end
|
144
149
|
end
|
145
150
|
|
146
151
|
describe '#current_session' do
|
147
|
-
it
|
152
|
+
it 'should choose a session object of the current driver type' do
|
148
153
|
expect(Capybara.current_session).to be_a(Capybara::Session)
|
149
154
|
end
|
150
155
|
|
151
|
-
it
|
156
|
+
it 'should use #app as the application' do
|
152
157
|
Capybara.app = proc {}
|
153
158
|
expect(Capybara.current_session.app).to eq(Capybara.app)
|
154
159
|
end
|
155
160
|
|
156
|
-
it
|
161
|
+
it 'should change with the current driver' do
|
157
162
|
expect(Capybara.current_session.mode).to eq(:rack_test)
|
158
163
|
Capybara.current_driver = :selenium
|
159
164
|
expect(Capybara.current_session.mode).to eq(:selenium)
|
160
165
|
end
|
161
166
|
|
162
|
-
it
|
167
|
+
it 'should be persistent even across driver changes' do
|
163
168
|
object_id = Capybara.current_session.object_id
|
164
169
|
expect(Capybara.current_session.object_id).to eq(object_id)
|
165
170
|
Capybara.current_driver = :selenium
|
@@ -170,7 +175,7 @@ RSpec.describe Capybara::DSL do
|
|
170
175
|
expect(Capybara.current_session.object_id).to eq(object_id)
|
171
176
|
end
|
172
177
|
|
173
|
-
it
|
178
|
+
it 'should change when changing application' do
|
174
179
|
object_id = Capybara.current_session.object_id
|
175
180
|
expect(Capybara.current_session.object_id).to eq(object_id)
|
176
181
|
Capybara.app = proc {}
|
@@ -178,7 +183,7 @@ RSpec.describe Capybara::DSL do
|
|
178
183
|
expect(Capybara.current_session.app).to eq(Capybara.app)
|
179
184
|
end
|
180
185
|
|
181
|
-
it
|
186
|
+
it 'should change when the session name changes' do
|
182
187
|
object_id = Capybara.current_session.object_id
|
183
188
|
Capybara.session_name = :administrator
|
184
189
|
expect(Capybara.session_name).to eq(:administrator)
|
@@ -189,8 +194,8 @@ RSpec.describe Capybara::DSL do
|
|
189
194
|
end
|
190
195
|
end
|
191
196
|
|
192
|
-
describe
|
193
|
-
it
|
197
|
+
describe '#using_session' do
|
198
|
+
it 'should change the session name for the duration of the block' do
|
194
199
|
expect(Capybara.session_name).to eq(:default)
|
195
200
|
Capybara.using_session(:administrator) do
|
196
201
|
expect(Capybara.session_name).to eq(:administrator)
|
@@ -198,23 +203,23 @@ RSpec.describe Capybara::DSL do
|
|
198
203
|
expect(Capybara.session_name).to eq(:default)
|
199
204
|
end
|
200
205
|
|
201
|
-
it
|
206
|
+
it 'should reset the session to the default, even if an exception occurs' do
|
202
207
|
begin
|
203
208
|
Capybara.using_session(:raise) do
|
204
209
|
raise
|
205
210
|
end
|
206
|
-
rescue Exception # rubocop:disable Lint/RescueException
|
211
|
+
rescue Exception # rubocop:disable Lint/RescueException,Lint/HandleExceptions
|
207
212
|
end
|
208
213
|
expect(Capybara.session_name).to eq(:default)
|
209
214
|
end
|
210
215
|
|
211
|
-
it
|
216
|
+
it 'should yield the passed block' do
|
212
217
|
called = false
|
213
218
|
Capybara.using_session(:administrator) { called = true }
|
214
219
|
expect(called).to eq(true)
|
215
220
|
end
|
216
221
|
|
217
|
-
it
|
222
|
+
it 'should be nestable' do
|
218
223
|
Capybara.using_session(:outer) do
|
219
224
|
expect(Capybara.session_name).to eq(:outer)
|
220
225
|
Capybara.using_session(:inner) do
|
@@ -226,8 +231,8 @@ RSpec.describe Capybara::DSL do
|
|
226
231
|
end
|
227
232
|
end
|
228
233
|
|
229
|
-
describe
|
230
|
-
it
|
234
|
+
describe '#session_name' do
|
235
|
+
it 'should default to :default' do
|
231
236
|
expect(Capybara.session_name).to eq(:default)
|
232
237
|
end
|
233
238
|
end
|
@@ -237,7 +242,7 @@ RSpec.describe Capybara::DSL do
|
|
237
242
|
@session = Class.new { include Capybara::DSL }.new
|
238
243
|
end
|
239
244
|
|
240
|
-
it
|
245
|
+
it 'should be possible to include it in another class' do
|
241
246
|
@session.visit('/with_html')
|
242
247
|
@session.click_link('ullamco')
|
243
248
|
expect(@session.body).to include('Another World')
|
data/spec/filter_set_spec.rb
CHANGED
@@ -7,7 +7,7 @@ RSpec.describe Capybara::Selector::FilterSet do
|
|
7
7
|
Capybara::Selector::FilterSet.remove(:test)
|
8
8
|
end
|
9
9
|
|
10
|
-
it
|
10
|
+
it 'allows node filters' do
|
11
11
|
fs = Capybara::Selector::FilterSet.add(:test) do
|
12
12
|
node_filter(:node_test, :boolean) { |_node, _value| true }
|
13
13
|
expression_filter(:expression_test, :boolean) { |_expr, _value| true }
|
@@ -17,7 +17,7 @@ RSpec.describe Capybara::Selector::FilterSet do
|
|
17
17
|
expect(fs.node_filters.keys).not_to include(:expression_test)
|
18
18
|
end
|
19
19
|
|
20
|
-
it
|
20
|
+
it 'allows expression filters' do
|
21
21
|
fs = Capybara::Selector::FilterSet.add(:test) do
|
22
22
|
node_filter(:node_test, :boolean) { |_node, _value| true }
|
23
23
|
expression_filter(:expression_test, :boolean) { |_expr, _value| true }
|
@@ -27,7 +27,7 @@ RSpec.describe Capybara::Selector::FilterSet do
|
|
27
27
|
expect(fs.expression_filters.keys).not_to include(:node_test)
|
28
28
|
end
|
29
29
|
|
30
|
-
it
|
30
|
+
it 'allows node filter and expression filter with the same name' do
|
31
31
|
fs = Capybara::Selector::FilterSet.add(:test) do
|
32
32
|
node_filter(:test, :boolean) { |_node, _value| true }
|
33
33
|
expression_filter(:test, :boolean) { |_expr, _value| true }
|
@@ -36,7 +36,7 @@ RSpec.describe Capybara::Selector::FilterSet do
|
|
36
36
|
expect(fs.expression_filters[:test]).not_to eq fs.node_filters[:test]
|
37
37
|
end
|
38
38
|
|
39
|
-
it
|
39
|
+
it 'allows `filter` as an alias of `node_filter`' do
|
40
40
|
fs = Capybara::Selector::FilterSet.add(:test) do
|
41
41
|
filter(:node_test, :boolean) { |_node, _value| true }
|
42
42
|
end
|
@@ -4,7 +4,7 @@ require 'spec_helper'
|
|
4
4
|
require 'selenium-webdriver'
|
5
5
|
|
6
6
|
RSpec.describe Capybara::Selenium::Driver do
|
7
|
-
it
|
7
|
+
it 'should exit with a non-zero exit status' do
|
8
8
|
options = { browser: (ENV['SELENIUM_BROWSER'] || :firefox).to_sym }
|
9
9
|
browser = Capybara::Selenium::Driver.new(TestApp, options).browser
|
10
10
|
expect(browser).to be_truthy
|
@@ -4,7 +4,7 @@ require 'spec_helper'
|
|
4
4
|
require 'selenium-webdriver'
|
5
5
|
|
6
6
|
RSpec.describe Capybara::Selenium::Driver do
|
7
|
-
it
|
7
|
+
it 'should exit with a zero exit status' do
|
8
8
|
options = { browser: (ENV['SELENIUM_BROWSER'] || :firefox).to_sym }
|
9
9
|
browser = Capybara::Selenium::Driver.new(TestApp, options).browser
|
10
10
|
expect(browser).to be_truthy
|
data/spec/minitest_spec.rb
CHANGED
@@ -36,9 +36,9 @@ class MinitestTest < Minitest::Test
|
|
36
36
|
|
37
37
|
def test_assert_xpath
|
38
38
|
assert_xpath('.//select[@id="form_title"]')
|
39
|
-
assert_xpath('.//select', count: 1) { |el| el[:id] ==
|
39
|
+
assert_xpath('.//select', count: 1) { |el| el[:id] == 'form_title' }
|
40
40
|
assert_no_xpath('.//select[@id="not_form_title"]')
|
41
|
-
assert_no_xpath('.//select') { |el| el[:id] ==
|
41
|
+
assert_no_xpath('.//select') { |el| el[:id] == 'not_form_title' }
|
42
42
|
refute_xpath('.//select[@id="not_form_title"]')
|
43
43
|
end
|
44
44
|
|
@@ -126,12 +126,12 @@ RSpec.describe 'capybara/minitest' do
|
|
126
126
|
Capybara.app = TestApp
|
127
127
|
end
|
128
128
|
|
129
|
-
it
|
129
|
+
it 'should support minitest' do
|
130
130
|
output = StringIO.new
|
131
131
|
reporter = Minitest::SummaryReporter.new(output)
|
132
132
|
reporter.start
|
133
133
|
MinitestTest.run reporter, {}
|
134
134
|
reporter.report
|
135
|
-
expect(output.string).to include(
|
135
|
+
expect(output.string).to include('18 runs, 44 assertions, 0 failures, 0 errors, 1 skips')
|
136
136
|
end
|
137
137
|
end
|
data/spec/minitest_spec_spec.rb
CHANGED
@@ -16,7 +16,7 @@ class MinitestSpecTest < Minitest::Spec
|
|
16
16
|
Capybara.reset_sessions!
|
17
17
|
end
|
18
18
|
|
19
|
-
it
|
19
|
+
it 'supports text expectations' do
|
20
20
|
page.must_have_text('Form', minimum: 1)
|
21
21
|
page.wont_have_text('Not a form')
|
22
22
|
form = find(:css, 'form', text: 'Title')
|
@@ -24,28 +24,28 @@ class MinitestSpecTest < Minitest::Spec
|
|
24
24
|
form.wont_have_text('Some other email')
|
25
25
|
end
|
26
26
|
|
27
|
-
it
|
27
|
+
it 'supports current_path expectations' do
|
28
28
|
page.must_have_current_path('/form')
|
29
29
|
page.wont_have_current_path('/form2')
|
30
30
|
end
|
31
31
|
|
32
|
-
it
|
32
|
+
it 'supports title expectations' do
|
33
33
|
visit('/with_title')
|
34
34
|
page.must_have_title('Test Title')
|
35
35
|
page.wont_have_title('Not the title')
|
36
36
|
end
|
37
37
|
|
38
|
-
it
|
38
|
+
it 'supports xpath expectations' do
|
39
39
|
page.must_have_xpath('.//input[@id="customer_email"]')
|
40
40
|
page.wont_have_xpath('.//select[@id="not_form_title"]')
|
41
|
-
page.wont_have_xpath('.//input[@id="customer_email"]') { |el| el[:id] ==
|
41
|
+
page.wont_have_xpath('.//input[@id="customer_email"]') { |el| el[:id] == 'not_customer_email' }
|
42
42
|
select = find(:select, 'form_title')
|
43
43
|
select.must_have_xpath('.//option[@class="title"]')
|
44
44
|
select.must_have_xpath('.//option', count: 1) { |option| option[:class] != 'title' && !option.disabled? }
|
45
45
|
select.wont_have_xpath('.//input[@id="customer_email"]')
|
46
46
|
end
|
47
47
|
|
48
|
-
it
|
48
|
+
it 'support css expectations' do
|
49
49
|
page.must_have_css('input#customer_email')
|
50
50
|
page.wont_have_css('select#not_form_title')
|
51
51
|
el = find(:select, 'form_title')
|
@@ -53,71 +53,71 @@ class MinitestSpecTest < Minitest::Spec
|
|
53
53
|
el.wont_have_css('input#customer_email')
|
54
54
|
end
|
55
55
|
|
56
|
-
it
|
56
|
+
it 'supports link expectations' do
|
57
57
|
visit('/with_html')
|
58
58
|
page.must_have_link('A link')
|
59
59
|
page.wont_have_link('Not on page')
|
60
60
|
end
|
61
61
|
|
62
|
-
it
|
62
|
+
it 'supports button expectations' do
|
63
63
|
page.must_have_button('fresh_btn')
|
64
64
|
page.wont_have_button('not_btn')
|
65
65
|
end
|
66
66
|
|
67
|
-
it
|
67
|
+
it 'supports field expectations' do
|
68
68
|
page.must_have_field('customer_email')
|
69
69
|
page.wont_have_field('not_on_the_form')
|
70
70
|
end
|
71
71
|
|
72
|
-
it
|
72
|
+
it 'supports select expectations' do
|
73
73
|
page.must_have_select('form_title')
|
74
74
|
page.wont_have_select('not_form_title')
|
75
75
|
end
|
76
76
|
|
77
|
-
it
|
77
|
+
it 'supports checked_field expectations' do
|
78
78
|
page.must_have_checked_field('form_pets_dog')
|
79
79
|
page.wont_have_checked_field('form_pets_cat')
|
80
80
|
end
|
81
81
|
|
82
|
-
it
|
82
|
+
it 'supports unchecked_field expectations' do
|
83
83
|
page.must_have_unchecked_field('form_pets_cat')
|
84
84
|
page.wont_have_unchecked_field('form_pets_dog')
|
85
85
|
end
|
86
86
|
|
87
|
-
it
|
87
|
+
it 'supports table expectations' do
|
88
88
|
visit('/tables')
|
89
89
|
page.must_have_table('agent_table')
|
90
90
|
page.wont_have_table('not_on_form')
|
91
91
|
end
|
92
92
|
|
93
|
-
it
|
93
|
+
it 'supports all_of_selectors expectations' do
|
94
94
|
page.must_have_all_of_selectors(:css, 'select#form_other_title', 'input#form_last_name')
|
95
95
|
end
|
96
96
|
|
97
|
-
it
|
97
|
+
it 'supports none_of_selectors expectations' do
|
98
98
|
page.must_have_none_of_selectors(:css, 'input#not_on_page', 'input#also_not_on_page')
|
99
99
|
end
|
100
100
|
|
101
|
-
it
|
101
|
+
it 'supports match_selector expectations' do
|
102
102
|
find(:field, 'customer_email').must_match_selector(:field, 'customer_email')
|
103
103
|
find(:select, 'form_title').wont_match_selector(:field, 'customer_email')
|
104
104
|
end
|
105
105
|
|
106
|
-
it
|
106
|
+
it 'supports match_css expectations' do
|
107
107
|
find(:select, 'form_title').must_match_css('select#form_title')
|
108
108
|
find(:select, 'form_title').wont_match_css('select#form_other_title')
|
109
109
|
end
|
110
110
|
|
111
|
-
it
|
111
|
+
it 'supports match_xpath expectations' do
|
112
112
|
find(:select, 'form_title').must_match_xpath('.//select[@id="form_title"]')
|
113
113
|
find(:select, 'form_title').wont_match_xpath('.//select[@id="not_on_page"]')
|
114
114
|
end
|
115
115
|
|
116
|
-
it
|
116
|
+
it 'handles failures' do
|
117
117
|
page.must_have_select('non_existing_form_title')
|
118
118
|
end
|
119
119
|
|
120
|
-
it
|
120
|
+
it 'supports style expectations' do
|
121
121
|
skip "Rack test doesn't support style" if Capybara.current_driver == :rack_test
|
122
122
|
visit('/with_html')
|
123
123
|
find(:css, '#second').must_have_style('display' => 'inline')
|
@@ -130,14 +130,14 @@ RSpec.describe 'capybara/minitest/spec' do
|
|
130
130
|
Capybara.app = TestApp
|
131
131
|
end
|
132
132
|
|
133
|
-
it
|
133
|
+
it 'should support minitest spec' do
|
134
134
|
output = StringIO.new
|
135
135
|
reporter = Minitest::SummaryReporter.new(output)
|
136
136
|
reporter.start
|
137
137
|
MinitestSpecTest.run reporter, {}
|
138
138
|
reporter.report
|
139
|
-
expect(output.string).to include(
|
139
|
+
expect(output.string).to include('19 runs, 41 assertions, 1 failures, 0 errors, 1 skips')
|
140
140
|
# Make sure error messages are displayed
|
141
|
-
expect(output.string).to include('expected to find
|
141
|
+
expect(output.string).to include('expected to find select box "non_existing_form_title" but there were no matches')
|
142
142
|
end
|
143
143
|
end
|
@@ -4,8 +4,8 @@ require 'spec_helper'
|
|
4
4
|
require 'capybara/dsl'
|
5
5
|
|
6
6
|
RSpec.describe Capybara::SessionConfig do
|
7
|
-
describe
|
8
|
-
it
|
7
|
+
describe 'threadsafe' do
|
8
|
+
it 'defaults to global session options' do
|
9
9
|
Capybara.threadsafe = true
|
10
10
|
session = Capybara::Session.new(:rack_test, TestApp)
|
11
11
|
%i[default_host app_host always_include_port run_server
|
@@ -19,7 +19,7 @@ RSpec.describe Capybara::SessionConfig do
|
|
19
19
|
|
20
20
|
it "doesn't change global session when changed" do
|
21
21
|
Capybara.threadsafe = true
|
22
|
-
host =
|
22
|
+
host = 'http://my.example.com'
|
23
23
|
session = Capybara::Session.new(:rack_test, TestApp) do |config|
|
24
24
|
config.default_host = host
|
25
25
|
config.automatic_label_click = !config.automatic_label_click
|
@@ -35,7 +35,7 @@ RSpec.describe Capybara::SessionConfig do
|
|
35
35
|
Capybara.threadsafe = false
|
36
36
|
expect do
|
37
37
|
Capybara::Session.new(:rack_test, TestApp) { |config| }
|
38
|
-
end.to raise_error
|
38
|
+
end.to raise_error 'A configuration block is only accepted when Capybara.threadsafe == true'
|
39
39
|
end
|
40
40
|
|
41
41
|
it "doesn't allow session config when false" do
|
@@ -49,7 +49,7 @@ RSpec.describe Capybara::SessionConfig do
|
|
49
49
|
end.to raise_error(/Session configuration is only supported when Capybara.threadsafe == true/)
|
50
50
|
end
|
51
51
|
|
52
|
-
it
|
52
|
+
it 'uses the config from the session' do
|
53
53
|
Capybara.threadsafe = true
|
54
54
|
session = Capybara::Session.new(:rack_test, TestApp) do |config|
|
55
55
|
config.default_selector = :link
|