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
@@ -1,23 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
Capybara::SpecHelper.spec '#title' do
|
4
|
-
it
|
4
|
+
it 'should get the title of the page' do
|
5
5
|
@session.visit('/with_title')
|
6
6
|
expect(@session.title).to eq('Test Title')
|
7
7
|
end
|
8
8
|
|
9
|
-
context
|
9
|
+
context 'with css as default selector' do
|
10
10
|
before { Capybara.default_selector = :css }
|
11
11
|
|
12
|
-
it
|
12
|
+
it 'should get the title of the page' do
|
13
13
|
@session.visit('/with_title')
|
14
14
|
expect(@session.title).to eq('Test Title')
|
15
15
|
end
|
16
16
|
after { Capybara.default_selector = :xpath }
|
17
17
|
end
|
18
18
|
|
19
|
-
context
|
20
|
-
it
|
19
|
+
context 'within iframe', requires: [:frames] do
|
20
|
+
it 'should get the title of the top level browsing context' do
|
21
21
|
@session.visit('/within_frames')
|
22
22
|
expect(@session.title).to eq('With Frames')
|
23
23
|
@session.within_frame('frameOne') do
|
@@ -1,87 +1,91 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
Capybara::SpecHelper.spec
|
3
|
+
Capybara::SpecHelper.spec '#uncheck' do
|
4
4
|
before do
|
5
5
|
@session.visit('/form')
|
6
6
|
end
|
7
7
|
|
8
|
-
it
|
9
|
-
@session.uncheck(
|
8
|
+
it 'should uncheck a checkbox by id' do
|
9
|
+
@session.uncheck('form_pets_hamster')
|
10
10
|
@session.click_button('awesome')
|
11
11
|
expect(extract_results(@session)['pets']).to include('dog')
|
12
12
|
expect(extract_results(@session)['pets']).not_to include('hamster')
|
13
13
|
end
|
14
14
|
|
15
|
-
it
|
16
|
-
@session.uncheck(
|
15
|
+
it 'should uncheck a checkbox by label' do
|
16
|
+
@session.uncheck('Hamster')
|
17
17
|
@session.click_button('awesome')
|
18
18
|
expect(extract_results(@session)['pets']).to include('dog')
|
19
19
|
expect(extract_results(@session)['pets']).not_to include('hamster')
|
20
20
|
end
|
21
21
|
|
22
|
-
it
|
23
|
-
@session.uncheck(id:
|
22
|
+
it 'should work without a locator string' do
|
23
|
+
@session.uncheck(id: 'form_pets_hamster')
|
24
24
|
@session.click_button('awesome')
|
25
25
|
expect(extract_results(@session)['pets']).to include('dog')
|
26
26
|
expect(extract_results(@session)['pets']).not_to include('hamster')
|
27
27
|
end
|
28
28
|
|
29
|
-
it
|
29
|
+
it 'casts to string' do
|
30
30
|
@session.uncheck(:form_pets_hamster)
|
31
31
|
@session.click_button('awesome')
|
32
32
|
expect(extract_results(@session)['pets']).to include('dog')
|
33
33
|
expect(extract_results(@session)['pets']).not_to include('hamster')
|
34
34
|
end
|
35
35
|
|
36
|
-
context
|
37
|
-
it
|
36
|
+
context 'with :exact option' do
|
37
|
+
it 'should accept partial matches when false' do
|
38
38
|
@session.uncheck('Ham', exact: false)
|
39
39
|
@session.click_button('awesome')
|
40
40
|
expect(extract_results(@session)['pets']).not_to include('hamster')
|
41
41
|
end
|
42
42
|
|
43
|
-
it
|
43
|
+
it 'should not accept partial matches when true' do
|
44
44
|
expect do
|
45
45
|
@session.uncheck('Ham', exact: true)
|
46
46
|
end.to raise_error(Capybara::ElementNotFound)
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
context
|
51
|
-
context
|
50
|
+
context 'when checkbox hidden' do
|
51
|
+
context 'with Capybara.automatic_label_click == true' do
|
52
52
|
around do |spec|
|
53
53
|
old_click_label, Capybara.automatic_label_click = Capybara.automatic_label_click, true
|
54
54
|
spec.run
|
55
55
|
Capybara.automatic_label_click = old_click_label
|
56
56
|
end
|
57
57
|
|
58
|
-
it
|
58
|
+
it 'should uncheck via clicking the label with :for attribute if possible' do
|
59
59
|
expect(@session.find(:checkbox, 'form_cars_jaguar', checked: true, visible: :hidden)).to be_truthy
|
60
60
|
@session.uncheck('form_cars_jaguar')
|
61
61
|
@session.click_button('awesome')
|
62
62
|
expect(extract_results(@session)['cars']).not_to include('jaguar')
|
63
63
|
end
|
64
64
|
|
65
|
-
it
|
65
|
+
it 'should uncheck via clicking the wrapping label if possible' do
|
66
66
|
expect(@session.find(:checkbox, 'form_cars_koenigsegg', checked: true, visible: :hidden)).to be_truthy
|
67
67
|
@session.uncheck('form_cars_koenigsegg')
|
68
68
|
@session.click_button('awesome')
|
69
69
|
expect(extract_results(@session)['cars']).not_to include('koenigsegg')
|
70
70
|
end
|
71
71
|
|
72
|
-
it
|
72
|
+
it 'should not click the label if unneeded' do
|
73
73
|
expect(@session.find(:checkbox, 'form_cars_tesla', unchecked: true, visible: :hidden)).to be_truthy
|
74
74
|
@session.uncheck('form_cars_tesla')
|
75
75
|
@session.click_button('awesome')
|
76
76
|
expect(extract_results(@session)['cars']).not_to include('tesla')
|
77
77
|
end
|
78
78
|
|
79
|
-
it
|
80
|
-
expect { @session.uncheck('form_cars_porsche') }.to raise_error(Capybara::ElementNotFound, 'Unable to find visible checkbox "form_cars_porsche"
|
79
|
+
it 'should raise original error when no label available' do
|
80
|
+
expect { @session.uncheck('form_cars_porsche') }.to raise_error(Capybara::ElementNotFound, 'Unable to find visible checkbox "form_cars_porsche"')
|
81
81
|
end
|
82
82
|
|
83
|
-
it
|
84
|
-
expect { @session.uncheck('form_cars_jaguar', allow_label_click: false) }.to raise_error(Capybara::ElementNotFound, 'Unable to find visible checkbox "form_cars_jaguar"
|
83
|
+
it 'should raise error if not allowed to click label' do
|
84
|
+
expect { @session.uncheck('form_cars_jaguar', allow_label_click: false) }.to raise_error(Capybara::ElementNotFound, 'Unable to find visible checkbox "form_cars_jaguar"')
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'should include node filter description in error if necessary' do
|
88
|
+
expect { @session.uncheck('form_cars_maserati', allow_label_click: false) }.to raise_error(Capybara::ElementNotFound, 'Unable to find visible checkbox "form_cars_maserati" that is not disabled')
|
85
89
|
end
|
86
90
|
end
|
87
91
|
end
|
@@ -1,46 +1,46 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
Capybara::SpecHelper.spec
|
3
|
+
Capybara::SpecHelper.spec '#unselect' do
|
4
4
|
before do
|
5
5
|
@session.visit('/form')
|
6
6
|
end
|
7
7
|
|
8
|
-
context
|
9
|
-
it
|
8
|
+
context 'with multiple select' do
|
9
|
+
it 'should unselect an option from a select box by id' do
|
10
10
|
@session.unselect('Commando', from: 'form_underwear')
|
11
11
|
@session.click_button('awesome')
|
12
12
|
expect(extract_results(@session)['underwear']).to include('Briefs', 'Boxerbriefs')
|
13
13
|
expect(extract_results(@session)['underwear']).not_to include('Commando')
|
14
14
|
end
|
15
15
|
|
16
|
-
it
|
16
|
+
it 'should unselect an option without a select box' do
|
17
17
|
@session.unselect('Commando')
|
18
18
|
@session.click_button('awesome')
|
19
19
|
expect(extract_results(@session)['underwear']).to include('Briefs', 'Boxerbriefs')
|
20
20
|
expect(extract_results(@session)['underwear']).not_to include('Commando')
|
21
21
|
end
|
22
22
|
|
23
|
-
it
|
23
|
+
it 'should unselect an option from a select box by label' do
|
24
24
|
@session.unselect('Commando', from: 'Underwear')
|
25
25
|
@session.click_button('awesome')
|
26
26
|
expect(extract_results(@session)['underwear']).to include('Briefs', 'Boxerbriefs')
|
27
27
|
expect(extract_results(@session)['underwear']).not_to include('Commando')
|
28
28
|
end
|
29
29
|
|
30
|
-
it
|
31
|
-
@session.unselect(
|
30
|
+
it 'should favour exact matches to option labels' do
|
31
|
+
@session.unselect('Briefs', from: 'Underwear')
|
32
32
|
@session.click_button('awesome')
|
33
33
|
expect(extract_results(@session)['underwear']).to include('Commando', 'Boxerbriefs')
|
34
34
|
expect(extract_results(@session)['underwear']).not_to include('Briefs')
|
35
35
|
end
|
36
36
|
|
37
|
-
it
|
37
|
+
it 'should escape quotes' do
|
38
38
|
@session.unselect("Frenchman's Pantalons", from: 'Underwear')
|
39
39
|
@session.click_button('awesome')
|
40
40
|
expect(extract_results(@session)['underwear']).not_to include("Frenchman's Pantalons")
|
41
41
|
end
|
42
42
|
|
43
|
-
it
|
43
|
+
it 'casts to string' do
|
44
44
|
@session.unselect(:Briefs, from: :Underwear)
|
45
45
|
@session.click_button('awesome')
|
46
46
|
expect(extract_results(@session)['underwear']).to include('Commando', 'Boxerbriefs')
|
@@ -48,15 +48,15 @@ Capybara::SpecHelper.spec "#unselect" do
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
context
|
52
|
-
it
|
53
|
-
expect { @session.unselect(
|
51
|
+
context 'with single select' do
|
52
|
+
it 'should raise an error' do
|
53
|
+
expect { @session.unselect('English', from: 'form_locale') }.to raise_error(Capybara::UnselectNotAllowed)
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
57
|
context "with a locator that doesn't exist" do
|
58
|
-
it
|
59
|
-
msg =
|
58
|
+
it 'should raise an error' do
|
59
|
+
msg = 'Unable to find select box "does not exist"'
|
60
60
|
expect do
|
61
61
|
@session.unselect('foo', from: 'does not exist')
|
62
62
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
@@ -64,51 +64,51 @@ Capybara::SpecHelper.spec "#unselect" do
|
|
64
64
|
end
|
65
65
|
|
66
66
|
context "with an option that doesn't exist" do
|
67
|
-
it
|
68
|
-
msg = /^Unable to find
|
67
|
+
it 'should raise an error' do
|
68
|
+
msg = /^Unable to find option "Does not Exist" within/
|
69
69
|
expect do
|
70
70
|
@session.unselect('Does not Exist', from: 'form_underwear')
|
71
71
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
-
context
|
76
|
-
context
|
77
|
-
it
|
78
|
-
@session.unselect(
|
79
|
-
@session.click_button(
|
80
|
-
expect(extract_results(@session)[
|
75
|
+
context 'with :exact option' do
|
76
|
+
context 'when `false`' do
|
77
|
+
it 'can match select box approximately' do
|
78
|
+
@session.unselect('Boxerbriefs', from: 'Under', exact: false)
|
79
|
+
@session.click_button('awesome')
|
80
|
+
expect(extract_results(@session)['underwear']).not_to include('Boxerbriefs')
|
81
81
|
end
|
82
82
|
|
83
|
-
it
|
84
|
-
@session.unselect(
|
85
|
-
@session.click_button(
|
86
|
-
expect(extract_results(@session)[
|
83
|
+
it 'can match option approximately' do
|
84
|
+
@session.unselect('Boxerbr', from: 'Underwear', exact: false)
|
85
|
+
@session.click_button('awesome')
|
86
|
+
expect(extract_results(@session)['underwear']).not_to include('Boxerbriefs')
|
87
87
|
end
|
88
88
|
|
89
|
-
it
|
90
|
-
@session.unselect(
|
91
|
-
@session.click_button(
|
92
|
-
expect(extract_results(@session)[
|
89
|
+
it 'can match option approximately when :from not given' do
|
90
|
+
@session.unselect('Boxerbr', exact: false)
|
91
|
+
@session.click_button('awesome')
|
92
|
+
expect(extract_results(@session)['underwear']).not_to include('Boxerbriefs')
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
-
context
|
97
|
-
it
|
96
|
+
context 'when `true`' do
|
97
|
+
it 'can match select box approximately' do
|
98
98
|
expect do
|
99
|
-
@session.unselect(
|
99
|
+
@session.unselect('Boxerbriefs', from: 'Under', exact: true)
|
100
100
|
end.to raise_error(Capybara::ElementNotFound)
|
101
101
|
end
|
102
102
|
|
103
|
-
it
|
103
|
+
it 'can match option approximately' do
|
104
104
|
expect do
|
105
|
-
@session.unselect(
|
105
|
+
@session.unselect('Boxerbr', from: 'Underwear', exact: true)
|
106
106
|
end.to raise_error(Capybara::ElementNotFound)
|
107
107
|
end
|
108
108
|
|
109
|
-
it
|
109
|
+
it 'can match option approximately when :from not given' do
|
110
110
|
expect do
|
111
|
-
@session.unselect(
|
111
|
+
@session.unselect('Boxerbr', exact: true)
|
112
112
|
end.to raise_error(Capybara::ElementNotFound)
|
113
113
|
end
|
114
114
|
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
Capybara::SpecHelper.spec '#visit' do
|
4
|
-
it
|
4
|
+
it 'should fetch a response from the driver with a relative url' do
|
5
5
|
@session.visit('/')
|
6
6
|
expect(@session).to have_content('Hello world!')
|
7
7
|
@session.visit('/foo')
|
8
8
|
expect(@session).to have_content('Another World')
|
9
9
|
end
|
10
10
|
|
11
|
-
it
|
11
|
+
it 'should fetch a response from the driver with an absolute url with a port' do
|
12
12
|
# Preparation
|
13
13
|
@session.visit('/')
|
14
14
|
root_uri = URI.parse(@session.current_url)
|
@@ -28,27 +28,26 @@ Capybara::SpecHelper.spec '#visit' do
|
|
28
28
|
expect(@session).to have_content('Hello world!')
|
29
29
|
end
|
30
30
|
|
31
|
-
it
|
32
|
-
skip "Chrome/chromedriver has an issue visiting URL with target after visiting same URL without target" if chrome_lt?(65.0, @session)
|
31
|
+
it 'should fetch a response when sequentially visiting same destination with a target' do
|
33
32
|
@session.visit('/form')
|
34
33
|
expect(@session).to have_css('#form_title')
|
35
34
|
@session.visit('/form#form_title')
|
36
35
|
expect(@session).to have_css('#form_title')
|
37
36
|
end
|
38
37
|
|
39
|
-
it
|
40
|
-
quietly { @session.visit(
|
38
|
+
it 'raises any errors caught inside the server', requires: [:server] do
|
39
|
+
quietly { @session.visit('/error') }
|
41
40
|
expect do
|
42
|
-
@session.visit(
|
41
|
+
@session.visit('/')
|
43
42
|
end.to raise_error(TestApp::TestAppError)
|
44
43
|
end
|
45
44
|
|
46
|
-
it
|
47
|
-
@session.visit(
|
48
|
-
@session.assert_no_selector :xpath,
|
45
|
+
it 'should be able to open non-http url', requires: [:about_scheme] do
|
46
|
+
@session.visit('about:blank')
|
47
|
+
@session.assert_no_selector :xpath, '/html/body/*'
|
49
48
|
end
|
50
49
|
|
51
|
-
context
|
50
|
+
context 'when Capybara.always_include_port is true' do
|
52
51
|
let(:root_uri) do
|
53
52
|
@session.visit('/')
|
54
53
|
URI.parse(@session.current_url)
|
@@ -62,7 +61,7 @@ Capybara::SpecHelper.spec '#visit' do
|
|
62
61
|
Capybara.always_include_port = false
|
63
62
|
end
|
64
63
|
|
65
|
-
it
|
64
|
+
it 'should fetch a response from the driver with an absolute url without a port' do
|
66
65
|
@session.visit("http://#{root_uri.host}/")
|
67
66
|
expect(URI.parse(@session.current_url).port).to eq(root_uri.port)
|
68
67
|
expect(@session).to have_content('Hello world!')
|
@@ -72,133 +71,133 @@ Capybara::SpecHelper.spec '#visit' do
|
|
72
71
|
expect(@session).to have_content('Another World')
|
73
72
|
end
|
74
73
|
|
75
|
-
it
|
74
|
+
it 'should add the server port to a visited url if no port specified', requires: [:server] do
|
76
75
|
allow(@session.driver).to receive(:visit)
|
77
|
-
@session.visit(
|
76
|
+
@session.visit('http://www.example.com')
|
78
77
|
expect(@session.driver).to have_received(:visit).with("http://www.example.com:#{@session.server.port}")
|
79
78
|
end
|
80
79
|
|
81
|
-
it
|
80
|
+
it 'should not override the visit specified port even if default for scheme', requires: [:server] do
|
82
81
|
allow(@session.driver).to receive(:visit)
|
83
82
|
@session.visit('http://www.example.com:80')
|
84
|
-
expect(@session.driver).to have_received(:visit).with(
|
83
|
+
expect(@session.driver).to have_received(:visit).with('http://www.example.com:80')
|
85
84
|
end
|
86
85
|
|
87
|
-
it
|
86
|
+
it 'should give preference to app_host port if specified', requires: [:server] do
|
88
87
|
allow(@session.driver).to receive(:visit)
|
89
|
-
Capybara.app_host =
|
88
|
+
Capybara.app_host = 'http://www.example.com:6666'
|
90
89
|
@session.visit('/random')
|
91
|
-
expect(@session.driver).to have_received(:visit).with(
|
90
|
+
expect(@session.driver).to have_received(:visit).with('http://www.example.com:6666/random')
|
92
91
|
end
|
93
92
|
|
94
93
|
it "shouldn't override port if no server", requires: [:server] do
|
95
94
|
session = Capybara::Session.new(@session.mode, nil)
|
96
95
|
allow(session.driver).to receive(:visit)
|
97
|
-
session.visit(
|
98
|
-
expect(session.driver).to have_received(:visit).with(
|
96
|
+
session.visit('http://www.google.com')
|
97
|
+
expect(session.driver).to have_received(:visit).with('http://www.google.com')
|
99
98
|
end
|
100
99
|
|
101
100
|
it "shouldn't override port if no server but app_host is set", requires: [:server] do
|
102
101
|
session = Capybara::Session.new(@session.mode, nil)
|
103
|
-
Capybara.app_host =
|
102
|
+
Capybara.app_host = 'http://www.example.com:6666'
|
104
103
|
allow(session.driver).to receive(:visit)
|
105
|
-
session.visit(
|
106
|
-
expect(session.driver).to have_received(:visit).with(
|
104
|
+
session.visit('http://www.google.com')
|
105
|
+
expect(session.driver).to have_received(:visit).with('http://www.google.com')
|
107
106
|
end
|
108
107
|
end
|
109
108
|
|
110
|
-
context
|
109
|
+
context 'when Capybara.always_include_port is false' do
|
111
110
|
before do
|
112
111
|
Capybara.always_include_port = false
|
113
112
|
end
|
114
113
|
|
115
114
|
it "shouldn't overwrite port if app_host is set", requires: [:server] do
|
116
115
|
session = Capybara::Session.new(@session.mode, nil)
|
117
|
-
Capybara.app_host =
|
116
|
+
Capybara.app_host = 'http://www.example.com:6666'
|
118
117
|
allow(session.driver).to receive(:visit)
|
119
|
-
session.visit(
|
120
|
-
expect(session.driver).to have_received(:visit).with(
|
118
|
+
session.visit('http://www.google.com')
|
119
|
+
expect(session.driver).to have_received(:visit).with('http://www.google.com')
|
121
120
|
end
|
122
121
|
|
123
122
|
it "shouldn't overwrite port if port specfified", requires: [:server] do
|
124
123
|
session = Capybara::Session.new(@session.mode, nil)
|
125
|
-
Capybara.app_host =
|
124
|
+
Capybara.app_host = 'http://www.example.com:6666'
|
126
125
|
allow(session.driver).to receive(:visit)
|
127
|
-
session.visit(
|
128
|
-
expect(session.driver).to have_received(:visit).with(
|
126
|
+
session.visit('http://www.google.com:99')
|
127
|
+
expect(session.driver).to have_received(:visit).with('http://www.google.com:99')
|
129
128
|
end
|
130
129
|
end
|
131
130
|
|
132
|
-
context
|
133
|
-
it
|
131
|
+
context 'without a server', requires: [:server] do
|
132
|
+
it 'should respect `app_host`' do
|
134
133
|
serverless_session = Capybara::Session.new(@session.mode, nil)
|
135
134
|
Capybara.app_host = "http://#{@session.server.host}:#{@session.server.port}"
|
136
|
-
serverless_session.visit(
|
137
|
-
expect(serverless_session).to have_content(
|
135
|
+
serverless_session.visit('/foo')
|
136
|
+
expect(serverless_session).to have_content('Another World')
|
138
137
|
end
|
139
138
|
|
140
|
-
it
|
139
|
+
it 'should visit a fully qualified URL' do
|
141
140
|
serverless_session = Capybara::Session.new(@session.mode, nil)
|
142
141
|
serverless_session.visit("http://#{@session.server.host}:#{@session.server.port}/foo")
|
143
|
-
expect(serverless_session).to have_content(
|
142
|
+
expect(serverless_session).to have_content('Another World')
|
144
143
|
end
|
145
144
|
end
|
146
145
|
|
147
|
-
context
|
148
|
-
it
|
146
|
+
context 'with Capybara.app_host set' do
|
147
|
+
it 'should override server', requires: [:server] do
|
149
148
|
another_session = Capybara::Session.new(@session.mode, @session.app.dup)
|
150
149
|
Capybara.app_host = "http://#{@session.server.host}:#{@session.server.port}"
|
151
150
|
another_session.visit('/foo')
|
152
|
-
expect(another_session).to have_content(
|
151
|
+
expect(another_session).to have_content('Another World')
|
153
152
|
expect(another_session.current_url).to start_with(Capybara.app_host)
|
154
153
|
expect(URI.parse(another_session.current_url).port).not_to eq another_session.server.port
|
155
154
|
expect(URI.parse(another_session.current_url).port).to eq @session.server.port
|
156
155
|
end
|
157
156
|
|
158
|
-
it
|
157
|
+
it 'should append relative path', requires: [:server] do
|
159
158
|
Capybara.app_host = "http://#{@session.server.host}:#{@session.server.port}/redirect/0"
|
160
159
|
@session.visit('/times')
|
161
160
|
expect(@session).to have_content('redirection complete')
|
162
161
|
end
|
163
162
|
|
164
|
-
it
|
163
|
+
it 'should work if `app_host` has a trailing /', requires: [:server] do
|
165
164
|
Capybara.app_host = "http://#{@session.server.host}:#{@session.server.port}/"
|
166
165
|
@session.visit('/')
|
167
166
|
expect(@session).to have_content('Hello world!')
|
168
167
|
end
|
169
168
|
end
|
170
169
|
|
171
|
-
it
|
170
|
+
it 'should send no referer when visiting a page' do
|
172
171
|
@session.visit '/get_referer'
|
173
172
|
expect(@session).to have_content 'No referer'
|
174
173
|
end
|
175
174
|
|
176
|
-
it
|
175
|
+
it 'should send no referer when visiting a second page' do
|
177
176
|
@session.visit '/get_referer'
|
178
177
|
@session.visit '/get_referer'
|
179
178
|
expect(@session).to have_content 'No referer'
|
180
179
|
end
|
181
180
|
|
182
|
-
it
|
181
|
+
it 'should send a referer when following a link' do
|
183
182
|
@session.visit '/referer_base'
|
184
183
|
@session.find('//a[@href="/get_referer"]').click
|
185
184
|
expect(@session).to have_content %r{http://.*/referer_base}
|
186
185
|
end
|
187
186
|
|
188
|
-
it
|
187
|
+
it 'should preserve the original referer URL when following a redirect' do
|
189
188
|
@session.visit('/referer_base')
|
190
189
|
@session.find('//a[@href="/redirect_to_get_referer"]').click
|
191
190
|
expect(@session).to have_content %r{http://.*/referer_base}
|
192
191
|
end
|
193
192
|
|
194
|
-
it
|
193
|
+
it 'should send a referer when submitting a form' do
|
195
194
|
@session.visit '/referer_base'
|
196
195
|
@session.find('//input').click
|
197
196
|
expect(@session).to have_content %r{http://.*/referer_base}
|
198
197
|
end
|
199
198
|
|
200
|
-
it
|
201
|
-
@session.visit(
|
199
|
+
it 'can set cookie if a blank path is specified' do
|
200
|
+
@session.visit('')
|
202
201
|
@session.visit('/get_cookie')
|
203
202
|
expect(@session).to have_content('root cookie')
|
204
203
|
end
|