capybara 2.15.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 +5 -5
- data/History.md +137 -2
- data/README.md +36 -25
- data/lib/capybara/config.rb +11 -57
- data/lib/capybara/cucumber.rb +2 -3
- data/lib/capybara/driver/base.rb +19 -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 +16 -13
- data/lib/capybara/minitest.rb +140 -137
- data/lib/capybara/node/actions.rb +68 -89
- 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 +32 -42
- data/lib/capybara/node/finders.rb +64 -71
- data/lib/capybara/node/matchers.rb +50 -71
- data/lib/capybara/node/simple.rb +11 -17
- data/lib/capybara/queries/ancestor_query.rb +12 -8
- data/lib/capybara/queries/base_query.rb +22 -18
- data/lib/capybara/queries/current_path_query.rb +12 -25
- data/lib/capybara/queries/match_query.rb +3 -7
- data/lib/capybara/queries/selector_query.rb +100 -96
- data/lib/capybara/queries/sibling_query.rb +5 -5
- 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 +52 -39
- 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 +116 -58
- 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 +172 -163
- data/lib/capybara/selenium/node.rb +218 -104
- data/lib/capybara/server.rb +3 -2
- data/lib/capybara/session/config.rb +47 -59
- data/lib/capybara/session/matchers.rb +23 -14
- data/lib/capybara/session.rb +175 -229
- data/lib/capybara/spec/fixtures/no_extension +1 -0
- data/lib/capybara/spec/public/test.js +38 -6
- 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 +30 -1
- 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 +31 -23
- data/lib/capybara/spec/session/assert_title.rb +13 -3
- data/lib/capybara/spec/session/attach_file_spec.rb +57 -29
- 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 +19 -8
- 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 +23 -0
- data/lib/capybara/spec/session/evaluate_script_spec.rb +5 -4
- 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 +69 -0
- 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 +49 -22
- data/lib/capybara/spec/session/has_field_spec.rb +4 -3
- data/lib/capybara/spec/session/has_link_spec.rb +5 -4
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +76 -0
- data/lib/capybara/spec/session/has_select_spec.rb +32 -31
- 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 +107 -58
- 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 +21 -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 +7 -6
- data/lib/capybara/spec/session/visit_spec.rb +64 -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 +36 -18
- data/lib/capybara/spec/test_app.rb +17 -9
- data/lib/capybara/spec/views/form.erb +7 -0
- data/lib/capybara/spec/views/initial_alert.erb +10 -0
- data/lib/capybara/spec/views/with_fixed_header_footer.erb +17 -0
- data/lib/capybara/spec/views/with_hover.erb +5 -0
- data/lib/capybara/spec/views/with_html.erb +27 -1
- data/lib/capybara/spec/views/with_js.erb +11 -0
- 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 +29 -26
- data/spec/basic_node_spec.rb +1 -0
- data/spec/capybara_spec.rb +16 -69
- 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 +13 -4
- data/spec/minitest_spec_spec.rb +12 -3
- 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 +20 -11
- data/spec/selenium_spec_edge.rb +27 -0
- data/spec/selenium_spec_ie.rb +31 -0
- data/spec/selenium_spec_marionette.rb +38 -12
- data/spec/server_spec.rb +33 -33
- data/spec/session_spec.rb +2 -1
- data/spec/shared_selenium_session.rb +82 -22
- data/spec/spec_helper.rb +3 -6
- metadata +76 -81
- data/lib/capybara/query.rb +0 -7
- data/spec/selenium_spec_firefox.rb +0 -68
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Capybara::SpecHelper.spec "#to_capybara_node" do
|
4
|
+
before do
|
5
|
+
@session.visit('/with_html')
|
6
|
+
end
|
7
|
+
|
8
|
+
class NodeWrapper
|
9
|
+
def initialize(element); @element = element end
|
10
|
+
def to_capybara_node(); @element end
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should support have_xxx expectations" do
|
14
|
+
para = NodeWrapper.new(@session.find(:css, '#first'))
|
15
|
+
expect(para).to have_link("ullamco")
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should support within" do
|
19
|
+
para = NodeWrapper.new(@session.find(:css, '#first'))
|
20
|
+
expect(@session).to have_css('#second')
|
21
|
+
@session.within(para) do
|
22
|
+
expect(@session).to have_link('ullamco')
|
23
|
+
expect(@session).not_to have_css('#second')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should generate correct errors" do
|
28
|
+
para = NodeWrapper.new(@session.find(:css, '#first'))
|
29
|
+
expect do
|
30
|
+
expect(para).to have_text("Header Class Test One")
|
31
|
+
end.to raise_error(/^expected to find text "Header Class Test One" in "Lore/)
|
32
|
+
expect do
|
33
|
+
expect(para).to have_css('#second')
|
34
|
+
end.to raise_error(/^expected to find visible css "#second" within #<Capybara::Node::Element/)
|
35
|
+
end
|
36
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec '#refresh' do
|
3
4
|
it "reload the page" do
|
4
5
|
@session.visit('/form')
|
@@ -17,12 +18,15 @@ Capybara::SpecHelper.spec '#refresh' do
|
|
17
18
|
end
|
18
19
|
|
19
20
|
it "it reposts" do
|
21
|
+
if marionette?(@session) || edge?(@session) || ie?(@session)
|
22
|
+
skip "Firefox and Edge insist on prompting without providing a way to suppress"
|
23
|
+
end
|
20
24
|
@session.visit('/form')
|
21
25
|
@session.select('Sweden', from: 'form_region')
|
22
26
|
@session.click_button('awesome')
|
23
|
-
expect
|
27
|
+
expect do
|
24
28
|
@session.refresh
|
25
29
|
sleep 2
|
26
|
-
|
30
|
+
end.to change { extract_results(@session)['post_count'] }.by(1)
|
27
31
|
end
|
28
32
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec '#reset_session!' do
|
3
4
|
it "removes cookies" do
|
4
5
|
@session.visit('/set_cookie')
|
@@ -62,6 +63,24 @@ Capybara::SpecHelper.spec '#reset_session!' do
|
|
62
63
|
expect(@session.current_path).to eq("/")
|
63
64
|
end
|
64
65
|
|
66
|
+
it "closes extra windows", requires: [:windows] do
|
67
|
+
@session.visit('/with_html')
|
68
|
+
@session.open_new_window
|
69
|
+
@session.open_new_window
|
70
|
+
expect(@session.windows.size).to eq 3
|
71
|
+
@session.reset_session!
|
72
|
+
expect(@session.windows.size).to eq 1
|
73
|
+
end
|
74
|
+
|
75
|
+
it "closes extra windows when not on the first window", requires: [:windows] do
|
76
|
+
@session.visit('/with_html')
|
77
|
+
@session.switch_to_window(@session.open_new_window)
|
78
|
+
@session.open_new_window
|
79
|
+
expect(@session.windows.size).to eq 3
|
80
|
+
@session.reset_session!
|
81
|
+
expect(@session.windows.size).to eq 1
|
82
|
+
end
|
83
|
+
|
65
84
|
context "When reuse_server == false" do
|
66
85
|
before do
|
67
86
|
@reuse_server = Capybara.reuse_server
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'launchy'
|
3
4
|
|
4
5
|
Capybara::SpecHelper.spec '#save_and_open_screenshot' do
|
@@ -13,8 +14,8 @@ Capybara::SpecHelper.spec '#save_and_open_screenshot' do
|
|
13
14
|
|
14
15
|
@session.save_and_open_screenshot
|
15
16
|
|
16
|
-
expect(@session.driver).to have_received(:save_screenshot)
|
17
|
-
with(expected_file_regex, {})
|
17
|
+
expect(@session.driver).to have_received(:save_screenshot)
|
18
|
+
.with(expected_file_regex, {})
|
18
19
|
expect(Launchy).to have_received(:open).with(expected_file_regex)
|
19
20
|
end
|
20
21
|
|
@@ -25,8 +26,8 @@ Capybara::SpecHelper.spec '#save_and_open_screenshot' do
|
|
25
26
|
|
26
27
|
@session.save_and_open_screenshot(custom_path)
|
27
28
|
|
28
|
-
expect(@session.driver).to have_received(:save_screenshot)
|
29
|
-
with(/#{custom_path}$/, {})
|
29
|
+
expect(@session.driver).to have_received(:save_screenshot)
|
30
|
+
.with(/#{custom_path}$/, {})
|
30
31
|
expect(Launchy).to have_received(:open).with(/#{custom_path}$/)
|
31
32
|
end
|
32
33
|
|
@@ -34,14 +35,8 @@ Capybara::SpecHelper.spec '#save_and_open_screenshot' do
|
|
34
35
|
it 'prints out a correct warning message', requires: [:screenshot] do
|
35
36
|
file_path = File.join(Dir.tmpdir, 'test.png')
|
36
37
|
allow(@session).to receive(:require).with('launchy').and_raise(LoadError)
|
37
|
-
|
38
|
-
|
38
|
+
expect(@session).to receive(:warn).with("File saved to #{file_path}.\nPlease install the launchy gem to open the file automatically.")
|
39
39
|
@session.save_and_open_screenshot(file_path)
|
40
|
-
|
41
|
-
expect(@session).to have_received(:warn).
|
42
|
-
with("File saved to #{file_path}.")
|
43
|
-
expect(@session).to have_received(:warn).
|
44
|
-
with('Please install the launchy gem to open the file automatically.')
|
45
40
|
end
|
46
41
|
end
|
47
42
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec '#save_page' do
|
3
4
|
let(:alternative_path) { File.join(Dir.pwd, "save_and_open_page_tmp") }
|
4
5
|
before do
|
@@ -6,7 +7,6 @@ Capybara::SpecHelper.spec '#save_page' do
|
|
6
7
|
end
|
7
8
|
|
8
9
|
after do
|
9
|
-
Capybara.save_and_open_page_path = nil
|
10
10
|
Capybara.save_path = nil
|
11
11
|
Dir.glob("capybara-*.html").each do |file|
|
12
12
|
FileUtils.rm(file)
|
@@ -104,20 +104,4 @@ Capybara::SpecHelper.spec '#save_page' do
|
|
104
104
|
expect(result).to include("Bar")
|
105
105
|
end
|
106
106
|
end
|
107
|
-
|
108
|
-
context "with deprecated save_and_open_page_path" do
|
109
|
-
it "can store files in a specified directory" do
|
110
|
-
Capybara.save_and_open_page_path = alternative_path
|
111
|
-
@session.save_page
|
112
|
-
path = Dir.glob(alternative_path + "/capybara-*.html").first
|
113
|
-
expect(File.read(path)).to include("Another World")
|
114
|
-
end
|
115
|
-
|
116
|
-
it "returns an absolute path in given directory" do
|
117
|
-
Capybara.save_and_open_page_path = alternative_path
|
118
|
-
result = @session.save_page
|
119
|
-
path = File.expand_path(Dir.glob(alternative_path + "/capybara-*.html").first, alternative_path)
|
120
|
-
expect(result).to eq(path)
|
121
|
-
end
|
122
|
-
end
|
123
107
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec '#save_screenshot', requires: [:screenshot] do
|
3
4
|
let(:alternative_path) { File.join(Dir.pwd, "save_screenshot_tmp") }
|
4
5
|
before do
|
@@ -6,7 +7,6 @@ Capybara::SpecHelper.spec '#save_screenshot', requires: [:screenshot] do
|
|
6
7
|
end
|
7
8
|
|
8
9
|
after do
|
9
|
-
Capybara.save_and_open_page_path = nil
|
10
10
|
Capybara.save_path = nil
|
11
11
|
FileUtils.rm_rf alternative_path
|
12
12
|
end
|
@@ -16,7 +16,7 @@ Capybara::SpecHelper.spec '#save_screenshot', requires: [:screenshot] do
|
|
16
16
|
|
17
17
|
@session.save_screenshot
|
18
18
|
|
19
|
-
regexp = Regexp.new(File.
|
19
|
+
regexp = Regexp.new(File.join(Dir.pwd, 'capybara-\d+\.png'))
|
20
20
|
expect(@session.driver).to have_received(:save_screenshot).with(regexp, {})
|
21
21
|
end
|
22
22
|
|
@@ -36,7 +36,7 @@ Capybara::SpecHelper.spec '#save_screenshot', requires: [:screenshot] do
|
|
36
36
|
|
37
37
|
@session.save_screenshot
|
38
38
|
|
39
|
-
regexp = Regexp.new(File.
|
39
|
+
regexp = Regexp.new(File.join(alternative_path, 'capybara-\d+\.png'))
|
40
40
|
expect(@session.driver).to have_received(:save_screenshot).with(regexp, {})
|
41
41
|
end
|
42
42
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec "#select" do
|
3
4
|
before do
|
4
5
|
@session.visit('/form')
|
@@ -13,24 +14,24 @@ Capybara::SpecHelper.spec "#select" do
|
|
13
14
|
expect(@session.find_field('Title').value).to eq('Miss')
|
14
15
|
end
|
15
16
|
|
16
|
-
it "should allow selecting options where there are inexact matches" do
|
17
|
+
it "should allow selecting exact options where there are inexact matches", :exact_false do
|
17
18
|
@session.select("Mr", from: 'Title')
|
18
19
|
expect(@session.find_field('Title').value).to eq('Mr')
|
19
20
|
end
|
20
21
|
|
21
|
-
it "should allow selecting options where they are the only inexact match" do
|
22
|
+
it "should allow selecting options where they are the only inexact match", :exact_false do
|
22
23
|
@session.select("Mis", from: 'Title')
|
23
24
|
expect(@session.find_field('Title').value).to eq('Miss')
|
24
25
|
end
|
25
26
|
|
26
|
-
it "should not allow selecting options where they are the only inexact match if `
|
27
|
-
|
27
|
+
it "should not allow selecting options where they are the only inexact match if `exact: true` is specified" do
|
28
|
+
sel = @session.find(:select, 'Title')
|
28
29
|
expect do
|
29
|
-
|
30
|
+
sel.select("Mis", exact: true)
|
30
31
|
end.to raise_error(Capybara::ElementNotFound)
|
31
32
|
end
|
32
33
|
|
33
|
-
it "should not allow selecting an option if the match is ambiguous" do
|
34
|
+
it "should not allow selecting an option if the match is ambiguous", :exact_false do
|
34
35
|
expect do
|
35
36
|
@session.select("M", from: 'Title')
|
36
37
|
end.to raise_error(Capybara::Ambiguous)
|
@@ -79,7 +80,7 @@ Capybara::SpecHelper.spec "#select" do
|
|
79
80
|
end
|
80
81
|
|
81
82
|
it "casts to string" do
|
82
|
-
@session.select(:
|
83
|
+
@session.select(:Miss, from: :Title)
|
83
84
|
expect(@session.find_field('Title').value).to eq('Miss')
|
84
85
|
end
|
85
86
|
|
@@ -94,7 +95,7 @@ Capybara::SpecHelper.spec "#select" do
|
|
94
95
|
|
95
96
|
context "with an option that doesn't exist" do
|
96
97
|
it "should raise an error" do
|
97
|
-
msg =
|
98
|
+
msg = /^Unable to find visible option "Does not Exist" within/
|
98
99
|
expect do
|
99
100
|
@session.select('Does not Exist', from: 'form_locale')
|
100
101
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
@@ -123,32 +124,32 @@ Capybara::SpecHelper.spec "#select" do
|
|
123
124
|
|
124
125
|
context "with multiple select" do
|
125
126
|
it "should return an empty value" do
|
126
|
-
expect(@session.find_field('
|
127
|
+
expect(@session.find_field('Languages').value).to eq([])
|
127
128
|
end
|
128
129
|
|
129
130
|
it "should return value of the selected options" do
|
130
|
-
@session.select("Ruby", from: '
|
131
|
-
@session.select("Javascript", from: '
|
132
|
-
expect(@session.find_field('
|
131
|
+
@session.select("Ruby", from: 'Languages')
|
132
|
+
@session.select("Javascript", from: 'Languages')
|
133
|
+
expect(@session.find_field('Languages').value).to include('Ruby', 'Javascript')
|
133
134
|
end
|
134
135
|
|
135
136
|
it "should select one option" do
|
136
|
-
@session.select("Ruby", from: '
|
137
|
+
@session.select("Ruby", from: 'Languages')
|
137
138
|
@session.click_button('awesome')
|
138
139
|
expect(extract_results(@session)['languages']).to eq(['Ruby'])
|
139
140
|
end
|
140
141
|
|
141
142
|
it "should select multiple options" do
|
142
|
-
@session.select("Ruby", from: '
|
143
|
-
@session.select("Javascript", from: '
|
143
|
+
@session.select("Ruby", from: 'Languages')
|
144
|
+
@session.select("Javascript", from: 'Languages')
|
144
145
|
@session.click_button('awesome')
|
145
146
|
expect(extract_results(@session)['languages']).to include('Ruby', 'Javascript')
|
146
147
|
end
|
147
148
|
|
148
149
|
it "should remain selected if already selected" do
|
149
|
-
@session.select("Ruby", from: '
|
150
|
-
@session.select("Javascript", from: '
|
151
|
-
@session.select("Ruby", from: '
|
150
|
+
@session.select("Ruby", from: 'Languages')
|
151
|
+
@session.select("Javascript", from: 'Languages')
|
152
|
+
@session.select("Ruby", from: 'Languages')
|
152
153
|
@session.click_button('awesome')
|
153
154
|
expect(extract_results(@session)['languages']).to include('Ruby', 'Javascript')
|
154
155
|
end
|
@@ -161,7 +162,7 @@ Capybara::SpecHelper.spec "#select" do
|
|
161
162
|
context "with :exact option" do
|
162
163
|
context "when `false`" do
|
163
164
|
it "can match select box approximately" do
|
164
|
-
@session.select("Finish", from: "Loc", exact:
|
165
|
+
@session.select("Finish", from: "Loc", exact: false)
|
165
166
|
@session.click_button("awesome")
|
166
167
|
expect(extract_results(@session)["locale"]).to eq("fi")
|
167
168
|
end
|
@@ -194,7 +195,7 @@ Capybara::SpecHelper.spec "#select" do
|
|
194
195
|
|
195
196
|
it "can match option approximately when :from not given" do
|
196
197
|
expect do
|
197
|
-
@session.select("made-up language", exact:
|
198
|
+
@session.select("made-up language", exact: true)
|
198
199
|
end.to raise_error(Capybara::ElementNotFound)
|
199
200
|
end
|
200
201
|
end
|
@@ -59,7 +59,7 @@ Capybara::SpecHelper.spec Capybara::Selector do
|
|
59
59
|
it "can find by class" do
|
60
60
|
expect(@session.find(:field, class: 'confusion-checkbox')['id']).to eq 'confusion_checkbox'
|
61
61
|
expect(@session).to have_selector(:field, class: 'confusion', count: 3)
|
62
|
-
expect(@session.find(:field, class: ['confusion','confusion-textarea'])['id']).to eq 'confusion_textarea'
|
62
|
+
expect(@session.find(:field, class: ['confusion', 'confusion-textarea'])['id']).to eq 'confusion_textarea'
|
63
63
|
end
|
64
64
|
end
|
65
|
-
end
|
65
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec '#sibling' do
|
3
4
|
before do
|
4
5
|
@session.visit('/with_html')
|
@@ -42,7 +43,6 @@ Capybara::SpecHelper.spec '#sibling' do
|
|
42
43
|
end
|
43
44
|
end
|
44
45
|
|
45
|
-
|
46
46
|
it "should raise ElementNotFound with a useful default message if nothing was found" do
|
47
47
|
el = @session.find(:css, '#child')
|
48
48
|
expect do
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec '#text' do
|
3
4
|
it "should print the text of the page" do
|
4
5
|
@session.visit('/with_simple_html')
|
@@ -50,9 +51,22 @@ Capybara::SpecHelper.spec '#text' do
|
|
50
51
|
after { Capybara.default_selector = :xpath }
|
51
52
|
end
|
52
53
|
|
53
|
-
it "should
|
54
|
+
it "should be correctly normalized when visible" do
|
55
|
+
@session.visit('/with_html')
|
56
|
+
el = @session.find(:css, '#normalized')
|
57
|
+
expect(el.text).to eq "Some text\nMore text\nAnd more text\nEven more text on multiple lines"
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should be a textContent with irrelevant whitespace collapsed when non-visible" do
|
61
|
+
@session.visit('/with_html')
|
62
|
+
el = @session.find(:css, '#non_visible_normalized', visible: false)
|
63
|
+
expect(el.text(:all)).to eq "Some textMore text And more text Even more text on multiple lines"
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should strip correctly" do
|
54
67
|
@session.visit('/with_html')
|
55
|
-
@session.find(:css, '#
|
56
|
-
expect(
|
68
|
+
el = @session.find(:css, '#ws')
|
69
|
+
expect(el.text).to eq " "
|
70
|
+
expect(el.text(:all)).to eq " "
|
57
71
|
end
|
58
72
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
Capybara::SpecHelper.spec '#title' do
|
3
2
|
|
3
|
+
Capybara::SpecHelper.spec '#title' do
|
4
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')
|
@@ -14,4 +14,14 @@ Capybara::SpecHelper.spec '#title' do
|
|
14
14
|
end
|
15
15
|
after { Capybara.default_selector = :xpath }
|
16
16
|
end
|
17
|
+
|
18
|
+
context "within iframe", requires: [:frames] do
|
19
|
+
it "should get the title of the top level browsing context" do
|
20
|
+
@session.visit('/within_frames')
|
21
|
+
expect(@session.title).to eq('With Frames')
|
22
|
+
@session.within_frame('frameOne') do
|
23
|
+
expect(@session.title).to eq('With Frames')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
17
27
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec "#uncheck" do
|
3
4
|
before do
|
4
5
|
@session.visit('/form')
|
@@ -19,7 +20,7 @@ Capybara::SpecHelper.spec "#uncheck" do
|
|
19
20
|
end
|
20
21
|
|
21
22
|
it "casts to string" do
|
22
|
-
@session.uncheck(:
|
23
|
+
@session.uncheck(:form_pets_hamster)
|
23
24
|
@session.click_button('awesome')
|
24
25
|
expect(extract_results(@session)['pets']).to include('dog')
|
25
26
|
expect(extract_results(@session)['pets']).not_to include('hamster')
|
@@ -69,11 +70,11 @@ Capybara::SpecHelper.spec "#uncheck" do
|
|
69
70
|
end
|
70
71
|
|
71
72
|
it "should raise original error when no label available" do
|
72
|
-
expect { @session.uncheck('
|
73
|
+
expect { @session.uncheck('form_cars_porsche') }.to raise_error(Capybara::ElementNotFound, 'Unable to find visible checkbox "form_cars_porsche" that is not disabled')
|
73
74
|
end
|
74
75
|
|
75
76
|
it "should raise error if not allowed to click label" do
|
76
|
-
expect{@session.uncheck('form_cars_jaguar', allow_label_click: false)}.to raise_error(Capybara::ElementNotFound, 'Unable to find visible checkbox "form_cars_jaguar" that is not disabled')
|
77
|
+
expect { @session.uncheck('form_cars_jaguar', allow_label_click: false) }.to raise_error(Capybara::ElementNotFound, 'Unable to find visible checkbox "form_cars_jaguar" that is not disabled')
|
77
78
|
end
|
78
79
|
end
|
79
80
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec "#unselect" do
|
3
4
|
before do
|
4
5
|
@session.visit('/form')
|
@@ -40,7 +41,7 @@ Capybara::SpecHelper.spec "#unselect" do
|
|
40
41
|
end
|
41
42
|
|
42
43
|
it "casts to string" do
|
43
|
-
@session.unselect(:
|
44
|
+
@session.unselect(:Briefs, from: :Underwear)
|
44
45
|
@session.click_button('awesome')
|
45
46
|
expect(extract_results(@session)['underwear']).to include('Commando', 'Boxerbriefs')
|
46
47
|
expect(extract_results(@session)['underwear']).not_to include('Briefs')
|
@@ -64,7 +65,7 @@ Capybara::SpecHelper.spec "#unselect" do
|
|
64
65
|
|
65
66
|
context "with an option that doesn't exist" do
|
66
67
|
it "should raise an error" do
|
67
|
-
msg =
|
68
|
+
msg = /^Unable to find visible option "Does not Exist" within/
|
68
69
|
expect do
|
69
70
|
@session.unselect('Does not Exist', from: 'form_underwear')
|
70
71
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
@@ -74,19 +75,19 @@ Capybara::SpecHelper.spec "#unselect" do
|
|
74
75
|
context "with :exact option" do
|
75
76
|
context "when `false`" do
|
76
77
|
it "can match select box approximately" do
|
77
|
-
@session.unselect("Boxerbriefs", from: "Under", exact:
|
78
|
+
@session.unselect("Boxerbriefs", from: "Under", exact: false)
|
78
79
|
@session.click_button("awesome")
|
79
80
|
expect(extract_results(@session)["underwear"]).not_to include("Boxerbriefs")
|
80
81
|
end
|
81
82
|
|
82
83
|
it "can match option approximately" do
|
83
|
-
@session.unselect("Boxerbr", from: "Underwear", exact:
|
84
|
+
@session.unselect("Boxerbr", from: "Underwear", exact: false)
|
84
85
|
@session.click_button("awesome")
|
85
86
|
expect(extract_results(@session)["underwear"]).not_to include("Boxerbriefs")
|
86
87
|
end
|
87
88
|
|
88
89
|
it "can match option approximately when :from not given" do
|
89
|
-
@session.unselect("Boxerbr", exact:
|
90
|
+
@session.unselect("Boxerbr", exact: false)
|
90
91
|
@session.click_button("awesome")
|
91
92
|
expect(extract_results(@session)["underwear"]).not_to include("Boxerbriefs")
|
92
93
|
end
|
@@ -107,7 +108,7 @@ Capybara::SpecHelper.spec "#unselect" do
|
|
107
108
|
|
108
109
|
it "can match option approximately when :from not given" do
|
109
110
|
expect do
|
110
|
-
@session.unselect("Boxerbr", exact:
|
111
|
+
@session.unselect("Boxerbr", exact: true)
|
111
112
|
end.to raise_error(Capybara::ElementNotFound)
|
112
113
|
end
|
113
114
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec '#visit' do
|
3
4
|
it "should fetch a response from the driver with a relative url" do
|
4
5
|
@session.visit('/')
|
@@ -27,6 +28,14 @@ Capybara::SpecHelper.spec '#visit' do
|
|
27
28
|
expect(@session).to have_content('Hello world!')
|
28
29
|
end
|
29
30
|
|
31
|
+
it "should fetch a response when sequentially visiting same destination with a target" do
|
32
|
+
skip "Chrome/chromedriver has an issue visiting URL with target after visiting same URL without target" if chrome_lt?(65.0, @session)
|
33
|
+
@session.visit('/form')
|
34
|
+
expect(@session).to have_css('#form_title')
|
35
|
+
@session.visit('/form#form_title')
|
36
|
+
expect(@session).to have_css('#form_title')
|
37
|
+
end
|
38
|
+
|
30
39
|
it "raises any errors caught inside the server", requires: [:server] do
|
31
40
|
quietly { @session.visit("/error") }
|
32
41
|
expect do
|
@@ -40,7 +49,6 @@ Capybara::SpecHelper.spec '#visit' do
|
|
40
49
|
end
|
41
50
|
|
42
51
|
context "when Capybara.always_include_port is true" do
|
43
|
-
|
44
52
|
let(:root_uri) do
|
45
53
|
@session.visit('/')
|
46
54
|
URI.parse(@session.current_url)
|
@@ -63,6 +71,55 @@ Capybara::SpecHelper.spec '#visit' do
|
|
63
71
|
expect(URI.parse(@session.current_url).port).to eq(root_uri.port)
|
64
72
|
expect(@session).to have_content('Another World')
|
65
73
|
end
|
74
|
+
|
75
|
+
it "should add the server port to a visited url if no port specified", requires: [:server] do
|
76
|
+
expect(@session.driver).to receive(:visit).with("http://www.example.com:#{@session.server.port}")
|
77
|
+
@session.visit("http://www.example.com")
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should not override the visit specified port even if default for scheme", requires: [:server] do
|
81
|
+
expect(@session.driver).to receive(:visit).with("http://www.example.com:80")
|
82
|
+
@session.visit('http://www.example.com:80')
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should give preference to app_host port if specified", requires: [:server] do
|
86
|
+
Capybara.app_host = "http://www.example.com:6666"
|
87
|
+
expect(@session.driver).to receive(:visit).with("http://www.example.com:6666/random")
|
88
|
+
@session.visit('/random')
|
89
|
+
end
|
90
|
+
|
91
|
+
it "shouldn't override port if no server", requires: [:server] do
|
92
|
+
session = Capybara::Session.new(@session.mode, nil)
|
93
|
+
expect(session.driver).to receive(:visit).with("http://www.google.com")
|
94
|
+
session.visit("http://www.google.com")
|
95
|
+
end
|
96
|
+
|
97
|
+
it "shouldn't override port if no server but app_host is set", requires: [:server] do
|
98
|
+
session = Capybara::Session.new(@session.mode, nil)
|
99
|
+
Capybara.app_host = "http://www.example.com:6666"
|
100
|
+
expect(session.driver).to receive(:visit).with("http://www.google.com")
|
101
|
+
session.visit("http://www.google.com")
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
context "when Capybara.always_include_port is false" do
|
106
|
+
before(:each) do
|
107
|
+
Capybara.always_include_port = false
|
108
|
+
end
|
109
|
+
|
110
|
+
it "shouldn't overwrite port if app_host is set", requires: [:server] do
|
111
|
+
session = Capybara::Session.new(@session.mode, nil)
|
112
|
+
Capybara.app_host = "http://www.example.com:6666"
|
113
|
+
expect(session.driver).to receive(:visit).with("http://www.google.com")
|
114
|
+
session.visit("http://www.google.com")
|
115
|
+
end
|
116
|
+
|
117
|
+
it "shouldn't overwrite port if port specfified", requires: [:server] do
|
118
|
+
session = Capybara::Session.new(@session.mode, nil)
|
119
|
+
Capybara.app_host = "http://www.example.com:6666"
|
120
|
+
expect(session.driver).to receive(:visit).with("http://www.google.com:99")
|
121
|
+
session.visit("http://www.google.com:99")
|
122
|
+
end
|
66
123
|
end
|
67
124
|
|
68
125
|
context "without a server", requires: [:server] do
|
@@ -96,8 +153,13 @@ Capybara::SpecHelper.spec '#visit' do
|
|
96
153
|
@session.visit('/times')
|
97
154
|
expect(@session).to have_content('redirection complete')
|
98
155
|
end
|
99
|
-
end
|
100
156
|
|
157
|
+
it "should work if `app_host` has a trailing /", requires: [:server] do
|
158
|
+
Capybara.app_host = "http://#{@session.server.host}:#{@session.server.port}/"
|
159
|
+
@session.visit('/')
|
160
|
+
expect(@session).to have_content('Hello world!')
|
161
|
+
end
|
162
|
+
end
|
101
163
|
|
102
164
|
it "should send no referer when visiting a page" do
|
103
165
|
@session.visit '/get_referer'
|
@@ -133,5 +195,4 @@ Capybara::SpecHelper.spec '#visit' do
|
|
133
195
|
@session.visit('/get_cookie')
|
134
196
|
expect(@session).to have_content('root cookie')
|
135
197
|
end
|
136
|
-
|
137
198
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
|
+
Capybara::SpecHelper.spec '#become_closed', requires: %i[windows js] do
|
3
4
|
before(:each) do
|
4
5
|
@window = @session.current_window
|
5
6
|
@session.visit('/with_windows')
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec '#switch_to_window', requires: [:windows] do
|
3
4
|
before(:each) do
|
4
5
|
@window = @session.current_window
|
@@ -121,7 +122,7 @@ Capybara::SpecHelper.spec '#switch_to_window', requires: [:windows] do
|
|
121
122
|
it "should wait for window to appear" do
|
122
123
|
@session.find(:css, '#openWindowWithTimeout').click
|
123
124
|
expect do
|
124
|
-
@session.switch_to_window(wait: 5) { @session.title == 'Title of the first popup'}
|
125
|
+
@session.switch_to_window(wait: 5) { @session.title == 'Title of the first popup' }
|
125
126
|
end.not_to raise_error
|
126
127
|
end
|
127
128
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Capybara::SpecHelper.spec '#window_opened_by', requires: [:windows] do
|
3
4
|
before(:each) do
|
4
5
|
@window = @session.current_window
|
@@ -20,7 +21,7 @@ Capybara::SpecHelper.spec '#window_opened_by', requires: [:windows] do
|
|
20
21
|
it 'should raise error if value of :wait is less than timeout' do
|
21
22
|
# So large value is used as `driver.window_handles` takes up to 800 ms on Travis
|
22
23
|
Capybara.using_wait_time 2 do
|
23
|
-
button
|
24
|
+
button = @session.find(:css, '#openWindowWithLongerTimeout')
|
24
25
|
expect do
|
25
26
|
@session.window_opened_by(wait: 0.3) do
|
26
27
|
button.click
|