capybara 2.18.0 → 3.0.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 +55 -1
- data/README.md +18 -17
- data/lib/capybara/config.rb +11 -58
- data/lib/capybara/cucumber.rb +2 -3
- data/lib/capybara/driver/base.rb +15 -16
- data/lib/capybara/driver/node.rb +5 -4
- data/lib/capybara/dsl.rb +1 -0
- data/lib/capybara/helpers.rb +19 -29
- data/lib/capybara/minitest/spec.rb +15 -14
- data/lib/capybara/minitest.rb +139 -138
- data/lib/capybara/node/actions.rb +60 -81
- data/lib/capybara/node/base.rb +11 -18
- data/lib/capybara/node/document.rb +2 -2
- data/lib/capybara/node/document_matchers.rb +8 -8
- data/lib/capybara/node/element.rb +30 -40
- data/lib/capybara/node/finders.rb +62 -70
- data/lib/capybara/node/matchers.rb +50 -71
- data/lib/capybara/node/simple.rb +11 -17
- data/lib/capybara/queries/ancestor_query.rb +11 -7
- data/lib/capybara/queries/base_query.rb +22 -18
- data/lib/capybara/queries/current_path_query.rb +8 -24
- data/lib/capybara/queries/match_query.rb +3 -7
- data/lib/capybara/queries/selector_query.rb +92 -95
- data/lib/capybara/queries/sibling_query.rb +4 -4
- data/lib/capybara/queries/text_query.rb +35 -35
- data/lib/capybara/queries/title_query.rb +8 -11
- data/lib/capybara/rack_test/browser.rb +15 -18
- data/lib/capybara/rack_test/css_handlers.rb +6 -4
- data/lib/capybara/rack_test/driver.rb +6 -10
- data/lib/capybara/rack_test/form.rb +50 -40
- data/lib/capybara/rack_test/node.rb +93 -63
- data/lib/capybara/rails.rb +2 -6
- data/lib/capybara/result.rb +22 -22
- data/lib/capybara/rspec/compound.rb +5 -10
- data/lib/capybara/rspec/features.rb +17 -48
- data/lib/capybara/rspec/matcher_proxies.rb +31 -15
- data/lib/capybara/rspec/matchers.rb +70 -61
- data/lib/capybara/rspec.rb +5 -10
- data/lib/capybara/selector/css.rb +6 -11
- data/lib/capybara/selector/filter.rb +1 -17
- data/lib/capybara/selector/filter_set.rb +18 -15
- data/lib/capybara/selector/filters/base.rb +7 -6
- data/lib/capybara/selector/filters/expression_filter.rb +6 -23
- data/lib/capybara/selector/filters/node_filter.rb +2 -12
- data/lib/capybara/selector/selector.rb +28 -34
- data/lib/capybara/selector.rb +129 -117
- data/lib/capybara/selenium/driver.rb +131 -125
- data/lib/capybara/selenium/node.rb +197 -115
- data/lib/capybara/server.rb +3 -2
- data/lib/capybara/session/config.rb +47 -67
- data/lib/capybara/session/matchers.rb +8 -7
- data/lib/capybara/session.rb +138 -224
- data/lib/capybara/spec/public/test.js +25 -4
- data/lib/capybara/spec/session/accept_alert_spec.rb +1 -0
- data/lib/capybara/spec/session/accept_confirm_spec.rb +3 -2
- data/lib/capybara/spec/session/accept_prompt_spec.rb +1 -0
- data/lib/capybara/spec/session/all_spec.rb +31 -18
- data/lib/capybara/spec/session/ancestor_spec.rb +6 -8
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +6 -5
- data/lib/capybara/spec/session/assert_current_path.rb +12 -11
- data/lib/capybara/spec/session/assert_selector.rb +1 -0
- data/lib/capybara/spec/session/assert_text.rb +23 -23
- data/lib/capybara/spec/session/assert_title.rb +13 -3
- data/lib/capybara/spec/session/attach_file_spec.rb +51 -30
- data/lib/capybara/spec/session/body_spec.rb +1 -0
- data/lib/capybara/spec/session/check_spec.rb +7 -6
- data/lib/capybara/spec/session/choose_spec.rb +5 -4
- data/lib/capybara/spec/session/click_button_spec.rb +24 -32
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +8 -7
- data/lib/capybara/spec/session/click_link_spec.rb +8 -7
- data/lib/capybara/spec/session/current_scope_spec.rb +4 -3
- data/lib/capybara/spec/session/current_url_spec.rb +17 -6
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +1 -1
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +1 -0
- data/lib/capybara/spec/session/element/assert_match_selector.rb +1 -1
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +1 -1
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +5 -5
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +3 -2
- data/lib/capybara/spec/session/evaluate_script_spec.rb +4 -3
- data/lib/capybara/spec/session/execute_script_spec.rb +4 -3
- data/lib/capybara/spec/session/fill_in_spec.rb +30 -5
- data/lib/capybara/spec/session/find_button_spec.rb +4 -3
- data/lib/capybara/spec/session/find_by_id_spec.rb +2 -1
- data/lib/capybara/spec/session/find_field_spec.rb +9 -15
- data/lib/capybara/spec/session/find_link_spec.rb +6 -5
- data/lib/capybara/spec/session/find_spec.rb +37 -31
- data/lib/capybara/spec/session/first_spec.rb +60 -33
- data/lib/capybara/spec/session/frame/frame_title_spec.rb +23 -0
- data/lib/capybara/spec/session/frame/frame_url_spec.rb +23 -0
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +2 -1
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +9 -16
- data/lib/capybara/spec/session/go_back_spec.rb +1 -0
- data/lib/capybara/spec/session/go_forward_spec.rb +1 -0
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +15 -15
- data/lib/capybara/spec/session/has_button_spec.rb +2 -1
- data/lib/capybara/spec/session/has_css_spec.rb +3 -2
- data/lib/capybara/spec/session/has_current_path_spec.rb +12 -28
- data/lib/capybara/spec/session/has_field_spec.rb +4 -3
- data/lib/capybara/spec/session/has_link_spec.rb +1 -0
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +17 -17
- data/lib/capybara/spec/session/has_select_spec.rb +30 -29
- data/lib/capybara/spec/session/has_selector_spec.rb +5 -4
- data/lib/capybara/spec/session/has_table_spec.rb +2 -1
- data/lib/capybara/spec/session/has_text_spec.rb +9 -13
- data/lib/capybara/spec/session/has_title_spec.rb +1 -0
- data/lib/capybara/spec/session/has_xpath_spec.rb +1 -0
- data/lib/capybara/spec/session/headers.rb +2 -1
- data/lib/capybara/spec/session/html_spec.rb +1 -0
- data/lib/capybara/spec/session/node_spec.rb +91 -56
- data/lib/capybara/spec/session/node_wrapper_spec.rb +36 -0
- data/lib/capybara/spec/session/refresh_spec.rb +6 -2
- data/lib/capybara/spec/session/reset_session_spec.rb +19 -0
- data/lib/capybara/spec/session/response_code.rb +1 -0
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +1 -0
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +6 -11
- data/lib/capybara/spec/session/save_page_spec.rb +1 -17
- data/lib/capybara/spec/session/save_screenshot_spec.rb +3 -3
- data/lib/capybara/spec/session/select_spec.rb +20 -20
- data/lib/capybara/spec/session/selectors_spec.rb +2 -2
- data/lib/capybara/spec/session/sibling_spec.rb +1 -1
- data/lib/capybara/spec/session/text_spec.rb +17 -3
- data/lib/capybara/spec/session/title_spec.rb +11 -1
- data/lib/capybara/spec/session/uncheck_spec.rb +4 -3
- data/lib/capybara/spec/session/unselect_spec.rb +6 -5
- data/lib/capybara/spec/session/visit_spec.rb +9 -3
- data/lib/capybara/spec/session/window/become_closed_spec.rb +2 -1
- data/lib/capybara/spec/session/window/current_window_spec.rb +1 -0
- data/lib/capybara/spec/session/window/open_new_window_spec.rb +1 -0
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +2 -1
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +2 -1
- data/lib/capybara/spec/session/window/window_spec.rb +12 -12
- data/lib/capybara/spec/session/window/windows_spec.rb +2 -3
- data/lib/capybara/spec/session/window/within_window_spec.rb +15 -71
- data/lib/capybara/spec/session/within_spec.rb +1 -0
- data/lib/capybara/spec/spec_helper.rb +34 -18
- data/lib/capybara/spec/test_app.rb +17 -9
- data/lib/capybara/spec/views/form.erb +7 -0
- data/lib/capybara/spec/views/with_html.erb +23 -1
- data/lib/capybara/spec/views/within_frames.erb +4 -1
- data/lib/capybara/version.rb +2 -1
- data/lib/capybara/window.rb +6 -10
- data/lib/capybara.rb +28 -25
- data/spec/basic_node_spec.rb +1 -0
- data/spec/capybara_spec.rb +11 -50
- data/spec/dsl_spec.rb +5 -13
- data/spec/filter_set_spec.rb +5 -4
- data/spec/fixtures/selenium_driver_rspec_failure.rb +2 -1
- data/spec/fixtures/selenium_driver_rspec_success.rb +3 -2
- data/spec/minitest_spec.rb +4 -3
- data/spec/minitest_spec_spec.rb +3 -2
- data/spec/per_session_config_spec.rb +9 -8
- data/spec/rack_test_spec.rb +21 -20
- data/spec/result_spec.rb +17 -16
- data/spec/rspec/features_spec.rb +17 -14
- data/spec/rspec/scenarios_spec.rb +5 -7
- data/spec/rspec/shared_spec_matchers.rb +96 -99
- data/spec/rspec/views_spec.rb +2 -1
- data/spec/rspec_matchers_spec.rb +18 -2
- data/spec/rspec_spec.rb +11 -15
- data/spec/selector_spec.rb +5 -6
- data/spec/selenium_spec_chrome.rb +9 -4
- data/spec/selenium_spec_edge.rb +27 -0
- data/spec/selenium_spec_ie.rb +31 -0
- data/spec/selenium_spec_marionette.rb +28 -12
- data/spec/server_spec.rb +33 -33
- data/spec/session_spec.rb +2 -1
- data/spec/shared_selenium_session.rb +36 -22
- data/spec/spec_helper.rb +3 -6
- metadata +68 -85
- data/lib/capybara/query.rb +0 -7
- data/spec/selenium_spec_firefox.rb +0 -68
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec "#check" do
|
3
4
|
before do
|
4
5
|
@session.visit('/form')
|
@@ -18,7 +19,7 @@ Capybara::SpecHelper.spec "#check" do
|
|
18
19
|
it "should trigger associated events", requires: [:js] do
|
19
20
|
@session.visit('/with_js')
|
20
21
|
@session.check('checkbox_with_event')
|
21
|
-
expect(@session).to have_css('#checkbox_event_triggered')
|
22
|
+
expect(@session).to have_css('#checkbox_event_triggered')
|
22
23
|
end
|
23
24
|
|
24
25
|
describe "checking" do
|
@@ -62,7 +63,7 @@ Capybara::SpecHelper.spec "#check" do
|
|
62
63
|
end
|
63
64
|
|
64
65
|
it "casts to string" do
|
65
|
-
@session.check(:
|
66
|
+
@session.check(:form_pets_cat)
|
66
67
|
@session.click_button('awesome')
|
67
68
|
expect(extract_results(@session)['pets']).to include('dog', 'cat', 'hamster')
|
68
69
|
end
|
@@ -86,14 +87,14 @@ Capybara::SpecHelper.spec "#check" do
|
|
86
87
|
|
87
88
|
context "with :exact option" do
|
88
89
|
it "should accept partial matches when false" do
|
89
|
-
@session.check('Ham', exact:
|
90
|
+
@session.check('Ham', exact: false)
|
90
91
|
@session.click_button('awesome')
|
91
92
|
expect(extract_results(@session)['pets']).to include('hamster')
|
92
93
|
end
|
93
94
|
|
94
95
|
it "should not accept partial matches when true" do
|
95
96
|
expect do
|
96
|
-
@session.check('Ham', exact:
|
97
|
+
@session.check('Ham', exact: true)
|
97
98
|
end.to raise_error(Capybara::ElementNotFound)
|
98
99
|
end
|
99
100
|
end
|
@@ -146,7 +147,7 @@ Capybara::SpecHelper.spec "#check" do
|
|
146
147
|
end
|
147
148
|
|
148
149
|
it "should raise error if not allowed to click label" do
|
149
|
-
expect{@session.check('form_cars_mclaren', allow_label_click: false)}.to raise_error(Capybara::ElementNotFound, 'Unable to find visible checkbox "form_cars_mclaren" that is not disabled')
|
150
|
+
expect { @session.check('form_cars_mclaren', allow_label_click: false) }.to raise_error(Capybara::ElementNotFound, 'Unable to find visible checkbox "form_cars_mclaren" that is not disabled')
|
150
151
|
end
|
151
152
|
end
|
152
153
|
|
@@ -158,7 +159,7 @@ Capybara::SpecHelper.spec "#check" do
|
|
158
159
|
end
|
159
160
|
|
160
161
|
it "should raise error if checkbox not visible" do
|
161
|
-
expect{@session.check('form_cars_mclaren')}.to raise_error(Capybara::ElementNotFound, 'Unable to find visible checkbox "form_cars_mclaren" that is not disabled')
|
162
|
+
expect { @session.check('form_cars_mclaren') }.to raise_error(Capybara::ElementNotFound, 'Unable to find visible checkbox "form_cars_mclaren" that is not disabled')
|
162
163
|
end
|
163
164
|
|
164
165
|
context "with allow_label_click == true" do
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec "#choose" do
|
3
4
|
before do
|
4
5
|
@session.visit('/form')
|
@@ -18,7 +19,7 @@ Capybara::SpecHelper.spec "#choose" do
|
|
18
19
|
|
19
20
|
it "casts to string" do
|
20
21
|
@session.choose("Both")
|
21
|
-
@session.click_button(:
|
22
|
+
@session.click_button(:awesome)
|
22
23
|
expect(extract_results(@session)['gender']).to eq('both')
|
23
24
|
end
|
24
25
|
|
@@ -41,14 +42,14 @@ Capybara::SpecHelper.spec "#choose" do
|
|
41
42
|
|
42
43
|
context "with :exact option" do
|
43
44
|
it "should accept partial matches when false" do
|
44
|
-
@session.choose("Mal", exact:
|
45
|
+
@session.choose("Mal", exact: false)
|
45
46
|
@session.click_button('awesome')
|
46
47
|
expect(extract_results(@session)['gender']).to eq('male')
|
47
48
|
end
|
48
49
|
|
49
50
|
it "should not accept partial matches when true" do
|
50
51
|
expect do
|
51
|
-
@session.choose("Mal", exact:
|
52
|
+
@session.choose("Mal", exact: true)
|
52
53
|
end.to raise_error(Capybara::ElementNotFound)
|
53
54
|
end
|
54
55
|
end
|
@@ -82,7 +83,7 @@ Capybara::SpecHelper.spec "#choose" do
|
|
82
83
|
end
|
83
84
|
|
84
85
|
it "should raise error if not allowed to click label" do
|
85
|
-
expect{@session.choose("party_democrat", allow_label_click: false)}.to raise_error(Capybara::ElementNotFound, 'Unable to find visible radio button "party_democrat" that is not disabled')
|
86
|
+
expect { @session.choose("party_democrat", allow_label_click: false) }.to raise_error(Capybara::ElementNotFound, 'Unable to find visible radio button "party_democrat" that is not disabled')
|
86
87
|
end
|
87
88
|
end
|
88
89
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec '#click_button' do
|
3
4
|
before do
|
4
5
|
@session.visit('/form')
|
@@ -151,31 +152,24 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
151
152
|
end
|
152
153
|
end
|
153
154
|
|
154
|
-
context "
|
155
|
-
it "should submit
|
155
|
+
context "input type=submit button" do
|
156
|
+
it "should submit by button id" do
|
156
157
|
@session.click_button('awe123')
|
157
158
|
expect(extract_results(@session)['first_name']).to eq('John')
|
158
159
|
end
|
159
160
|
|
160
|
-
it "should
|
161
|
-
@session.click_button('Go')
|
162
|
-
expect(@session).to have_content('You landed')
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
context "with title given on a submit button" do
|
167
|
-
it "should submit the associated form" do
|
161
|
+
it "should submit by button title" do
|
168
162
|
@session.click_button('What an Awesome Button')
|
169
163
|
expect(extract_results(@session)['first_name']).to eq('John')
|
170
164
|
end
|
171
165
|
|
172
|
-
it "should
|
166
|
+
it "should submit by partial title", :exact_false do
|
173
167
|
@session.click_button('What an Awesome')
|
174
168
|
expect(extract_results(@session)['first_name']).to eq('John')
|
175
169
|
end
|
176
170
|
end
|
177
171
|
|
178
|
-
context "with fields associated with the form using the form attribute" do
|
172
|
+
context "with fields associated with the form using the form attribute", requires: [:form_attribute] do
|
179
173
|
before do
|
180
174
|
@session.click_button('submit_form1')
|
181
175
|
@results = extract_results(@session)
|
@@ -198,8 +192,7 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
198
192
|
end
|
199
193
|
end
|
200
194
|
|
201
|
-
|
202
|
-
context "with submit button outside the form defined by <button> tag" do
|
195
|
+
context "with submit button outside the form defined by <button> tag", requires: [:form_attribute] do
|
203
196
|
before do
|
204
197
|
@session.click_button('outside_button')
|
205
198
|
@results = extract_results(@session)
|
@@ -215,7 +208,7 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
215
208
|
end
|
216
209
|
end
|
217
210
|
|
218
|
-
context "with submit button outside the form defined by <input type='submit'> tag" do
|
211
|
+
context "with submit button outside the form defined by <input type='submit'> tag", requires: [:form_attribute] do
|
219
212
|
before do
|
220
213
|
@session.click_button('outside_submit')
|
221
214
|
@results = extract_results(@session)
|
@@ -231,7 +224,7 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
231
224
|
end
|
232
225
|
end
|
233
226
|
|
234
|
-
context "with submit button for form1 located within form2" do
|
227
|
+
context "with submit button for form1 located within form2", requires: [:form_attribute] do
|
235
228
|
it "should submit the form associated with the button" do
|
236
229
|
@session.click_button('other_form_button')
|
237
230
|
expect(extract_results(@session)['which_form']).to eq("form1")
|
@@ -250,20 +243,19 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
250
243
|
expect(extract_results(@session)['first_name']).to eq('John')
|
251
244
|
end
|
252
245
|
|
253
|
-
it "should work with partial matches" do
|
246
|
+
it "should work with partial matches", :exact_false do
|
254
247
|
@session.click_button('hai')
|
255
248
|
expect(extract_results(@session)['first_name']).to eq('John')
|
256
249
|
end
|
257
250
|
end
|
258
251
|
|
259
|
-
|
260
252
|
context "with value given on an image button" do
|
261
253
|
it "should submit the associated form" do
|
262
254
|
@session.click_button('okay')
|
263
255
|
expect(extract_results(@session)['first_name']).to eq('John')
|
264
256
|
end
|
265
257
|
|
266
|
-
it "should work with partial matches" do
|
258
|
+
it "should work with partial matches", :exact_false do
|
267
259
|
@session.click_button('kay')
|
268
260
|
expect(extract_results(@session)['first_name']).to eq('John')
|
269
261
|
end
|
@@ -282,7 +274,7 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
282
274
|
expect(extract_results(@session)['first_name']).to eq('John')
|
283
275
|
end
|
284
276
|
|
285
|
-
it "should work with partial matches" do
|
277
|
+
it "should work with partial matches", :exact_false do
|
286
278
|
@session.click_button('Okay 556')
|
287
279
|
expect(extract_results(@session)['first_name']).to eq('John')
|
288
280
|
end
|
@@ -290,17 +282,17 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
290
282
|
|
291
283
|
context "with text given on a button defined by <button> tag" do
|
292
284
|
it "should submit the associated form" do
|
293
|
-
@session.click_button('Click me')
|
285
|
+
@session.click_button('Click me!')
|
294
286
|
expect(extract_results(@session)['first_name']).to eq('John')
|
295
287
|
end
|
296
288
|
|
297
|
-
it "should work with partial matches" do
|
289
|
+
it "should work with partial matches", :exact_false do
|
298
290
|
@session.click_button('Click')
|
299
291
|
expect(extract_results(@session)['first_name']).to eq('John')
|
300
292
|
end
|
301
293
|
end
|
302
294
|
|
303
|
-
|
295
|
+
context "with id given on a button defined by <button> tag" do
|
304
296
|
it "should submit the associated form" do
|
305
297
|
@session.click_button('click_me_123')
|
306
298
|
expect(extract_results(@session)['first_name']).to eq('John')
|
@@ -315,13 +307,13 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
315
307
|
end
|
316
308
|
end
|
317
309
|
|
318
|
-
|
310
|
+
context "with value given on a button defined by <button> tag" do
|
319
311
|
it "should submit the associated form" do
|
320
312
|
@session.click_button('click_me')
|
321
313
|
expect(extract_results(@session)['first_name']).to eq('John')
|
322
314
|
end
|
323
315
|
|
324
|
-
it "should work with partial matches" do
|
316
|
+
it "should work with partial matches", :exact_false do
|
325
317
|
@session.click_button('ck_me')
|
326
318
|
expect(extract_results(@session)['first_name']).to eq('John')
|
327
319
|
end
|
@@ -333,7 +325,7 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
333
325
|
expect(extract_results(@session)['first_name']).to eq('John')
|
334
326
|
end
|
335
327
|
|
336
|
-
it "should work with partial matches" do
|
328
|
+
it "should work with partial matches", :exact_false do
|
337
329
|
@session.click_button('Click Title')
|
338
330
|
expect(extract_results(@session)['first_name']).to eq('John')
|
339
331
|
end
|
@@ -345,7 +337,7 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
345
337
|
expect(extract_results(@session)['first_name']).to eq('John')
|
346
338
|
end
|
347
339
|
|
348
|
-
it "should work with partial matches" do
|
340
|
+
it "should work with partial matches", :exact_false do
|
349
341
|
@session.click_button('se eating h')
|
350
342
|
expect(extract_results(@session)['first_name']).to eq('John')
|
351
343
|
end
|
@@ -424,15 +416,15 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
424
416
|
|
425
417
|
it "should encode complex field names, like array[][value]" do
|
426
418
|
@session.visit('/form')
|
427
|
-
@session.fill_in('address1_city', :
|
428
|
-
@session.fill_in('address1_street', :
|
419
|
+
@session.fill_in('address1_city', with: 'Paris')
|
420
|
+
@session.fill_in('address1_street', with: 'CDG')
|
429
421
|
|
430
422
|
@session.fill_in('address2_city', with: 'Mikolaiv')
|
431
423
|
@session.fill_in('address2_street', with: 'PGS')
|
432
424
|
|
433
425
|
@session.click_button "awesome"
|
434
426
|
|
435
|
-
addresses=extract_results(@session)["addresses"]
|
427
|
+
addresses = extract_results(@session)["addresses"]
|
436
428
|
expect(addresses.size).to eq(2)
|
437
429
|
|
438
430
|
expect(addresses[0]["street"]).to eq('CDG')
|
@@ -446,13 +438,13 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
446
438
|
|
447
439
|
context "with :exact option" do
|
448
440
|
it "should accept partial matches when false" do
|
449
|
-
@session.click_button('What an Awesome', exact:
|
441
|
+
@session.click_button('What an Awesome', exact: false)
|
450
442
|
expect(extract_results(@session)['first_name']).to eq('John')
|
451
443
|
end
|
452
444
|
|
453
445
|
it "should not accept partial matches when true" do
|
454
446
|
expect do
|
455
|
-
@session.click_button('What an Awesome', exact:
|
447
|
+
@session.click_button('What an Awesome', exact: true)
|
456
448
|
end.to raise_error(Capybara::ElementNotFound)
|
457
449
|
end
|
458
450
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec '#click_link_or_button' do
|
3
4
|
it "should click on a link" do
|
4
5
|
@session.visit('/with_html')
|
@@ -32,31 +33,31 @@ Capybara::SpecHelper.spec '#click_link_or_button' do
|
|
32
33
|
|
33
34
|
it "casts to string" do
|
34
35
|
@session.visit('/form')
|
35
|
-
@session.click_link_or_button(:
|
36
|
+
@session.click_link_or_button(:awe123)
|
36
37
|
expect(extract_results(@session)['first_name']).to eq('John')
|
37
38
|
end
|
38
39
|
|
39
40
|
context "with :exact option" do
|
40
|
-
context "when `
|
41
|
+
context "when `false`" do
|
41
42
|
it "clicks on approximately matching link" do
|
42
43
|
@session.visit('/with_html')
|
43
|
-
@session.click_link_or_button('abore', exact:
|
44
|
+
@session.click_link_or_button('abore', exact: false)
|
44
45
|
expect(@session).to have_content('Bar')
|
45
46
|
end
|
46
47
|
|
47
48
|
it "clicks on approximately matching button" do
|
48
49
|
@session.visit('/form')
|
49
|
-
@session.click_link_or_button('awe')
|
50
|
+
@session.click_link_or_button('awe', exact: false)
|
50
51
|
expect(extract_results(@session)['first_name']).to eq('John')
|
51
52
|
end
|
52
53
|
end
|
53
54
|
|
54
|
-
context "when `
|
55
|
+
context "when `true`" do
|
55
56
|
it "does not click on link which matches approximately" do
|
56
57
|
@session.visit('/with_html')
|
57
58
|
msg = "Unable to find visible link or button \"abore\""
|
58
59
|
expect do
|
59
|
-
@session.click_link_or_button('abore', exact:
|
60
|
+
@session.click_link_or_button('abore', exact: true)
|
60
61
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
61
62
|
end
|
62
63
|
|
@@ -65,7 +66,7 @@ Capybara::SpecHelper.spec '#click_link_or_button' do
|
|
65
66
|
msg = "Unable to find visible link or button \"awe\""
|
66
67
|
|
67
68
|
expect do
|
68
|
-
@session.click_link_or_button('awe', exact:
|
69
|
+
@session.click_link_or_button('awe', exact: true)
|
69
70
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
70
71
|
end
|
71
72
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec '#click_link' do
|
3
4
|
before do
|
4
5
|
@session.visit('/with_html')
|
@@ -11,7 +12,7 @@ Capybara::SpecHelper.spec '#click_link' do
|
|
11
12
|
end
|
12
13
|
|
13
14
|
it "casts to string" do
|
14
|
-
@session.click_link(:
|
15
|
+
@session.click_link(:foo)
|
15
16
|
expect(@session).to have_content('Another World')
|
16
17
|
end
|
17
18
|
|
@@ -35,7 +36,7 @@ Capybara::SpecHelper.spec '#click_link' do
|
|
35
36
|
expect(@session).to have_content('Bar')
|
36
37
|
end
|
37
38
|
|
38
|
-
it "should accept partial matches" do
|
39
|
+
it "should accept partial matches", :exact_false do
|
39
40
|
@session.click_link('abo')
|
40
41
|
expect(@session).to have_content('Bar')
|
41
42
|
end
|
@@ -47,7 +48,7 @@ Capybara::SpecHelper.spec '#click_link' do
|
|
47
48
|
expect(@session).to have_content('Bar')
|
48
49
|
end
|
49
50
|
|
50
|
-
it "should accept partial matches" do
|
51
|
+
it "should accept partial matches", :exact_false do
|
51
52
|
@session.click_link('some titl')
|
52
53
|
expect(@session).to have_content('Bar')
|
53
54
|
end
|
@@ -59,7 +60,7 @@ Capybara::SpecHelper.spec '#click_link' do
|
|
59
60
|
expect(@session).to have_content('Bar')
|
60
61
|
end
|
61
62
|
|
62
|
-
it "should accept partial matches" do
|
63
|
+
it "should accept partial matches", :exact_false do
|
63
64
|
@session.click_link('some imag')
|
64
65
|
expect(@session).to have_content('Bar')
|
65
66
|
end
|
@@ -85,7 +86,7 @@ Capybara::SpecHelper.spec '#click_link' do
|
|
85
86
|
end
|
86
87
|
end
|
87
88
|
|
88
|
-
context "with a regex :href option given"
|
89
|
+
context "with a regex :href option given" do
|
89
90
|
it "should find a link matching an all-matching regex pattern" do
|
90
91
|
@session.click_link('labore', href: /.+/)
|
91
92
|
expect(@session).to have_content('Bar')
|
@@ -180,13 +181,13 @@ Capybara::SpecHelper.spec '#click_link' do
|
|
180
181
|
|
181
182
|
context "with :exact option" do
|
182
183
|
it "should accept partial matches when false" do
|
183
|
-
@session.click_link('abo', exact:
|
184
|
+
@session.click_link('abo', exact: false)
|
184
185
|
expect(@session).to have_content('Bar')
|
185
186
|
end
|
186
187
|
|
187
188
|
it "should not accept partial matches when true" do
|
188
189
|
expect do
|
189
|
-
@session.click_link('abo', exact:
|
190
|
+
@session.click_link('abo', exact: true)
|
190
191
|
end.to raise_error(Capybara::ElementNotFound)
|
191
192
|
end
|
192
193
|
end
|
@@ -1,15 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec '#current_scope' do
|
3
4
|
before do
|
4
5
|
@session.visit('/with_scope')
|
5
6
|
end
|
6
|
-
|
7
|
+
|
7
8
|
context "when not in a #within block" do
|
8
9
|
it "should return the document" do
|
9
10
|
expect(@session.current_scope).to be_kind_of Capybara::Node::Document
|
10
11
|
end
|
11
12
|
end
|
12
|
-
|
13
|
+
|
13
14
|
context "when in a #within block" do
|
14
15
|
it "should return the element in scope" do
|
15
16
|
@session.within(:css, "#simple_first_name") do
|
@@ -17,7 +18,7 @@ Capybara::SpecHelper.spec '#current_scope' do
|
|
17
18
|
end
|
18
19
|
end
|
19
20
|
end
|
20
|
-
|
21
|
+
|
21
22
|
context "when in a nested #within block" do
|
22
23
|
it "should return the element in scope" do
|
23
24
|
@session.within("//div[@id='for_bar']") do
|
@@ -1,24 +1,25 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "capybara/spec/test_app"
|
3
4
|
|
4
5
|
Capybara::SpecHelper.spec '#current_url, #current_path, #current_host' do
|
5
6
|
before :all do
|
6
|
-
@servers = 2
|
7
|
+
@servers = Array.new(2) { Capybara::Server.new(TestApp.new).boot }
|
7
8
|
# sanity check
|
8
9
|
expect(@servers[0].port).not_to eq(@servers[1].port)
|
9
|
-
expect(@servers.map
|
10
|
+
expect(@servers.map(&:port)).not_to include 80
|
10
11
|
end
|
11
12
|
|
12
13
|
def bases
|
13
14
|
@servers.map { |s| "http://#{s.host}:#{s.port}" }
|
14
15
|
end
|
15
16
|
|
16
|
-
def should_be_on
|
17
|
-
#This delay is to give fully async drivers (selenium w/chromedriver) time for the browser
|
18
|
-
#to get to its destination - should be removed when we have a waiting current_url matcher
|
19
|
-
sleep 0.1 # remove and adjust tests when a waiting current_url/path matcher is implemented
|
17
|
+
def should_be_on(server_index, path = "/host", scheme = "http")
|
20
18
|
# Check that we are on /host on the given server
|
21
19
|
s = @servers[server_index]
|
20
|
+
|
21
|
+
expect(@session).to have_current_path("#{scheme}://#{s.host}:#{s.port}#{path}", url: true)
|
22
|
+
|
22
23
|
expect(@session.current_url.chomp('?')).to eq("#{scheme}://#{s.host}:#{s.port}#{path}")
|
23
24
|
expect(@session.current_host).to eq("#{scheme}://#{s.host}") # no port
|
24
25
|
expect(@session.current_path).to eq(path)
|
@@ -104,4 +105,14 @@ Capybara::SpecHelper.spec '#current_url, #current_path, #current_host' do
|
|
104
105
|
expect { @session.current_url }.not_to raise_exception
|
105
106
|
expect { @session.current_path }.not_to raise_exception
|
106
107
|
end
|
108
|
+
|
109
|
+
context "within iframe", requires: [:frames] do
|
110
|
+
it "should get the url of the top level browsing context" do
|
111
|
+
@session.visit('/within_frames')
|
112
|
+
expect(@session.current_url).to match(/within_frames\z/)
|
113
|
+
@session.within_frame('frameOne') do
|
114
|
+
expect(@session.current_url).to match(/within_frames\z/)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
107
118
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec '#dismiss_confirm', requires: [:modals] do
|
3
4
|
before do
|
4
5
|
@session.visit('/with_js')
|
@@ -26,7 +27,6 @@ Capybara::SpecHelper.spec '#dismiss_confirm', requires: [:modals] do
|
|
26
27
|
end.to raise_error(Capybara::ModalNotFound)
|
27
28
|
end
|
28
29
|
|
29
|
-
|
30
30
|
it "should return the message presented" do
|
31
31
|
message = @session.dismiss_confirm do
|
32
32
|
@session.click_link('Open confirm')
|
@@ -31,6 +31,6 @@ Capybara::SpecHelper.spec '#assert_matches_selector' do
|
|
31
31
|
|
32
32
|
it "should accept a filter block" do
|
33
33
|
@element.assert_matches_selector(:css, 'span') { |el| el[:class] == "number" }
|
34
|
-
@element.assert_not_matches_selector(:css,'span') { |el| el[:class] == "not_number" }
|
34
|
+
@element.assert_not_matches_selector(:css, 'span') { |el| el[:class] == "not_number" }
|
35
35
|
end
|
36
36
|
end
|
@@ -52,10 +52,10 @@ Capybara::SpecHelper.spec '#match_selector?' do
|
|
52
52
|
it 'should accept a custom filter block' do
|
53
53
|
@session.visit('/form')
|
54
54
|
cbox = @session.find(:css, '#form_pets_dog')
|
55
|
-
expect(cbox).to match_selector(:checkbox){ |node| node[:id] == "form_pets_dog"}
|
56
|
-
expect(cbox).not_to match_selector(:checkbox){ |node| node[:id] != "form_pets_dog"}
|
57
|
-
expect(cbox.matches_selector?(:checkbox){ |node| node[:id] == "form_pets_dog"}).to be true
|
58
|
-
expect(cbox.matches_selector?(:checkbox){ |node| node[:id] != "form_pets_dog"}).to be false
|
55
|
+
expect(cbox).to match_selector(:checkbox) { |node| node[:id] == "form_pets_dog" }
|
56
|
+
expect(cbox).not_to match_selector(:checkbox) { |node| node[:id] != "form_pets_dog" }
|
57
|
+
expect(cbox.matches_selector?(:checkbox) { |node| node[:id] == "form_pets_dog" }).to be true
|
58
|
+
expect(cbox.matches_selector?(:checkbox) { |node| node[:id] != "form_pets_dog" }).to be false
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
@@ -103,4 +103,4 @@ Capybara::SpecHelper.spec '#not_matches_selector?' do
|
|
103
103
|
expect(@element.not_matches_xpath?("//span", text: "42")).to be false
|
104
104
|
expect(@element.not_matches_xpath?("//span", text: "Doesnotexist")).to be true
|
105
105
|
end
|
106
|
-
end
|
106
|
+
end
|
@@ -1,18 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec "#evaluate_async_script", requires: [:js] do
|
3
4
|
it "should evaluate the given script and return whatever it produces" do
|
4
5
|
@session.visit('/with_js')
|
5
6
|
expect(@session.evaluate_async_script("arguments[0](4)")).to eq(4)
|
6
7
|
end
|
7
8
|
|
8
|
-
it "should support passing elements as arguments to the script", requires: [
|
9
|
+
it "should support passing elements as arguments to the script", requires: %i[js es_args] do
|
9
10
|
@session.visit('/with_js')
|
10
11
|
el = @session.find(:css, '#drag p')
|
11
12
|
result = @session.evaluate_async_script("arguments[2]([arguments[0].innerText, arguments[1]])", el, "Doodle Funk")
|
12
13
|
expect(result).to eq ["This is a draggable element.", "Doodle Funk"]
|
13
14
|
end
|
14
15
|
|
15
|
-
it "should support returning elements after asynchronous operation", requires: [
|
16
|
+
it "should support returning elements after asynchronous operation", requires: %i[js es_args] do
|
16
17
|
@session.visit('/with_js')
|
17
18
|
@session.find(:css, '#change') # ensure page has loaded and element is available
|
18
19
|
el = @session.evaluate_async_script("var cb = arguments[0]; setTimeout(function(){ cb(document.getElementById('change')) }, 100)")
|
@@ -1,24 +1,25 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec "#evaluate_script", requires: [:js] do
|
3
4
|
it "should evaluate the given script and return whatever it produces" do
|
4
5
|
@session.visit('/with_js')
|
5
6
|
expect(@session.evaluate_script("1+3")).to eq(4)
|
6
7
|
end
|
7
8
|
|
8
|
-
it "should pass arguments to the script", requires: [
|
9
|
+
it "should pass arguments to the script", requires: %i[js es_args] do
|
9
10
|
@session.visit('/with_js')
|
10
11
|
@session.evaluate_script("document.getElementById('change').textContent = arguments[0]", "Doodle Funk")
|
11
12
|
expect(@session).to have_css('#change', text: 'Doodle Funk')
|
12
13
|
end
|
13
14
|
|
14
|
-
it "should support passing elements as arguments to the script", requires: [
|
15
|
+
it "should support passing elements as arguments to the script", requires: %i[js es_args] do
|
15
16
|
@session.visit('/with_js')
|
16
17
|
el = @session.find(:css, '#change')
|
17
18
|
@session.evaluate_script("arguments[0].textContent = arguments[1]", el, "Doodle Funk")
|
18
19
|
expect(@session).to have_css('#change', text: 'Doodle Funk')
|
19
20
|
end
|
20
21
|
|
21
|
-
it "should support returning elements", requires: [
|
22
|
+
it "should support returning elements", requires: %i[js es_args] do
|
22
23
|
@session.visit('/with_js')
|
23
24
|
@session.find(:css, '#change') # ensure page has loaded and element is available
|
24
25
|
el = @session.evaluate_script("document.getElementById('change')")
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec "#execute_script", requires: [:js] do
|
3
4
|
it "should execute the given script and return nothing" do
|
4
5
|
@session.visit('/with_js')
|
@@ -8,16 +9,16 @@ Capybara::SpecHelper.spec "#execute_script", requires: [:js] do
|
|
8
9
|
|
9
10
|
it "should be able to call functions defined in the page" do
|
10
11
|
@session.visit('/with_js')
|
11
|
-
expect{ @session.execute_script("$('#change').text('Funky Doodle')") }.not_to raise_error
|
12
|
+
expect { @session.execute_script("$('#change').text('Funky Doodle')") }.not_to raise_error
|
12
13
|
end
|
13
14
|
|
14
|
-
it "should pass arguments to the script", requires: [
|
15
|
+
it "should pass arguments to the script", requires: %i[js es_args] do
|
15
16
|
@session.visit('/with_js')
|
16
17
|
@session.execute_script("document.getElementById('change').textContent = arguments[0]", "Doodle Funk")
|
17
18
|
expect(@session).to have_css('#change', text: 'Doodle Funk')
|
18
19
|
end
|
19
20
|
|
20
|
-
it "should support passing elements as arguments to the script", requires: [
|
21
|
+
it "should support passing elements as arguments to the script", requires: %i[js es_args] do
|
21
22
|
@session.visit('/with_js')
|
22
23
|
el = @session.find(:css, '#change')
|
23
24
|
@session.execute_script("arguments[1].textContent = arguments[0]", "Doodle Funk", el)
|