capybara 2.6.2 → 2.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.md +40 -15
- data/README.md +45 -38
- data/lib/capybara.rb +86 -10
- data/lib/capybara/cucumber.rb +1 -0
- data/lib/capybara/driver/base.rb +5 -2
- data/lib/capybara/driver/node.rb +1 -0
- data/lib/capybara/dsl.rb +1 -0
- data/lib/capybara/helpers.rb +3 -2
- data/lib/capybara/node/actions.rb +6 -0
- data/lib/capybara/node/base.rb +1 -0
- data/lib/capybara/node/document.rb +1 -0
- data/lib/capybara/node/document_matchers.rb +1 -0
- data/lib/capybara/node/element.rb +1 -0
- data/lib/capybara/node/finders.rb +3 -2
- data/lib/capybara/node/matchers.rb +72 -2
- data/lib/capybara/node/simple.rb +6 -3
- data/lib/capybara/queries/base_query.rb +1 -0
- data/lib/capybara/queries/current_path_query.rb +1 -0
- data/lib/capybara/queries/match_query.rb +21 -0
- data/lib/capybara/queries/selector_query.rb +138 -0
- data/lib/capybara/queries/text_query.rb +1 -0
- data/lib/capybara/queries/title_query.rb +1 -0
- data/lib/capybara/query.rb +3 -131
- data/lib/capybara/rack_test/browser.rb +1 -0
- data/lib/capybara/rack_test/css_handlers.rb +1 -0
- data/lib/capybara/rack_test/driver.rb +6 -4
- data/lib/capybara/rack_test/form.rb +1 -0
- data/lib/capybara/rack_test/node.rb +1 -0
- data/lib/capybara/rails.rb +2 -1
- data/lib/capybara/result.rb +1 -0
- data/lib/capybara/rspec.rb +1 -0
- data/lib/capybara/rspec/features.rb +1 -0
- data/lib/capybara/rspec/matchers.rb +54 -3
- data/lib/capybara/selector.rb +175 -75
- data/lib/capybara/selector/filter.rb +48 -0
- data/lib/capybara/selenium/driver.rb +24 -7
- data/lib/capybara/selenium/node.rb +1 -0
- data/lib/capybara/server.rb +38 -6
- data/lib/capybara/session.rb +30 -14
- data/lib/capybara/session/matchers.rb +2 -1
- data/lib/capybara/spec/public/test.js +6 -0
- data/lib/capybara/spec/session/accept_alert_spec.rb +2 -1
- data/lib/capybara/spec/session/accept_confirm_spec.rb +2 -1
- data/lib/capybara/spec/session/accept_prompt_spec.rb +2 -1
- data/lib/capybara/spec/session/all_spec.rb +1 -0
- data/lib/capybara/spec/session/assert_current_path.rb +1 -0
- data/lib/capybara/spec/session/assert_selector.rb +1 -0
- data/lib/capybara/spec/session/assert_text.rb +1 -0
- data/lib/capybara/spec/session/assert_title.rb +1 -0
- data/lib/capybara/spec/session/attach_file_spec.rb +1 -0
- data/lib/capybara/spec/session/body_spec.rb +1 -0
- data/lib/capybara/spec/session/check_spec.rb +1 -0
- data/lib/capybara/spec/session/choose_spec.rb +1 -0
- data/lib/capybara/spec/session/click_button_spec.rb +1 -0
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +1 -0
- data/lib/capybara/spec/session/click_link_spec.rb +1 -0
- data/lib/capybara/spec/session/current_scope_spec.rb +2 -1
- data/lib/capybara/spec/session/current_url_spec.rb +1 -0
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +2 -1
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +2 -1
- data/lib/capybara/spec/session/element/assert_match_selector.rb +31 -0
- data/lib/capybara/spec/session/element/match_css_spec.rb +17 -0
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +23 -0
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +63 -0
- data/lib/capybara/spec/session/evaluate_script_spec.rb +1 -0
- data/lib/capybara/spec/session/execute_script_spec.rb +1 -0
- data/lib/capybara/spec/session/fill_in_spec.rb +1 -0
- data/lib/capybara/spec/session/find_button_spec.rb +1 -0
- data/lib/capybara/spec/session/find_by_id_spec.rb +1 -0
- data/lib/capybara/spec/session/find_field_spec.rb +1 -0
- data/lib/capybara/spec/session/find_link_spec.rb +1 -0
- data/lib/capybara/spec/session/find_spec.rb +1 -0
- data/lib/capybara/spec/session/first_spec.rb +1 -0
- 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_button_spec.rb +1 -0
- data/lib/capybara/spec/session/has_css_spec.rb +1 -0
- data/lib/capybara/spec/session/has_current_path_spec.rb +1 -0
- data/lib/capybara/spec/session/has_field_spec.rb +13 -0
- data/lib/capybara/spec/session/has_link_spec.rb +1 -0
- data/lib/capybara/spec/session/has_select_spec.rb +19 -0
- data/lib/capybara/spec/session/has_selector_spec.rb +6 -0
- data/lib/capybara/spec/session/has_table_spec.rb +1 -0
- data/lib/capybara/spec/session/has_text_spec.rb +1 -0
- 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 +1 -0
- data/lib/capybara/spec/session/html_spec.rb +1 -0
- data/lib/capybara/spec/session/node_spec.rb +29 -0
- data/lib/capybara/spec/session/reset_session_spec.rb +35 -1
- 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 +3 -2
- data/lib/capybara/spec/session/save_page_spec.rb +34 -2
- data/lib/capybara/spec/session/save_screenshot_spec.rb +31 -1
- data/lib/capybara/spec/session/screenshot_spec.rb +3 -1
- data/lib/capybara/spec/session/select_spec.rb +1 -0
- data/lib/capybara/spec/session/selectors_spec.rb +35 -0
- data/lib/capybara/spec/session/text_spec.rb +1 -0
- data/lib/capybara/spec/session/title_spec.rb +2 -1
- data/lib/capybara/spec/session/uncheck_spec.rb +1 -0
- data/lib/capybara/spec/session/unselect_spec.rb +1 -0
- data/lib/capybara/spec/session/visit_spec.rb +1 -0
- data/lib/capybara/spec/session/window/become_closed_spec.rb +1 -0
- 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 +1 -0
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +1 -0
- data/lib/capybara/spec/session/window/window_spec.rb +1 -8
- data/lib/capybara/spec/session/window/windows_spec.rb +1 -0
- data/lib/capybara/spec/session/window/within_window_spec.rb +2 -3
- data/lib/capybara/spec/session/within_frame_spec.rb +1 -0
- data/lib/capybara/spec/session/within_spec.rb +1 -0
- data/lib/capybara/spec/spec_helper.rb +2 -0
- data/lib/capybara/spec/test_app.rb +1 -0
- data/lib/capybara/spec/views/buttons.erb +1 -0
- data/lib/capybara/spec/views/fieldsets.erb +2 -1
- data/lib/capybara/spec/views/form.erb +24 -0
- data/lib/capybara/spec/views/frame_child.erb +2 -1
- data/lib/capybara/spec/views/frame_one.erb +2 -1
- data/lib/capybara/spec/views/frame_parent.erb +2 -1
- data/lib/capybara/spec/views/frame_two.erb +2 -1
- data/lib/capybara/spec/views/header_links.erb +1 -0
- data/lib/capybara/spec/views/host_links.erb +1 -0
- data/lib/capybara/spec/views/path.erb +1 -0
- data/lib/capybara/spec/views/popup_one.erb +1 -0
- data/lib/capybara/spec/views/popup_two.erb +1 -0
- data/lib/capybara/spec/views/postback.erb +2 -1
- data/lib/capybara/spec/views/tables.erb +1 -0
- data/lib/capybara/spec/views/with_base_tag.erb +1 -0
- data/lib/capybara/spec/views/with_count.erb +2 -1
- data/lib/capybara/spec/views/with_hover.erb +2 -1
- data/lib/capybara/spec/views/with_html.erb +3 -0
- data/lib/capybara/spec/views/with_html_entities.erb +1 -0
- data/lib/capybara/spec/views/with_js.erb +5 -0
- data/lib/capybara/spec/views/with_scope.erb +1 -0
- data/lib/capybara/spec/views/with_simple_html.erb +2 -1
- data/lib/capybara/spec/views/with_slow_unload.erb +17 -0
- data/lib/capybara/spec/views/with_title.erb +2 -1
- data/lib/capybara/spec/views/with_unload_alert.erb +12 -0
- data/lib/capybara/spec/views/with_windows.erb +1 -0
- data/lib/capybara/spec/views/within_frames.erb +2 -1
- data/lib/capybara/version.rb +2 -1
- data/lib/capybara/window.rb +1 -0
- data/spec/basic_node_spec.rb +1 -0
- data/spec/capybara_spec.rb +28 -1
- data/spec/dsl_spec.rb +1 -0
- data/spec/fixtures/selenium_driver_rspec_failure.rb +1 -0
- data/spec/fixtures/selenium_driver_rspec_success.rb +1 -0
- data/spec/rack_test_spec.rb +1 -0
- data/spec/result_spec.rb +1 -0
- data/spec/rspec/features_spec.rb +1 -0
- data/spec/rspec/matchers_spec.rb +1 -0
- data/spec/rspec/scenarios_spec.rb +1 -0
- data/spec/rspec/views_spec.rb +1 -0
- data/spec/rspec_spec.rb +1 -0
- data/spec/selector_spec.rb +55 -1
- data/spec/selenium_spec.rb +6 -2
- data/spec/selenium_spec_chrome.rb +1 -0
- data/spec/server_spec.rb +101 -13
- data/spec/spec_helper.rb +1 -0
- metadata +16 -6
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
Capybara::SpecHelper.spec '#dismiss_confirm', :requires => [:modals] do
|
2
3
|
before do
|
3
4
|
@session.visit('/with_js')
|
@@ -32,4 +33,4 @@ Capybara::SpecHelper.spec '#dismiss_confirm', :requires => [:modals] do
|
|
32
33
|
end
|
33
34
|
expect(message).to eq('Confirm opened')
|
34
35
|
end
|
35
|
-
end
|
36
|
+
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
Capybara::SpecHelper.spec '#dismiss_prompt', :requires => [:modals] do
|
2
3
|
before do
|
3
4
|
@session.visit('/with_js')
|
@@ -16,4 +17,4 @@ Capybara::SpecHelper.spec '#dismiss_prompt', :requires => [:modals] do
|
|
16
17
|
end
|
17
18
|
expect(message).to eq('Prompt opened')
|
18
19
|
end
|
19
|
-
end
|
20
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
Capybara::SpecHelper.spec '#assert_matches_selector' do
|
2
|
+
before do
|
3
|
+
@session.visit('/with_html')
|
4
|
+
@element = @session.find(:css, 'span', text: '42')
|
5
|
+
end
|
6
|
+
|
7
|
+
it "should be true if the given selector matches the element" do
|
8
|
+
expect(@element.assert_matches_selector(:css, '.number')).to be true
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should be false if the given selector does not match the element" do
|
12
|
+
expect { @element.assert_matches_selector(:css, '.not_number') }.to raise_error(Capybara::ElementNotFound)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should not be callable on the session" do
|
16
|
+
expect { @session.assert_matches_selector(:css, '.number') }.to raise_error(NoMethodError)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should wait for match to occur", requires: [:js] do
|
20
|
+
@session.visit('/with_js')
|
21
|
+
input = @session.find(:css, '#disable-on-click')
|
22
|
+
|
23
|
+
expect(input.assert_matches_selector(:css, 'input:enabled')).to be true
|
24
|
+
input.click
|
25
|
+
expect(input.assert_matches_selector(:css, 'input:disabled')).to be true
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should not accept count options" do
|
29
|
+
expect { @element.assert_matches_selector(:css, '.number', count: 1) }.to raise_error(ArgumentError)
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Capybara::SpecHelper.spec '#match_css?' do
|
2
|
+
before do
|
3
|
+
@session.visit('/with_html')
|
4
|
+
@element = @session.find(:css, 'span', text: '42')
|
5
|
+
end
|
6
|
+
|
7
|
+
it "should be true if the given selector matches the element" do
|
8
|
+
expect(@element).to match_css("span")
|
9
|
+
expect(@element).to match_css("span.number")
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should be false if the given selector does not match" do
|
13
|
+
expect(@element).not_to match_css("div")
|
14
|
+
expect(@element).not_to match_css("p a#doesnotexist")
|
15
|
+
expect(@element).not_to match_css("p.nosuchclass")
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
Capybara::SpecHelper.spec '#match_xpath?' do
|
2
|
+
before do
|
3
|
+
@session.visit('/with_html')
|
4
|
+
@element = @session.find(:css, 'span.number')
|
5
|
+
end
|
6
|
+
|
7
|
+
it "should be true if the given selector is on the page" do
|
8
|
+
expect(@element).to match_xpath("//span")
|
9
|
+
expect(@element).to match_xpath("//span[@class='number']")
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should be false if the given selector is not on the page" do
|
13
|
+
expect(@element).not_to match_xpath("//abbr")
|
14
|
+
expect(@element).not_to match_xpath("//div")
|
15
|
+
expect(@element).not_to match_xpath("//span[@class='not_a_number']")
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should use xpath even if default selector is CSS" do
|
19
|
+
Capybara.default_selector = :css
|
20
|
+
expect(@element).not_to have_xpath("//span[@class='not_a_number']")
|
21
|
+
expect(@element).not_to have_xpath("//div[@class='number']")
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
Capybara::SpecHelper.spec '#match_xpath?' do
|
2
|
+
before do
|
3
|
+
@session.visit('/with_html')
|
4
|
+
@element = @session.find('//span', text: '42')
|
5
|
+
end
|
6
|
+
|
7
|
+
it "should be true if the element matches the given selector" do
|
8
|
+
expect(@element).to match_selector(:xpath, "//span")
|
9
|
+
expect(@element).to match_selector(:css, 'span.number')
|
10
|
+
expect(@element.matches_selector?(:css, 'span.number')).to be true
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should be false if the element does not match the given selector" do
|
14
|
+
expect(@element).not_to match_selector(:xpath, "//div")
|
15
|
+
expect(@element).not_to match_selector(:css, "span.not_a_number")
|
16
|
+
expect(@element.matches_selector?(:css, "span.not_a_number")).to be false
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should use default selector" do
|
20
|
+
Capybara.default_selector = :css
|
21
|
+
expect(@element).not_to match_selector("span.not_a_number")
|
22
|
+
expect(@element).to match_selector("span.number")
|
23
|
+
end
|
24
|
+
|
25
|
+
context "with text" do
|
26
|
+
it "should discard all matches where the given string is not contained" do
|
27
|
+
expect(@element).to match_selector("//span", :text => "42")
|
28
|
+
expect(@element).not_to match_selector("//span", :text => "Doesnotexist")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
Capybara::SpecHelper.spec '#not_matches_selector?' do
|
34
|
+
before do
|
35
|
+
@session.visit('/with_html')
|
36
|
+
@element = @session.find(:css, "span", text: 42)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should be false if the given selector matches the element" do
|
40
|
+
expect(@element).not_to not_match_selector(:xpath, "//span")
|
41
|
+
expect(@element).not_to not_match_selector(:css, "span.number")
|
42
|
+
expect(@element.not_matches_selector?(:css, "span.number")).to be false
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should be true if the given selector does not match the element" do
|
46
|
+
expect(@element).to not_match_selector(:xpath, "//abbr")
|
47
|
+
expect(@element).to not_match_selector(:css, "p a#doesnotexist")
|
48
|
+
expect(@element.not_matches_selector?(:css, "p a#doesnotexist")).to be true
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should use default selector" do
|
52
|
+
Capybara.default_selector = :css
|
53
|
+
expect(@element).to not_match_selector("p a#doesnotexist")
|
54
|
+
expect(@element).not_to not_match_selector("span.number")
|
55
|
+
end
|
56
|
+
|
57
|
+
context "with text" do
|
58
|
+
it "should discard all matches where the given string is contained" do
|
59
|
+
expect(@element).not_to not_match_selector(:css, "span.number", :text => "42")
|
60
|
+
expect(@element).to not_match_selector(:css, "span.number", :text => "Doesnotexist")
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end if Gem::Version.new(RSpec::Expectations::Version::STRING) >= Gem::Version.new('3.1')
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
Capybara::SpecHelper.spec '#has_field' do
|
2
3
|
before { @session.visit('/form') }
|
3
4
|
|
@@ -41,6 +42,7 @@ Capybara::SpecHelper.spec '#has_field' do
|
|
41
42
|
it "should be true if a field with the given type is on the page" do
|
42
43
|
expect(@session).to have_field('First Name', :type => 'text')
|
43
44
|
expect(@session).to have_field('Html5 Email', :type => 'email')
|
45
|
+
expect(@session).to have_field('Html5 Multiple Email', :type => 'email')
|
44
46
|
expect(@session).to have_field('Html5 Tel', :type => 'tel')
|
45
47
|
expect(@session).to have_field('Description', :type => 'textarea')
|
46
48
|
expect(@session).to have_field('Languages', :type => 'select')
|
@@ -49,11 +51,22 @@ Capybara::SpecHelper.spec '#has_field' do
|
|
49
51
|
it "should be false if the given field is not on the page" do
|
50
52
|
expect(@session).not_to have_field('First Name', :type => 'textarea')
|
51
53
|
expect(@session).not_to have_field('Html5 Email', :type => 'tel')
|
54
|
+
expect(@session).not_to have_field('Html5 Multiple Email', :type => 'tel')
|
52
55
|
expect(@session).not_to have_field('Description', :type => '')
|
53
56
|
expect(@session).not_to have_field('Description', :type => 'email')
|
54
57
|
expect(@session).not_to have_field('Languages', :type => 'textarea')
|
55
58
|
end
|
56
59
|
end
|
60
|
+
|
61
|
+
context 'with multiple' do
|
62
|
+
it "should be true if a field with the multiple attribute is on the page" do
|
63
|
+
expect(@session).to have_field('Html5 Multiple Email', multiple: true)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should be false if a field without the multiple attribute is not on the page" do
|
67
|
+
expect(@session).not_to have_field('Html5 Multiple Email', multiple: false)
|
68
|
+
end
|
69
|
+
end
|
57
70
|
end
|
58
71
|
|
59
72
|
Capybara::SpecHelper.spec '#has_no_field' do
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
Capybara::SpecHelper.spec '#has_select?' do
|
2
3
|
before { @session.visit('/form') }
|
3
4
|
|
@@ -102,6 +103,24 @@ Capybara::SpecHelper.spec '#has_select?' do
|
|
102
103
|
expect(@session).to have_select("Icecream", :visible => false, :with_options => ['Vanilla', 'Strawberry'])
|
103
104
|
end
|
104
105
|
end
|
106
|
+
|
107
|
+
context 'with multiple option' do
|
108
|
+
it "should find multiple selects if true" do
|
109
|
+
expect(@session).to have_select('form_languages', multiple: true)
|
110
|
+
expect(@session).not_to have_select('form_other_title', multiple: true)
|
111
|
+
end
|
112
|
+
|
113
|
+
it "should not find multiple selects if false" do
|
114
|
+
expect(@session).not_to have_select('form_languages', multiple: false)
|
115
|
+
expect(@session).to have_select('form_other_title', multiple: false)
|
116
|
+
end
|
117
|
+
|
118
|
+
it "should find both if not specified" do
|
119
|
+
expect(@session).to have_select('form_languages')
|
120
|
+
expect(@session).to have_select('form_other_title')
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
105
124
|
end
|
106
125
|
|
107
126
|
Capybara::SpecHelper.spec '#has_no_select?' do
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
Capybara::SpecHelper.spec '#has_selector?' do
|
2
3
|
before do
|
3
4
|
@session.visit('/with_html')
|
@@ -66,6 +67,11 @@ Capybara::SpecHelper.spec '#has_selector?' do
|
|
66
67
|
expect(@session).to have_selector("//p//a", :text => /re[dab]i/i, :count => 1)
|
67
68
|
expect(@session).not_to have_selector("//p//a", :text => /Red$/)
|
68
69
|
end
|
70
|
+
|
71
|
+
it "should warn when extra parameters passed" do
|
72
|
+
expect_any_instance_of(Kernel).to receive(:warn).with(/extra/)
|
73
|
+
expect(@session).to have_selector(:css, "p a#foo", 'extra')
|
74
|
+
end
|
69
75
|
end
|
70
76
|
end
|
71
77
|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
3
|
Capybara::SpecHelper.spec "node" do
|
3
4
|
before do
|
@@ -159,6 +160,13 @@ Capybara::SpecHelper.spec "node" do
|
|
159
160
|
expect(@session.find('//select[@id="form_disabled_select"]/option')).to be_disabled
|
160
161
|
expect(@session.find('//select[@id="form_title"]/option[1]')).not_to be_disabled
|
161
162
|
end
|
163
|
+
|
164
|
+
it "should be boolean" do
|
165
|
+
@session.visit('/form')
|
166
|
+
expect(@session.find('//select[@id="form_disabled_select"]/option').disabled?).to be true
|
167
|
+
expect(@session.find('//select[@id="form_disabled_select2"]/option').disabled?).to be true
|
168
|
+
expect(@session.find('//select[@id="form_title"]/option[1]').disabled?).to be false
|
169
|
+
end
|
162
170
|
end
|
163
171
|
|
164
172
|
describe "#visible?" do
|
@@ -170,6 +178,13 @@ Capybara::SpecHelper.spec "node" do
|
|
170
178
|
expect(@session.find('//div[@id="hidden_via_ancestor"]')).not_to be_visible
|
171
179
|
expect(@session.find('//div[@id="hidden_attr"]')).not_to be_visible
|
172
180
|
expect(@session.find('//a[@id="hidden_attr_via_ancestor"]')).not_to be_visible
|
181
|
+
expect(@session.find('//input[@id="hidden_input"]')).not_to be_visible
|
182
|
+
end
|
183
|
+
|
184
|
+
it "should be boolean" do
|
185
|
+
Capybara.ignore_hidden_elements = false
|
186
|
+
expect(@session.first('//a').visible?).to be true
|
187
|
+
expect(@session.find('//div[@id="hidden"]').visible?).to be false
|
173
188
|
end
|
174
189
|
end
|
175
190
|
|
@@ -180,6 +195,13 @@ Capybara::SpecHelper.spec "node" do
|
|
180
195
|
expect(@session.find('//input[@id="gender_male"]')).not_to be_checked
|
181
196
|
expect(@session.first('//h1')).not_to be_checked
|
182
197
|
end
|
198
|
+
|
199
|
+
it "should be boolean" do
|
200
|
+
@session.visit('/form')
|
201
|
+
expect(@session.find('//input[@id="gender_female"]').checked?).to be true
|
202
|
+
expect(@session.find('//input[@id="gender_male"]').checked?).to be false
|
203
|
+
expect(@session.find('//input[@id="no_attr_value_checked"]').checked?).to be true
|
204
|
+
end
|
183
205
|
end
|
184
206
|
|
185
207
|
describe "#selected?" do
|
@@ -189,6 +211,13 @@ Capybara::SpecHelper.spec "node" do
|
|
189
211
|
expect(@session.find('//option[@value="sv"]')).not_to be_selected
|
190
212
|
expect(@session.first('//h1')).not_to be_selected
|
191
213
|
end
|
214
|
+
|
215
|
+
it "should be boolean" do
|
216
|
+
@session.visit('/form')
|
217
|
+
expect(@session.find('//option[@value="en"]').selected?).to be true
|
218
|
+
expect(@session.find('//option[@value="sv"]').selected?).to be false
|
219
|
+
expect(@session.first('//h1').selected?).to be false
|
220
|
+
end
|
192
221
|
end
|
193
222
|
|
194
223
|
describe "#==" do
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
Capybara::SpecHelper.spec '#reset_session!' do
|
2
3
|
it "removes cookies" do
|
3
4
|
@session.visit('/set_cookie')
|
@@ -32,11 +33,19 @@ Capybara::SpecHelper.spec '#reset_session!' do
|
|
32
33
|
end
|
33
34
|
|
34
35
|
it "is synchronous" do
|
35
|
-
@session.visit("/
|
36
|
+
@session.visit("/with_slow_unload")
|
37
|
+
expect(@session).to have_selector(:css, 'div')
|
36
38
|
@session.reset_session!
|
37
39
|
expect(@session).to have_no_selector :xpath, "/html/body/*", wait: false
|
38
40
|
end
|
39
41
|
|
42
|
+
it "handles modals during unload" do
|
43
|
+
@session.visit('/with_unload_alert')
|
44
|
+
expect(@session).to have_selector(:css, 'div')
|
45
|
+
expect { @session.reset_session! }.not_to raise_error
|
46
|
+
expect(@session).to have_no_selector :xpath, "/html/body/*", wait: false
|
47
|
+
end
|
48
|
+
|
40
49
|
it "raises any standard errors caught inside the server", :requires => [:server] do
|
41
50
|
quietly { @session.visit("/error") }
|
42
51
|
expect do
|
@@ -46,6 +55,31 @@ Capybara::SpecHelper.spec '#reset_session!' do
|
|
46
55
|
expect(@session.current_path).to eq("/")
|
47
56
|
end
|
48
57
|
|
58
|
+
context "When reuse_server == false" do
|
59
|
+
before do
|
60
|
+
@reuse_server = Capybara.reuse_server
|
61
|
+
Capybara.reuse_server = false
|
62
|
+
end
|
63
|
+
|
64
|
+
it "raises any standard errors caught inside the server during a second session", :requires => [:server] do
|
65
|
+
Capybara.using_driver(@session.mode) do
|
66
|
+
Capybara.using_session(:another_session) do
|
67
|
+
@another_session = Capybara.current_session
|
68
|
+
quietly { @another_session.visit("/error") }
|
69
|
+
expect do
|
70
|
+
@another_session.reset_session!
|
71
|
+
end.to raise_error(TestApp::TestAppError)
|
72
|
+
@another_session.visit("/")
|
73
|
+
expect(@another_session.current_path).to eq("/")
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
after do
|
79
|
+
Capybara.reuse_server = @reuse_server
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
49
83
|
it "raises configured errors caught inside the server", :requires => [:server] do
|
50
84
|
prev_errors = Capybara.server_errors
|
51
85
|
|