capybara 2.6.2 → 2.7.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 +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
|
|