capybara 2.5.0 → 2.18.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/.yard/templates_custom/default/class/html/selectors.erb +38 -0
- data/.yard/templates_custom/default/class/html/setup.rb +17 -0
- data/.yard/yard_extensions.rb +78 -0
- data/.yardopts +1 -0
- data/History.md +413 -10
- data/License.txt +1 -1
- data/README.md +237 -130
- data/lib/capybara/config.rb +132 -0
- data/lib/capybara/cucumber.rb +3 -1
- data/lib/capybara/driver/base.rb +27 -6
- data/lib/capybara/driver/node.rb +14 -5
- data/lib/capybara/dsl.rb +2 -3
- data/lib/capybara/helpers.rb +13 -65
- data/lib/capybara/minitest/spec.rb +177 -0
- data/lib/capybara/minitest.rb +278 -0
- data/lib/capybara/node/actions.rb +180 -24
- data/lib/capybara/node/base.rb +17 -5
- data/lib/capybara/node/document.rb +5 -0
- data/lib/capybara/node/document_matchers.rb +15 -14
- data/lib/capybara/node/element.rb +55 -7
- data/lib/capybara/node/finders.rb +179 -67
- data/lib/capybara/node/matchers.rb +301 -105
- data/lib/capybara/node/simple.rb +15 -4
- data/lib/capybara/queries/ancestor_query.rb +25 -0
- data/lib/capybara/queries/base_query.rb +69 -3
- data/lib/capybara/queries/current_path_query.rb +17 -8
- data/lib/capybara/queries/match_query.rb +19 -0
- data/lib/capybara/queries/selector_query.rb +251 -0
- data/lib/capybara/queries/sibling_query.rb +25 -0
- data/lib/capybara/queries/text_query.rb +67 -16
- data/lib/capybara/queries/title_query.rb +4 -2
- data/lib/capybara/query.rb +3 -131
- data/lib/capybara/rack_test/browser.rb +14 -5
- data/lib/capybara/rack_test/css_handlers.rb +1 -0
- data/lib/capybara/rack_test/driver.rb +15 -8
- data/lib/capybara/rack_test/form.rb +34 -12
- data/lib/capybara/rack_test/node.rb +29 -12
- data/lib/capybara/rails.rb +3 -3
- data/lib/capybara/result.rb +104 -9
- data/lib/capybara/rspec/compound.rb +95 -0
- data/lib/capybara/rspec/features.rb +17 -6
- data/lib/capybara/rspec/matcher_proxies.rb +45 -0
- data/lib/capybara/rspec/matchers.rb +199 -80
- data/lib/capybara/rspec.rb +4 -2
- data/lib/capybara/selector/css.rb +30 -0
- data/lib/capybara/selector/filter.rb +20 -0
- data/lib/capybara/selector/filter_set.rb +74 -0
- data/lib/capybara/selector/filters/base.rb +33 -0
- data/lib/capybara/selector/filters/expression_filter.rb +40 -0
- data/lib/capybara/selector/filters/node_filter.rb +27 -0
- data/lib/capybara/selector/selector.rb +276 -0
- data/lib/capybara/selector.rb +452 -157
- data/lib/capybara/selenium/driver.rb +282 -81
- data/lib/capybara/selenium/node.rb +144 -46
- data/lib/capybara/server.rb +59 -16
- data/lib/capybara/session/config.rb +114 -0
- data/lib/capybara/session/matchers.rb +29 -19
- data/lib/capybara/session.rb +378 -143
- data/lib/capybara/spec/fixtures/no_extension +1 -0
- data/lib/capybara/spec/public/jquery-ui.js +13 -791
- data/lib/capybara/spec/public/jquery.js +4 -9045
- data/lib/capybara/spec/public/test.js +45 -11
- data/lib/capybara/spec/session/accept_alert_spec.rb +30 -7
- data/lib/capybara/spec/session/accept_confirm_spec.rb +14 -2
- data/lib/capybara/spec/session/accept_prompt_spec.rb +35 -6
- data/lib/capybara/spec/session/all_spec.rb +45 -32
- data/lib/capybara/spec/session/ancestor_spec.rb +85 -0
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +110 -0
- data/lib/capybara/spec/session/assert_current_path.rb +15 -2
- data/lib/capybara/spec/session/assert_selector.rb +29 -28
- data/lib/capybara/spec/session/assert_text.rb +59 -20
- data/lib/capybara/spec/session/assert_title.rb +25 -11
- data/lib/capybara/spec/session/attach_file_spec.rb +42 -4
- data/lib/capybara/spec/session/body_spec.rb +1 -0
- data/lib/capybara/spec/session/check_spec.rb +90 -14
- data/lib/capybara/spec/session/choose_spec.rb +31 -5
- data/lib/capybara/spec/session/click_button_spec.rb +20 -9
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +15 -9
- data/lib/capybara/spec/session/click_link_spec.rb +39 -15
- data/lib/capybara/spec/session/current_scope_spec.rb +2 -1
- data/lib/capybara/spec/session/current_url_spec.rb +12 -3
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +6 -5
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +4 -3
- data/lib/capybara/spec/session/element/assert_match_selector.rb +36 -0
- data/lib/capybara/spec/session/element/match_css_spec.rb +23 -0
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +23 -0
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +106 -0
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +22 -0
- data/lib/capybara/spec/session/evaluate_script_spec.rb +23 -1
- data/lib/capybara/spec/session/execute_script_spec.rb +22 -3
- data/lib/capybara/spec/session/fill_in_spec.rb +50 -32
- data/lib/capybara/spec/session/find_button_spec.rb +43 -2
- data/lib/capybara/spec/session/find_by_id_spec.rb +3 -2
- data/lib/capybara/spec/session/find_field_spec.rb +42 -6
- data/lib/capybara/spec/session/find_link_spec.rb +22 -3
- data/lib/capybara/spec/session/find_spec.rb +103 -57
- data/lib/capybara/spec/session/first_spec.rb +34 -18
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +103 -0
- data/lib/capybara/spec/session/{within_frame_spec.rb → frame/within_frame_spec.rb} +44 -2
- data/lib/capybara/spec/session/go_back_spec.rb +2 -1
- data/lib/capybara/spec/session/go_forward_spec.rb +2 -1
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +69 -0
- data/lib/capybara/spec/session/has_button_spec.rb +17 -8
- data/lib/capybara/spec/session/has_css_spec.rb +85 -73
- data/lib/capybara/spec/session/has_current_path_spec.rb +91 -7
- data/lib/capybara/spec/session/has_field_spec.rb +93 -58
- data/lib/capybara/spec/session/has_link_spec.rb +9 -8
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +76 -0
- data/lib/capybara/spec/session/has_select_spec.rb +159 -59
- data/lib/capybara/spec/session/has_selector_spec.rb +64 -28
- data/lib/capybara/spec/session/has_table_spec.rb +1 -0
- data/lib/capybara/spec/session/has_text_spec.rb +27 -12
- data/lib/capybara/spec/session/has_title_spec.rb +22 -4
- data/lib/capybara/spec/session/has_xpath_spec.rb +32 -29
- data/lib/capybara/spec/session/headers.rb +2 -1
- data/lib/capybara/spec/session/html_spec.rb +4 -3
- data/lib/capybara/spec/session/node_spec.rb +198 -38
- data/lib/capybara/spec/session/refresh_spec.rb +28 -0
- data/lib/capybara/spec/session/reset_session_spec.rb +46 -5
- data/lib/capybara/spec/session/response_code.rb +2 -1
- 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 -5
- 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 +4 -2
- data/lib/capybara/spec/session/select_spec.rb +34 -32
- data/lib/capybara/spec/session/selectors_spec.rb +65 -0
- data/lib/capybara/spec/session/sibling_spec.rb +52 -0
- data/lib/capybara/spec/session/text_spec.rb +4 -4
- data/lib/capybara/spec/session/title_spec.rb +2 -1
- data/lib/capybara/spec/session/uncheck_spec.rb +42 -2
- data/lib/capybara/spec/session/unselect_spec.rb +17 -16
- data/lib/capybara/spec/session/visit_spec.rb +77 -2
- data/lib/capybara/spec/session/window/become_closed_spec.rb +12 -11
- 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 +16 -11
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +7 -4
- data/lib/capybara/spec/session/window/window_spec.rb +36 -29
- data/lib/capybara/spec/session/window/windows_spec.rb +1 -0
- data/lib/capybara/spec/session/window/within_window_spec.rb +31 -7
- data/lib/capybara/spec/session/within_spec.rb +14 -6
- data/lib/capybara/spec/spec_helper.rb +37 -4
- data/lib/capybara/spec/test_app.rb +15 -3
- 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 +169 -9
- data/lib/capybara/spec/views/frame_child.erb +10 -2
- data/lib/capybara/spec/views/frame_one.erb +2 -1
- data/lib/capybara/spec/views/frame_parent.erb +3 -2
- 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/initial_alert.erb +10 -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_fixed_header_footer.erb +17 -0
- data/lib/capybara/spec/views/with_hover.erb +7 -1
- data/lib/capybara/spec/views/with_html.erb +40 -2
- data/lib/capybara/spec/views/with_html_entities.erb +1 -0
- data/lib/capybara/spec/views/with_js.erb +32 -1
- 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 +14 -0
- data/lib/capybara/spec/views/with_windows.erb +7 -0
- data/lib/capybara/spec/views/within_frames.erb +3 -2
- data/lib/capybara/version.rb +2 -1
- data/lib/capybara/window.rb +20 -3
- data/lib/capybara.rb +189 -93
- data/spec/basic_node_spec.rb +7 -6
- data/spec/capybara_spec.rb +90 -4
- data/spec/dsl_spec.rb +3 -1
- data/spec/filter_set_spec.rb +28 -0
- data/spec/fixtures/capybara.csv +1 -0
- data/spec/fixtures/selenium_driver_rspec_failure.rb +5 -1
- data/spec/fixtures/selenium_driver_rspec_success.rb +5 -1
- data/spec/minitest_spec.rb +130 -0
- data/spec/minitest_spec_spec.rb +135 -0
- data/spec/per_session_config_spec.rb +67 -0
- data/spec/rack_test_spec.rb +50 -7
- data/spec/result_spec.rb +76 -0
- data/spec/rspec/features_spec.rb +21 -8
- data/spec/rspec/scenarios_spec.rb +21 -0
- data/spec/rspec/{matchers_spec.rb → shared_spec_matchers.rb} +160 -54
- data/spec/rspec/views_spec.rb +5 -0
- data/spec/rspec_matchers_spec.rb +46 -0
- data/spec/rspec_spec.rb +79 -1
- data/spec/selector_spec.rb +199 -0
- data/spec/selenium_spec_chrome.rb +54 -9
- data/spec/selenium_spec_firefox.rb +68 -0
- data/spec/selenium_spec_marionette.rb +127 -0
- data/spec/server_spec.rb +102 -14
- data/spec/session_spec.rb +54 -0
- data/spec/shared_selenium_session.rb +215 -0
- data/spec/spec_helper.rb +7 -0
- metadata +140 -15
- data/spec/selenium_spec.rb +0 -128
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
Capybara::SpecHelper.spec '#assert_current_path' do
|
|
2
3
|
before do
|
|
3
4
|
@session.visit('/with_js')
|
|
@@ -11,7 +12,7 @@ Capybara::SpecHelper.spec '#assert_current_path' do
|
|
|
11
12
|
expect { @session.assert_current_path(/w[a-z]{3}_js/) }.not_to raise_error
|
|
12
13
|
end
|
|
13
14
|
|
|
14
|
-
it "should wait for current_path", :
|
|
15
|
+
it "should wait for current_path", requires: [:js] do
|
|
15
16
|
@session.click_link("Change page")
|
|
16
17
|
expect { @session.assert_current_path("/with_html") }.not_to raise_error
|
|
17
18
|
end
|
|
@@ -33,6 +34,12 @@ Capybara::SpecHelper.spec '#assert_current_path' do
|
|
|
33
34
|
@session.visit('/with_js?test=test')
|
|
34
35
|
expect{@session.assert_current_path('/with_js', only_path: true)}.not_to raise_error
|
|
35
36
|
end
|
|
37
|
+
|
|
38
|
+
it "should not cause an exception when current_url is nil" do
|
|
39
|
+
allow_any_instance_of(Capybara::Session).to receive(:current_url) { nil }
|
|
40
|
+
|
|
41
|
+
expect{@session.assert_current_path(nil)}.not_to raise_error
|
|
42
|
+
end
|
|
36
43
|
end
|
|
37
44
|
|
|
38
45
|
Capybara::SpecHelper.spec '#assert_no_current_path?' do
|
|
@@ -48,7 +55,7 @@ Capybara::SpecHelper.spec '#assert_no_current_path?' do
|
|
|
48
55
|
expect{@session.assert_no_current_path(/monkey/)}.not_to raise_error
|
|
49
56
|
end
|
|
50
57
|
|
|
51
|
-
it "should wait for current_path to disappear", :
|
|
58
|
+
it "should wait for current_path to disappear", requires: [:js] do
|
|
52
59
|
@session.click_link("Change page")
|
|
53
60
|
expect{@session.assert_no_current_path('/with_js')}.not_to raise_error
|
|
54
61
|
end
|
|
@@ -56,4 +63,10 @@ Capybara::SpecHelper.spec '#assert_no_current_path?' do
|
|
|
56
63
|
it "should not raise if the page has not the given current_path" do
|
|
57
64
|
expect{@session.assert_no_current_path('/with_html')}.not_to raise_error
|
|
58
65
|
end
|
|
66
|
+
|
|
67
|
+
it "should not cause an exception when current_url is nil" do
|
|
68
|
+
allow_any_instance_of(Capybara::Session).to receive(:current_url) { nil }
|
|
69
|
+
|
|
70
|
+
expect{@session.assert_no_current_path('/with_html')}.not_to raise_error
|
|
71
|
+
end
|
|
59
72
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
Capybara::SpecHelper.spec '#assert_selector' do
|
|
2
3
|
before do
|
|
3
4
|
@session.visit('/with_html')
|
|
@@ -30,41 +31,41 @@ Capybara::SpecHelper.spec '#assert_selector' do
|
|
|
30
31
|
|
|
31
32
|
context "with count" do
|
|
32
33
|
it "should be true if the content is on the page the given number of times" do
|
|
33
|
-
@session.assert_selector("//p", :
|
|
34
|
-
@session.assert_selector("//p//a[@id='foo']", :
|
|
35
|
-
@session.assert_selector("//p[contains(.,'est')]", :
|
|
34
|
+
@session.assert_selector("//p", count: 3)
|
|
35
|
+
@session.assert_selector("//p//a[@id='foo']", count: 1)
|
|
36
|
+
@session.assert_selector("//p[contains(.,'est')]", count: 1)
|
|
36
37
|
end
|
|
37
38
|
|
|
38
39
|
it "should be false if the content is on the page the given number of times" do
|
|
39
|
-
expect { @session.assert_selector("//p", :
|
|
40
|
-
expect { @session.assert_selector("//p//a[@id='foo']", :
|
|
41
|
-
expect { @session.assert_selector("//p[contains(.,'est')]", :
|
|
40
|
+
expect { @session.assert_selector("//p", count: 6) }.to raise_error(Capybara::ElementNotFound)
|
|
41
|
+
expect { @session.assert_selector("//p//a[@id='foo']", count: 2) }.to raise_error(Capybara::ElementNotFound)
|
|
42
|
+
expect { @session.assert_selector("//p[contains(.,'est')]", count: 5) }.to raise_error(Capybara::ElementNotFound)
|
|
42
43
|
end
|
|
43
44
|
|
|
44
45
|
it "should be false if the content isn't on the page at all" do
|
|
45
|
-
expect { @session.assert_selector("//abbr", :
|
|
46
|
-
expect { @session.assert_selector("//p//a[@id='doesnotexist']", :
|
|
46
|
+
expect { @session.assert_selector("//abbr", count: 2) }.to raise_error(Capybara::ElementNotFound)
|
|
47
|
+
expect { @session.assert_selector("//p//a[@id='doesnotexist']", count: 1) }.to raise_error(Capybara::ElementNotFound)
|
|
47
48
|
end
|
|
48
49
|
end
|
|
49
50
|
|
|
50
51
|
context "with text" do
|
|
51
52
|
it "should discard all matches where the given string is not contained" do
|
|
52
|
-
@session.assert_selector("//p//a", :
|
|
53
|
-
expect { @session.assert_selector("//p", :
|
|
53
|
+
@session.assert_selector("//p//a", text: "Redirect", count: 1)
|
|
54
|
+
expect { @session.assert_selector("//p", text: "Doesnotexist") }.to raise_error(Capybara::ElementNotFound)
|
|
54
55
|
end
|
|
55
56
|
|
|
56
57
|
it "should discard all matches where the given regexp is not matched" do
|
|
57
|
-
@session.assert_selector("//p//a", :
|
|
58
|
-
expect { @session.assert_selector("//p//a", :
|
|
58
|
+
@session.assert_selector("//p//a", text: /re[dab]i/i, count: 1)
|
|
59
|
+
expect { @session.assert_selector("//p//a", text: /Red$/) }.to raise_error(Capybara::ElementNotFound)
|
|
59
60
|
end
|
|
60
61
|
end
|
|
61
62
|
|
|
62
|
-
context "with wait", :
|
|
63
|
+
context "with wait", requires: [:js] do
|
|
63
64
|
it "should find element if it appears before given wait duration" do
|
|
64
65
|
Capybara.using_wait_time(0.1) do
|
|
65
66
|
@session.visit('/with_js')
|
|
66
67
|
@session.click_link('Click me')
|
|
67
|
-
@session.assert_selector(:css, "a#has-been-clicked", :
|
|
68
|
+
@session.assert_selector(:css, "a#has-been-clicked", text: "Has been clicked", wait: 2)
|
|
68
69
|
end
|
|
69
70
|
end
|
|
70
71
|
end
|
|
@@ -108,40 +109,40 @@ Capybara::SpecHelper.spec '#assert_no_selector' do
|
|
|
108
109
|
|
|
109
110
|
context "with count" do
|
|
110
111
|
it "should be false if the content is on the page the given number of times" do
|
|
111
|
-
expect { @session.assert_no_selector("//p", :
|
|
112
|
-
expect { @session.assert_no_selector("//p//a[@id='foo']", :
|
|
113
|
-
expect { @session.assert_no_selector("//p[contains(.,'est')]", :
|
|
112
|
+
expect { @session.assert_no_selector("//p", count: 3) }.to raise_error(Capybara::ElementNotFound)
|
|
113
|
+
expect { @session.assert_no_selector("//p//a[@id='foo']", count: 1) }.to raise_error(Capybara::ElementNotFound)
|
|
114
|
+
expect { @session.assert_no_selector("//p[contains(.,'est')]", count: 1) }.to raise_error(Capybara::ElementNotFound)
|
|
114
115
|
end
|
|
115
116
|
|
|
116
117
|
it "should be true if the content is on the page the wrong number of times" do
|
|
117
|
-
@session.assert_no_selector("//p", :
|
|
118
|
-
@session.assert_no_selector("//p//a[@id='foo']", :
|
|
119
|
-
@session.assert_no_selector("//p[contains(.,'est')]", :
|
|
118
|
+
@session.assert_no_selector("//p", count: 6)
|
|
119
|
+
@session.assert_no_selector("//p//a[@id='foo']", count: 2)
|
|
120
|
+
@session.assert_no_selector("//p[contains(.,'est')]", count: 5)
|
|
120
121
|
end
|
|
121
122
|
|
|
122
123
|
it "should be true if the content isn't on the page at all" do
|
|
123
|
-
@session.assert_no_selector("//abbr", :
|
|
124
|
-
@session.assert_no_selector("//p//a[@id='doesnotexist']", :
|
|
124
|
+
@session.assert_no_selector("//abbr", count: 2)
|
|
125
|
+
@session.assert_no_selector("//p//a[@id='doesnotexist']", count: 1)
|
|
125
126
|
end
|
|
126
127
|
end
|
|
127
128
|
|
|
128
129
|
context "with text" do
|
|
129
130
|
it "should discard all matches where the given string is contained" do
|
|
130
|
-
expect { @session.assert_no_selector("//p//a", :
|
|
131
|
-
@session.assert_no_selector("//p", :
|
|
131
|
+
expect { @session.assert_no_selector("//p//a", text: "Redirect", count: 1) }.to raise_error(Capybara::ElementNotFound)
|
|
132
|
+
@session.assert_no_selector("//p", text: "Doesnotexist")
|
|
132
133
|
end
|
|
133
134
|
|
|
134
135
|
it "should discard all matches where the given regexp is matched" do
|
|
135
|
-
expect { @session.assert_no_selector("//p//a", :
|
|
136
|
-
@session.assert_no_selector("//p//a", :
|
|
136
|
+
expect { @session.assert_no_selector("//p//a", text: /re[dab]i/i, count: 1) }.to raise_error(Capybara::ElementNotFound)
|
|
137
|
+
@session.assert_no_selector("//p//a", text: /Red$/)
|
|
137
138
|
end
|
|
138
139
|
end
|
|
139
140
|
|
|
140
|
-
context "with wait", :
|
|
141
|
+
context "with wait", requires: [:js] do
|
|
141
142
|
it "should not find element if it appears after given wait duration" do
|
|
142
143
|
@session.visit('/with_js')
|
|
143
144
|
@session.click_link('Click me')
|
|
144
|
-
@session.assert_no_selector(:css, "a#has-been-clicked", :
|
|
145
|
+
@session.assert_no_selector(:css, "a#has-been-clicked", text: "Has been clicked", wait: 0.1)
|
|
145
146
|
end
|
|
146
147
|
end
|
|
147
148
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
Capybara::SpecHelper.spec '#assert_text' do
|
|
2
3
|
it "should be true if the given text is on the page" do
|
|
3
4
|
@session.visit('/with_html')
|
|
@@ -36,6 +37,36 @@ Capybara::SpecHelper.spec '#assert_text' do
|
|
|
36
37
|
expect(@session.assert_text('Some of this text is hidden!')).to eq(true)
|
|
37
38
|
end
|
|
38
39
|
|
|
40
|
+
it "should raise error with a helpful message if the requested text is present but invisible" do
|
|
41
|
+
@session.visit('/with_html')
|
|
42
|
+
el = @session.find(:css, '#hidden-text')
|
|
43
|
+
expect do
|
|
44
|
+
el.assert_text(:visible, 'Some of this text is hidden!')
|
|
45
|
+
end.to raise_error(Capybara::ExpectationNotMet, /it was found 1 time including non-visible text/)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "should raise error with a helpful message if the requested text is present but with incorrect case" do
|
|
49
|
+
@session.visit('/with_html')
|
|
50
|
+
expect do
|
|
51
|
+
@session.assert_text('Text With Whitespace')
|
|
52
|
+
end.to raise_error(Capybara::ExpectationNotMet, /it was found 1 time using a case insensitive search/)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "should raise error with helpful message if requested text is present but invisible and with incorrect case", requires: [:js] do
|
|
56
|
+
@session.visit('/with_html')
|
|
57
|
+
el = @session.find(:css, '#uppercase')
|
|
58
|
+
expect do
|
|
59
|
+
el.assert_text('text here')
|
|
60
|
+
end.to raise_error(Capybara::ExpectationNotMet, /it was found 1 time using a case insensitive search and it was found 1 time including non-visible text/)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it "should raise the correct error if requested text is missing but contains regex special characters" do
|
|
64
|
+
@session.visit('/with_html')
|
|
65
|
+
expect do
|
|
66
|
+
@session.assert_text('[]*.')
|
|
67
|
+
end.to raise_error(Capybara::ExpectationNotMet, /expected to find text "\[\]\*\."/)
|
|
68
|
+
end
|
|
69
|
+
|
|
39
70
|
it "should be true if the text in the page matches given regexp" do
|
|
40
71
|
@session.visit('/with_html')
|
|
41
72
|
expect(@session.assert_text(/Lorem/)).to eq(true)
|
|
@@ -55,7 +86,7 @@ Capybara::SpecHelper.spec '#assert_text' do
|
|
|
55
86
|
end.to raise_error(Capybara::ExpectationNotMet)
|
|
56
87
|
end
|
|
57
88
|
|
|
58
|
-
it "should wait for text to appear", :
|
|
89
|
+
it "should wait for text to appear", requires: [:js] do
|
|
59
90
|
@session.visit('/with_js')
|
|
60
91
|
@session.click_link('Click me')
|
|
61
92
|
expect(@session.assert_text('Has been clicked')).to eq(true)
|
|
@@ -75,7 +106,7 @@ Capybara::SpecHelper.spec '#assert_text' do
|
|
|
75
106
|
end
|
|
76
107
|
end
|
|
77
108
|
|
|
78
|
-
context "with wait", :
|
|
109
|
+
context "with wait", requires: [:js] do
|
|
79
110
|
it "should find element if it appears before given wait duration" do
|
|
80
111
|
Capybara.using_wait_time(0) do
|
|
81
112
|
@session.visit('/with_js')
|
|
@@ -102,35 +133,35 @@ Capybara::SpecHelper.spec '#assert_text' do
|
|
|
102
133
|
end
|
|
103
134
|
|
|
104
135
|
it 'ignores other filters when :count is specified' do
|
|
105
|
-
o = {:
|
|
106
|
-
:
|
|
107
|
-
:
|
|
108
|
-
:
|
|
136
|
+
o = {count: 5,
|
|
137
|
+
minimum: 6,
|
|
138
|
+
maximum: 0,
|
|
139
|
+
between: 0..4}
|
|
109
140
|
expect { @session.assert_text('Header', o) }.not_to raise_error
|
|
110
141
|
end
|
|
111
142
|
context 'with no :count expectation' do
|
|
112
143
|
it 'fails if :minimum is not met' do
|
|
113
|
-
o = {:
|
|
114
|
-
:
|
|
115
|
-
:
|
|
144
|
+
o = {minimum: 6,
|
|
145
|
+
maximum: 5,
|
|
146
|
+
between: 2..7}
|
|
116
147
|
expect { @session.assert_text('Header', o) }.to raise_error(Capybara::ExpectationNotMet)
|
|
117
148
|
end
|
|
118
149
|
it 'fails if :maximum is not met' do
|
|
119
|
-
o = {:
|
|
120
|
-
:
|
|
121
|
-
:
|
|
150
|
+
o = {minimum: 0,
|
|
151
|
+
maximum: 0,
|
|
152
|
+
between: 2..7}
|
|
122
153
|
expect { @session.assert_text('Header', o) }.to raise_error(Capybara::ExpectationNotMet)
|
|
123
154
|
end
|
|
124
155
|
it 'fails if :between is not met' do
|
|
125
|
-
o = {:
|
|
126
|
-
:
|
|
127
|
-
:
|
|
156
|
+
o = {minimum: 0,
|
|
157
|
+
maximum: 5,
|
|
158
|
+
between: 0..4}
|
|
128
159
|
expect { @session.assert_text('Header', o) }.to raise_error(Capybara::ExpectationNotMet)
|
|
129
160
|
end
|
|
130
161
|
it 'succeeds if all combineable expectations are met' do
|
|
131
|
-
o = {:
|
|
132
|
-
:
|
|
133
|
-
:
|
|
162
|
+
o = {minimum: 0,
|
|
163
|
+
maximum: 5,
|
|
164
|
+
between: 2..7}
|
|
134
165
|
expect { @session.assert_text('Header', o) }.not_to raise_error
|
|
135
166
|
end
|
|
136
167
|
end
|
|
@@ -165,6 +196,14 @@ Capybara::SpecHelper.spec '#assert_no_text' do
|
|
|
165
196
|
end.to raise_error(Capybara::ExpectationNotMet, 'expected not to find text "Some of this text is hidden!" in "Some of this text is hidden!"')
|
|
166
197
|
end
|
|
167
198
|
|
|
199
|
+
it "should raise error if :all given and text is invisible." do
|
|
200
|
+
@session.visit('/with_html')
|
|
201
|
+
el = @session.find(:css, '#some-hidden-text', visible: false)
|
|
202
|
+
expect do
|
|
203
|
+
el.assert_no_text(:visible, 'hidden')
|
|
204
|
+
end.to raise_error(Capybara::ExpectationNotMet, 'expected not to find text "hidden" in "Some of this text is not hidden"')
|
|
205
|
+
end
|
|
206
|
+
|
|
168
207
|
it "should be true if the text in the page doesn't match given regexp" do
|
|
169
208
|
@session.visit('/with_html')
|
|
170
209
|
@session.assert_no_text(/xxxxyzzz/)
|
|
@@ -184,12 +223,12 @@ Capybara::SpecHelper.spec '#assert_no_text' do
|
|
|
184
223
|
end
|
|
185
224
|
end
|
|
186
225
|
|
|
187
|
-
context "with wait", :
|
|
226
|
+
context "with wait", requires: [:js] do
|
|
188
227
|
it "should not find element if it appears after given wait duration" do
|
|
189
228
|
@session.visit('/with_js')
|
|
190
229
|
@session.click_link('Click me')
|
|
191
230
|
@session.find(:css, '#reload-list').click
|
|
192
|
-
@session.find(:css, '#the-list').assert_no_text('Foo Bar', :
|
|
231
|
+
@session.find(:css, '#the-list').assert_no_text('Foo Bar', wait: 0.3)
|
|
193
232
|
end
|
|
194
233
|
end
|
|
195
234
|
end
|
|
@@ -1,26 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
Capybara::SpecHelper.spec '#assert_title' do
|
|
2
3
|
before do
|
|
3
4
|
@session.visit('/with_js')
|
|
4
5
|
end
|
|
5
6
|
|
|
6
|
-
it "should
|
|
7
|
-
expect
|
|
7
|
+
it "should not raise if the page's title contains the given string" do
|
|
8
|
+
expect do
|
|
9
|
+
@session.assert_title('js')
|
|
10
|
+
end.not_to raise_error
|
|
8
11
|
end
|
|
9
12
|
|
|
10
|
-
it "should
|
|
11
|
-
expect
|
|
13
|
+
it "should not raise when given an empty string" do
|
|
14
|
+
expect do
|
|
15
|
+
@session.assert_title('')
|
|
16
|
+
end.not_to raise_error
|
|
12
17
|
end
|
|
13
18
|
|
|
14
19
|
it "should allow regexp matches" do
|
|
15
|
-
expect
|
|
20
|
+
expect do
|
|
21
|
+
@session.assert_title(/w[a-z]{3}_js/)
|
|
22
|
+
end.not_to raise_error
|
|
23
|
+
|
|
16
24
|
expect do
|
|
17
25
|
@session.assert_title(/w[a-z]{10}_js/)
|
|
18
26
|
end.to raise_error(Capybara::ExpectationNotMet, 'expected "with_js" to match /w[a-z]{10}_js/')
|
|
19
27
|
end
|
|
20
28
|
|
|
21
|
-
it "should wait for title", :
|
|
29
|
+
it "should wait for title", requires: [:js] do
|
|
22
30
|
@session.click_link("Change title")
|
|
23
|
-
expect
|
|
31
|
+
expect do
|
|
32
|
+
@session.assert_title("changed title", wait: 3)
|
|
33
|
+
end.not_to raise_error
|
|
24
34
|
end
|
|
25
35
|
|
|
26
36
|
it "should raise error if the title doesn't contain the given string" do
|
|
@@ -58,12 +68,16 @@ Capybara::SpecHelper.spec '#assert_no_title' do
|
|
|
58
68
|
@session.assert_no_title(/monkey/)
|
|
59
69
|
end
|
|
60
70
|
|
|
61
|
-
it "should wait for title to disappear", :
|
|
71
|
+
it "should wait for title to disappear", requires: [:js] do
|
|
62
72
|
@session.click_link("Change title")
|
|
63
|
-
expect
|
|
73
|
+
expect do
|
|
74
|
+
@session.assert_no_title('with_js', wait: 3)
|
|
75
|
+
end.not_to raise_error
|
|
64
76
|
end
|
|
65
77
|
|
|
66
|
-
it "should
|
|
67
|
-
expect
|
|
78
|
+
it "should not raise if the title doesn't contain the given string" do
|
|
79
|
+
expect do
|
|
80
|
+
@session.assert_no_title('monkey')
|
|
81
|
+
end.not_to raise_error
|
|
68
82
|
end
|
|
69
83
|
end
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
Capybara::SpecHelper.spec "#attach_file" do
|
|
2
3
|
before do
|
|
3
4
|
@test_file_path = File.expand_path('../fixtures/test_file.txt', File.dirname(__FILE__))
|
|
4
5
|
@another_test_file_path = File.expand_path('../fixtures/another_test_file.txt', File.dirname(__FILE__))
|
|
5
6
|
@test_jpg_file_path = File.expand_path('../fixtures/capybara.jpg', File.dirname(__FILE__))
|
|
7
|
+
@no_extension_file_path = File.expand_path('../fixtures/no_extension', File.dirname(__FILE__))
|
|
6
8
|
@session.visit('/form')
|
|
7
9
|
end
|
|
8
10
|
|
|
@@ -56,6 +58,12 @@ Capybara::SpecHelper.spec "#attach_file" do
|
|
|
56
58
|
expect(@session).to have_content('image/jpeg')
|
|
57
59
|
end
|
|
58
60
|
|
|
61
|
+
it "should not break when uploading a file without extension" do
|
|
62
|
+
@session.attach_file "Single Document", @no_extension_file_path
|
|
63
|
+
@session.click_button 'Upload Single'
|
|
64
|
+
expect(@session).to have_content(File.read(@no_extension_file_path))
|
|
65
|
+
end
|
|
66
|
+
|
|
59
67
|
it "should not break when using HTML5 multiple file input" do
|
|
60
68
|
@session.attach_file "Multiple Documents", @test_file_path
|
|
61
69
|
@session.click_button('Upload Multiple')
|
|
@@ -64,7 +72,7 @@ Capybara::SpecHelper.spec "#attach_file" do
|
|
|
64
72
|
end
|
|
65
73
|
|
|
66
74
|
it "should not break when using HTML5 multiple file input uploading multiple files" do
|
|
67
|
-
pending "Selenium is buggy on this, see http://code.google.com/p/selenium/issues/detail?id=2239" if @session.respond_to?(:mode) && @session.mode.to_s =~ /^
|
|
75
|
+
pending "Selenium is buggy on this, see http://code.google.com/p/selenium/issues/detail?id=2239" if @session.respond_to?(:mode) && @session.mode.to_s =~ /^selenium_(firefox|marionette)/
|
|
68
76
|
@session.attach_file "Multiple Documents", [@test_file_path, @another_test_file_path]
|
|
69
77
|
@session.click_button('Upload Multiple')
|
|
70
78
|
expect(@session.body).to include("2 | ")#number of files
|
|
@@ -80,7 +88,7 @@ Capybara::SpecHelper.spec "#attach_file" do
|
|
|
80
88
|
|
|
81
89
|
context "with a locator that doesn't exist" do
|
|
82
90
|
it "should raise an error" do
|
|
83
|
-
msg = "Unable to find file field \"does not exist\""
|
|
91
|
+
msg = "Unable to find visible file field \"does not exist\" that is not disabled"
|
|
84
92
|
expect do
|
|
85
93
|
@session.attach_file('does not exist', @test_file_path)
|
|
86
94
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
|
@@ -95,15 +103,45 @@ Capybara::SpecHelper.spec "#attach_file" do
|
|
|
95
103
|
|
|
96
104
|
context "with :exact option" do
|
|
97
105
|
it "should set a file path by partial label when false" do
|
|
98
|
-
@session.attach_file "Imag", __FILE__, :
|
|
106
|
+
@session.attach_file "Imag", __FILE__, exact: false
|
|
99
107
|
@session.click_button('awesome')
|
|
100
108
|
expect(extract_results(@session)['image']).to eq(File.basename(__FILE__))
|
|
101
109
|
end
|
|
102
110
|
|
|
103
111
|
it "not allow partial matches when true" do
|
|
104
112
|
expect do
|
|
105
|
-
@session.attach_file "Imag", __FILE__, :
|
|
113
|
+
@session.attach_file "Imag", __FILE__, exact: true
|
|
106
114
|
end.to raise_error(Capybara::ElementNotFound)
|
|
107
115
|
end
|
|
108
116
|
end
|
|
117
|
+
|
|
118
|
+
context "with :make_visible option", requires: [:js, :es_args] do
|
|
119
|
+
it "applies a default style change when true" do
|
|
120
|
+
@session.visit('/with_js')
|
|
121
|
+
expect { @session.attach_file("hidden_file", __FILE__) }.to raise_error Capybara::ElementNotFound
|
|
122
|
+
expect {
|
|
123
|
+
@session.attach_file("hidden_file", __FILE__, make_visible: true)
|
|
124
|
+
}.not_to raise_error
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it "accepts a hash of styles to be applied" do
|
|
128
|
+
@session.visit('/with_js')
|
|
129
|
+
expect {
|
|
130
|
+
@session.attach_file("hidden_file", __FILE__, make_visible: { opacity: 1, display: 'block' })
|
|
131
|
+
}.not_to raise_error
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
it "raises an error when the file input is not made visible" do
|
|
135
|
+
@session.visit('/with_js')
|
|
136
|
+
expect {
|
|
137
|
+
@session.attach_file("hidden_file", __FILE__, make_visible: { color: 'red' })
|
|
138
|
+
}.to raise_error(Capybara::ExpectationNotMet)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
it "resets the style when done" do
|
|
142
|
+
@session.visit('/with_js')
|
|
143
|
+
@session.attach_file("hidden_file", __FILE__, make_visible: true)
|
|
144
|
+
expect(@session.evaluate_script("arguments[0].style.display", @session.find(:css, '#hidden_file', visible: :all))).to eq 'none'
|
|
145
|
+
end
|
|
146
|
+
end
|
|
109
147
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
Capybara::SpecHelper.spec "#check" do
|
|
2
3
|
before do
|
|
3
4
|
@session.visit('/form')
|
|
@@ -14,7 +15,7 @@ Capybara::SpecHelper.spec "#check" do
|
|
|
14
15
|
end
|
|
15
16
|
end
|
|
16
17
|
|
|
17
|
-
it "should trigger associated events", :
|
|
18
|
+
it "should trigger associated events", requires: [:js] do
|
|
18
19
|
@session.visit('/with_js')
|
|
19
20
|
@session.check('checkbox_with_event')
|
|
20
21
|
expect(@session).to have_css('#checkbox_event_triggered');
|
|
@@ -22,29 +23,29 @@ Capybara::SpecHelper.spec "#check" do
|
|
|
22
23
|
|
|
23
24
|
describe "checking" do
|
|
24
25
|
it "should not change an already checked checkbox" do
|
|
25
|
-
expect(@session.find(:xpath, "//input[@id='form_pets_dog']")
|
|
26
|
+
expect(@session.find(:xpath, "//input[@id='form_pets_dog']")).to be_checked
|
|
26
27
|
@session.check('form_pets_dog')
|
|
27
|
-
expect(@session.find(:xpath, "//input[@id='form_pets_dog']")
|
|
28
|
+
expect(@session.find(:xpath, "//input[@id='form_pets_dog']")).to be_checked
|
|
28
29
|
end
|
|
29
30
|
|
|
30
31
|
it "should check an unchecked checkbox" do
|
|
31
|
-
expect(@session.find(:xpath, "//input[@id='form_pets_cat']")
|
|
32
|
+
expect(@session.find(:xpath, "//input[@id='form_pets_cat']")).not_to be_checked
|
|
32
33
|
@session.check('form_pets_cat')
|
|
33
|
-
expect(@session.find(:xpath, "//input[@id='form_pets_cat']")
|
|
34
|
+
expect(@session.find(:xpath, "//input[@id='form_pets_cat']")).to be_checked
|
|
34
35
|
end
|
|
35
36
|
end
|
|
36
37
|
|
|
37
38
|
describe "unchecking" do
|
|
38
39
|
it "should not change an already unchecked checkbox" do
|
|
39
|
-
expect(@session.find(:xpath, "//input[@id='form_pets_cat']")
|
|
40
|
+
expect(@session.find(:xpath, "//input[@id='form_pets_cat']")).not_to be_checked
|
|
40
41
|
@session.uncheck('form_pets_cat')
|
|
41
|
-
expect(@session.find(:xpath, "//input[@id='form_pets_cat']")
|
|
42
|
+
expect(@session.find(:xpath, "//input[@id='form_pets_cat']")).not_to be_checked
|
|
42
43
|
end
|
|
43
44
|
|
|
44
45
|
it "should uncheck a checked checkbox" do
|
|
45
|
-
expect(@session.find(:xpath, "//input[@id='form_pets_dog']")
|
|
46
|
+
expect(@session.find(:xpath, "//input[@id='form_pets_dog']")).to be_checked
|
|
46
47
|
@session.uncheck('form_pets_dog')
|
|
47
|
-
expect(@session.find(:xpath, "//input[@id='form_pets_dog']")
|
|
48
|
+
expect(@session.find(:xpath, "//input[@id='form_pets_dog']")).not_to be_checked
|
|
48
49
|
end
|
|
49
50
|
end
|
|
50
51
|
|
|
@@ -68,7 +69,7 @@ Capybara::SpecHelper.spec "#check" do
|
|
|
68
69
|
|
|
69
70
|
context "with a locator that doesn't exist" do
|
|
70
71
|
it "should raise an error" do
|
|
71
|
-
msg = "Unable to find checkbox \"does not exist\""
|
|
72
|
+
msg = "Unable to find visible checkbox \"does not exist\" that is not disabled"
|
|
72
73
|
expect do
|
|
73
74
|
@session.check('does not exist')
|
|
74
75
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
|
@@ -85,29 +86,104 @@ Capybara::SpecHelper.spec "#check" do
|
|
|
85
86
|
|
|
86
87
|
context "with :exact option" do
|
|
87
88
|
it "should accept partial matches when false" do
|
|
88
|
-
@session.check('Ham', :
|
|
89
|
+
@session.check('Ham', exact: false)
|
|
89
90
|
@session.click_button('awesome')
|
|
90
91
|
expect(extract_results(@session)['pets']).to include('hamster')
|
|
91
92
|
end
|
|
92
93
|
|
|
93
94
|
it "should not accept partial matches when true" do
|
|
94
95
|
expect do
|
|
95
|
-
@session.check('Ham', :
|
|
96
|
+
@session.check('Ham', exact: true)
|
|
96
97
|
end.to raise_error(Capybara::ElementNotFound)
|
|
97
98
|
end
|
|
98
99
|
end
|
|
99
100
|
|
|
100
101
|
context "with `option` option" do
|
|
101
102
|
it "can check boxes by their value" do
|
|
102
|
-
@session.check('form[pets][]', :
|
|
103
|
+
@session.check('form[pets][]', option: "cat")
|
|
103
104
|
@session.click_button('awesome')
|
|
104
105
|
expect(extract_results(@session)['pets']).to include('cat')
|
|
105
106
|
end
|
|
106
107
|
|
|
107
108
|
it "should raise an error if option not found" do
|
|
108
109
|
expect do
|
|
109
|
-
@session.check('form[pets][]', :
|
|
110
|
+
@session.check('form[pets][]', option: "elephant")
|
|
110
111
|
end.to raise_error(Capybara::ElementNotFound)
|
|
111
112
|
end
|
|
112
113
|
end
|
|
114
|
+
|
|
115
|
+
context "when checkbox hidden" do
|
|
116
|
+
context "with Capybara.automatic_label_click == true" do
|
|
117
|
+
around do |spec|
|
|
118
|
+
old_click_label, Capybara.automatic_label_click = Capybara.automatic_label_click, true
|
|
119
|
+
spec.run
|
|
120
|
+
Capybara.automatic_label_click = old_click_label
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
it "should check via clicking the label with :for attribute if possible" do
|
|
124
|
+
expect(@session.find(:checkbox, 'form_cars_tesla', unchecked: true, visible: :hidden)).to be
|
|
125
|
+
@session.check('form_cars_tesla')
|
|
126
|
+
@session.click_button('awesome')
|
|
127
|
+
expect(extract_results(@session)['cars']).to include('tesla')
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
it "should check via clicking the wrapping label if possible" do
|
|
131
|
+
expect(@session.find(:checkbox, 'form_cars_mclaren', unchecked: true, visible: :hidden)).to be
|
|
132
|
+
@session.check('form_cars_mclaren')
|
|
133
|
+
@session.click_button('awesome')
|
|
134
|
+
expect(extract_results(@session)['cars']).to include('mclaren')
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
it "should not click the label if unneeded" do
|
|
138
|
+
expect(@session.find(:checkbox, 'form_cars_jaguar', checked: true, visible: :hidden)).to be
|
|
139
|
+
@session.check('form_cars_jaguar')
|
|
140
|
+
@session.click_button('awesome')
|
|
141
|
+
expect(extract_results(@session)['cars']).to include('jaguar')
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
it "should raise original error when no label available" do
|
|
145
|
+
expect { @session.check('form_cars_ariel') }.to raise_error(Capybara::ElementNotFound, 'Unable to find visible checkbox "form_cars_ariel" that is not disabled')
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
it "should raise error if not allowed to click label" do
|
|
149
|
+
expect{@session.check('form_cars_mclaren', allow_label_click: false)}.to raise_error(Capybara::ElementNotFound, 'Unable to find visible checkbox "form_cars_mclaren" that is not disabled')
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
context "with Capybara.automatic_label_click == false" do
|
|
154
|
+
around do |spec|
|
|
155
|
+
old_label_click, Capybara.automatic_label_click = Capybara.automatic_label_click, false
|
|
156
|
+
spec.run
|
|
157
|
+
Capybara.automatic_label_click = old_label_click
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
it "should raise error if checkbox not visible" do
|
|
161
|
+
expect{@session.check('form_cars_mclaren')}.to raise_error(Capybara::ElementNotFound, 'Unable to find visible checkbox "form_cars_mclaren" that is not disabled')
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
context "with allow_label_click == true" do
|
|
165
|
+
it "should check via the label if input is hidden" do
|
|
166
|
+
expect(@session.find(:checkbox, 'form_cars_tesla', unchecked: true, visible: :hidden)).to be
|
|
167
|
+
@session.check('form_cars_tesla', allow_label_click: true)
|
|
168
|
+
@session.click_button('awesome')
|
|
169
|
+
expect(extract_results(@session)['cars']).to include('tesla')
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
it "should not wait the full time if label can be clicked" do
|
|
173
|
+
expect(@session.find(:checkbox, 'form_cars_tesla', unchecked: true, visible: :hidden)).to be
|
|
174
|
+
start_time = Time.now
|
|
175
|
+
@session.check('form_cars_tesla', allow_label_click: true, wait: 10)
|
|
176
|
+
end_time = Time.now
|
|
177
|
+
expect(end_time - start_time).to be < 10
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
it "should check via the label if input is moved off the left edge of the page" do
|
|
181
|
+
expect(@session.find(:checkbox, 'form_cars_pagani', unchecked: true, visible: :all)).to be
|
|
182
|
+
@session.check('form_cars_pagani', allow_label_click: true)
|
|
183
|
+
@session.click_button('awesome')
|
|
184
|
+
expect(extract_results(@session)['cars']).to include('pagani')
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|
|
113
189
|
end
|