capybara 2.7.0 → 3.35.3
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/.yardopts +1 -0
- data/History.md +1147 -11
- data/License.txt +1 -1
- data/README.md +252 -131
- data/lib/capybara/config.rb +92 -0
- data/lib/capybara/cucumber.rb +3 -3
- data/lib/capybara/driver/base.rb +52 -21
- data/lib/capybara/driver/node.rb +48 -14
- data/lib/capybara/dsl.rb +16 -9
- data/lib/capybara/helpers.rb +72 -81
- data/lib/capybara/minitest/spec.rb +267 -0
- data/lib/capybara/minitest.rb +385 -0
- data/lib/capybara/node/actions.rb +337 -89
- data/lib/capybara/node/base.rb +50 -32
- data/lib/capybara/node/document.rb +19 -3
- data/lib/capybara/node/document_matchers.rb +22 -24
- data/lib/capybara/node/element.rb +388 -125
- data/lib/capybara/node/finders.rb +231 -121
- data/lib/capybara/node/matchers.rb +503 -217
- data/lib/capybara/node/simple.rb +64 -27
- data/lib/capybara/queries/ancestor_query.rb +27 -0
- data/lib/capybara/queries/base_query.rb +87 -11
- data/lib/capybara/queries/current_path_query.rb +24 -24
- data/lib/capybara/queries/match_query.rb +15 -10
- data/lib/capybara/queries/selector_query.rb +675 -81
- data/lib/capybara/queries/sibling_query.rb +26 -0
- data/lib/capybara/queries/style_query.rb +45 -0
- data/lib/capybara/queries/text_query.rb +88 -20
- data/lib/capybara/queries/title_query.rb +9 -11
- data/lib/capybara/rack_test/browser.rb +63 -39
- data/lib/capybara/rack_test/css_handlers.rb +6 -4
- data/lib/capybara/rack_test/driver.rb +26 -16
- data/lib/capybara/rack_test/errors.rb +6 -0
- data/lib/capybara/rack_test/form.rb +73 -58
- data/lib/capybara/rack_test/node.rb +187 -67
- data/lib/capybara/rails.rb +4 -8
- data/lib/capybara/registration_container.rb +44 -0
- data/lib/capybara/registrations/drivers.rb +42 -0
- data/lib/capybara/registrations/patches/puma_ssl.rb +29 -0
- data/lib/capybara/registrations/servers.rb +45 -0
- data/lib/capybara/result.rb +142 -14
- data/lib/capybara/rspec/features.rb +17 -42
- data/lib/capybara/rspec/matcher_proxies.rb +82 -0
- data/lib/capybara/rspec/matchers/base.rb +111 -0
- data/lib/capybara/rspec/matchers/become_closed.rb +33 -0
- data/lib/capybara/rspec/matchers/compound.rb +88 -0
- data/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
- data/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
- data/lib/capybara/rspec/matchers/have_current_path.rb +29 -0
- data/lib/capybara/rspec/matchers/have_selector.rb +77 -0
- data/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
- data/lib/capybara/rspec/matchers/have_text.rb +33 -0
- data/lib/capybara/rspec/matchers/have_title.rb +29 -0
- data/lib/capybara/rspec/matchers/match_selector.rb +27 -0
- data/lib/capybara/rspec/matchers/match_style.rb +43 -0
- data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
- data/lib/capybara/rspec/matchers.rb +143 -244
- data/lib/capybara/rspec.rb +10 -12
- data/lib/capybara/selector/builders/css_builder.rb +84 -0
- data/lib/capybara/selector/builders/xpath_builder.rb +71 -0
- data/lib/capybara/selector/css.rb +102 -0
- data/lib/capybara/selector/definition/button.rb +63 -0
- data/lib/capybara/selector/definition/checkbox.rb +26 -0
- data/lib/capybara/selector/definition/css.rb +10 -0
- data/lib/capybara/selector/definition/datalist_input.rb +35 -0
- data/lib/capybara/selector/definition/datalist_option.rb +25 -0
- data/lib/capybara/selector/definition/element.rb +28 -0
- data/lib/capybara/selector/definition/field.rb +40 -0
- data/lib/capybara/selector/definition/fieldset.rb +14 -0
- data/lib/capybara/selector/definition/file_field.rb +13 -0
- data/lib/capybara/selector/definition/fillable_field.rb +33 -0
- data/lib/capybara/selector/definition/frame.rb +17 -0
- data/lib/capybara/selector/definition/id.rb +6 -0
- data/lib/capybara/selector/definition/label.rb +62 -0
- data/lib/capybara/selector/definition/link.rb +54 -0
- data/lib/capybara/selector/definition/link_or_button.rb +16 -0
- data/lib/capybara/selector/definition/option.rb +27 -0
- data/lib/capybara/selector/definition/radio_button.rb +27 -0
- data/lib/capybara/selector/definition/select.rb +81 -0
- data/lib/capybara/selector/definition/table.rb +109 -0
- data/lib/capybara/selector/definition/table_row.rb +21 -0
- data/lib/capybara/selector/definition/xpath.rb +5 -0
- data/lib/capybara/selector/definition.rb +278 -0
- data/lib/capybara/selector/filter.rb +3 -46
- data/lib/capybara/selector/filter_set.rb +124 -0
- data/lib/capybara/selector/filters/base.rb +77 -0
- data/lib/capybara/selector/filters/expression_filter.rb +22 -0
- data/lib/capybara/selector/filters/locator_filter.rb +29 -0
- data/lib/capybara/selector/filters/node_filter.rb +31 -0
- data/lib/capybara/selector/regexp_disassembler.rb +214 -0
- data/lib/capybara/selector/selector.rb +155 -0
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/lib/capybara/selector.rb +232 -369
- data/lib/capybara/selenium/atoms/getAttribute.min.js +1 -0
- data/lib/capybara/selenium/atoms/isDisplayed.min.js +1 -0
- data/lib/capybara/selenium/atoms/src/getAttribute.js +161 -0
- data/lib/capybara/selenium/atoms/src/isDisplayed.js +454 -0
- data/lib/capybara/selenium/driver.rb +380 -142
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
- data/lib/capybara/selenium/driver_specializations/edge_driver.rb +124 -0
- data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +89 -0
- data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +26 -0
- data/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
- data/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
- data/lib/capybara/selenium/extensions/find.rb +110 -0
- data/lib/capybara/selenium/extensions/html5_drag.rb +228 -0
- data/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
- data/lib/capybara/selenium/extensions/scroll.rb +76 -0
- data/lib/capybara/selenium/logger_suppressor.rb +40 -0
- data/lib/capybara/selenium/node.rb +528 -97
- data/lib/capybara/selenium/nodes/chrome_node.rb +137 -0
- data/lib/capybara/selenium/nodes/edge_node.rb +104 -0
- data/lib/capybara/selenium/nodes/firefox_node.rb +136 -0
- data/lib/capybara/selenium/nodes/ie_node.rb +22 -0
- data/lib/capybara/selenium/nodes/safari_node.rb +118 -0
- data/lib/capybara/selenium/patches/action_pauser.rb +26 -0
- data/lib/capybara/selenium/patches/atoms.rb +18 -0
- data/lib/capybara/selenium/patches/is_displayed.rb +16 -0
- data/lib/capybara/selenium/patches/logs.rb +45 -0
- data/lib/capybara/selenium/patches/pause_duration_fix.rb +9 -0
- data/lib/capybara/selenium/patches/persistent_client.rb +20 -0
- data/lib/capybara/server/animation_disabler.rb +63 -0
- data/lib/capybara/server/checker.rb +44 -0
- data/lib/capybara/server/middleware.rb +71 -0
- data/lib/capybara/server.rb +74 -71
- data/lib/capybara/session/config.rb +126 -0
- data/lib/capybara/session/matchers.rb +44 -27
- data/lib/capybara/session.rb +500 -297
- data/lib/capybara/spec/fixtures/no_extension +1 -0
- data/lib/capybara/spec/public/jquery.js +5 -5
- data/lib/capybara/spec/public/offset.js +6 -0
- data/lib/capybara/spec/public/test.js +168 -14
- data/lib/capybara/spec/session/accept_alert_spec.rb +37 -14
- data/lib/capybara/spec/session/accept_confirm_spec.rb +7 -6
- data/lib/capybara/spec/session/accept_prompt_spec.rb +38 -10
- data/lib/capybara/spec/session/all_spec.rb +179 -59
- data/lib/capybara/spec/session/ancestor_spec.rb +88 -0
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +140 -0
- data/lib/capybara/spec/session/assert_current_path_spec.rb +75 -0
- data/lib/capybara/spec/session/assert_selector_spec.rb +143 -0
- data/lib/capybara/spec/session/assert_style_spec.rb +26 -0
- data/lib/capybara/spec/session/assert_text_spec.rb +258 -0
- data/lib/capybara/spec/session/assert_title_spec.rb +93 -0
- data/lib/capybara/spec/session/attach_file_spec.rb +154 -48
- data/lib/capybara/spec/session/body_spec.rb +12 -13
- data/lib/capybara/spec/session/check_spec.rb +168 -41
- data/lib/capybara/spec/session/choose_spec.rb +75 -23
- data/lib/capybara/spec/session/click_button_spec.rb +243 -175
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +57 -32
- data/lib/capybara/spec/session/click_link_spec.rb +100 -53
- data/lib/capybara/spec/session/current_scope_spec.rb +11 -10
- data/lib/capybara/spec/session/current_url_spec.rb +61 -35
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +7 -7
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +5 -4
- data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb} +13 -6
- data/lib/capybara/spec/session/element/match_css_spec.rb +21 -7
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +9 -7
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +91 -34
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +23 -0
- data/lib/capybara/spec/session/evaluate_script_spec.rb +45 -3
- data/lib/capybara/spec/session/execute_script_spec.rb +24 -4
- data/lib/capybara/spec/session/fill_in_spec.rb +166 -64
- data/lib/capybara/spec/session/find_button_spec.rb +37 -18
- data/lib/capybara/spec/session/find_by_id_spec.rb +10 -9
- data/lib/capybara/spec/session/find_field_spec.rb +57 -34
- data/lib/capybara/spec/session/find_link_spec.rb +47 -10
- data/lib/capybara/spec/session/find_spec.rb +290 -144
- data/lib/capybara/spec/session/first_spec.rb +91 -48
- 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 +116 -0
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +112 -0
- data/lib/capybara/spec/session/go_back_spec.rb +3 -2
- data/lib/capybara/spec/session/go_forward_spec.rb +3 -2
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +69 -0
- data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
- data/lib/capybara/spec/session/has_any_selectors_spec.rb +25 -0
- data/lib/capybara/spec/session/has_button_spec.rb +76 -19
- data/lib/capybara/spec/session/has_css_spec.rb +277 -131
- data/lib/capybara/spec/session/has_current_path_spec.rb +98 -26
- data/lib/capybara/spec/session/has_field_spec.rb +177 -107
- data/lib/capybara/spec/session/has_link_spec.rb +13 -12
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +78 -0
- data/lib/capybara/spec/session/has_select_spec.rb +191 -95
- data/lib/capybara/spec/session/has_selector_spec.rb +128 -64
- data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
- data/lib/capybara/spec/session/has_table_spec.rb +172 -5
- data/lib/capybara/spec/session/has_text_spec.rb +126 -60
- data/lib/capybara/spec/session/has_title_spec.rb +35 -12
- data/lib/capybara/spec/session/has_xpath_spec.rb +74 -53
- data/lib/capybara/spec/session/{headers.rb → headers_spec.rb} +3 -2
- data/lib/capybara/spec/session/html_spec.rb +14 -6
- data/lib/capybara/spec/session/matches_style_spec.rb +35 -0
- data/lib/capybara/spec/session/node_spec.rb +1028 -131
- data/lib/capybara/spec/session/node_wrapper_spec.rb +39 -0
- data/lib/capybara/spec/session/refresh_spec.rb +34 -0
- data/lib/capybara/spec/session/reset_session_spec.rb +75 -34
- data/lib/capybara/spec/session/{response_code.rb → response_code_spec.rb} +2 -1
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +3 -2
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +11 -15
- data/lib/capybara/spec/session/save_page_spec.rb +42 -55
- data/lib/capybara/spec/session/save_screenshot_spec.rb +16 -14
- data/lib/capybara/spec/session/screenshot_spec.rb +2 -2
- data/lib/capybara/spec/session/scroll_spec.rb +117 -0
- data/lib/capybara/spec/session/select_spec.rb +112 -85
- data/lib/capybara/spec/session/selectors_spec.rb +71 -8
- data/lib/capybara/spec/session/sibling_spec.rb +52 -0
- data/lib/capybara/spec/session/text_spec.rb +38 -23
- data/lib/capybara/spec/session/title_spec.rb +17 -5
- data/lib/capybara/spec/session/uncheck_spec.rb +71 -12
- data/lib/capybara/spec/session/unselect_spec.rb +44 -43
- data/lib/capybara/spec/session/visit_spec.rb +99 -32
- data/lib/capybara/spec/session/window/become_closed_spec.rb +33 -29
- data/lib/capybara/spec/session/window/current_window_spec.rb +5 -3
- data/lib/capybara/spec/session/window/open_new_window_spec.rb +5 -3
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +39 -30
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +17 -10
- data/lib/capybara/spec/session/window/window_spec.rb +121 -73
- data/lib/capybara/spec/session/window/windows_spec.rb +12 -10
- data/lib/capybara/spec/session/window/within_window_spec.rb +52 -82
- data/lib/capybara/spec/session/within_spec.rb +76 -43
- data/lib/capybara/spec/spec_helper.rb +67 -33
- data/lib/capybara/spec/test_app.rb +85 -36
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/buttons.erb +1 -1
- data/lib/capybara/spec/views/fieldsets.erb +1 -1
- data/lib/capybara/spec/views/form.erb +227 -20
- 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 +2 -2
- data/lib/capybara/spec/views/frame_two.erb +1 -1
- data/lib/capybara/spec/views/header_links.erb +1 -1
- data/lib/capybara/spec/views/host_links.erb +1 -1
- data/lib/capybara/spec/views/initial_alert.erb +10 -0
- data/lib/capybara/spec/views/obscured.erb +47 -0
- data/lib/capybara/spec/views/offset.erb +32 -0
- data/lib/capybara/spec/views/path.erb +1 -1
- data/lib/capybara/spec/views/popup_one.erb +1 -1
- data/lib/capybara/spec/views/popup_two.erb +1 -1
- data/lib/capybara/spec/views/postback.erb +1 -1
- data/lib/capybara/spec/views/react.erb +45 -0
- data/lib/capybara/spec/views/scroll.erb +20 -0
- data/lib/capybara/spec/views/spatial.erb +31 -0
- data/lib/capybara/spec/views/tables.erb +69 -2
- data/lib/capybara/spec/views/with_animation.erb +82 -0
- data/lib/capybara/spec/views/with_base_tag.erb +1 -1
- data/lib/capybara/spec/views/with_count.erb +1 -1
- data/lib/capybara/spec/views/with_dragula.erb +24 -0
- 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_hover1.erb +10 -0
- data/lib/capybara/spec/views/with_html.erb +100 -10
- data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
- data/lib/capybara/spec/views/with_html_entities.erb +1 -1
- data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
- data/lib/capybara/spec/views/with_js.erb +49 -3
- data/lib/capybara/spec/views/with_jstree.erb +26 -0
- data/lib/capybara/spec/views/with_namespace.erb +20 -0
- data/lib/capybara/spec/views/with_scope.erb +1 -1
- data/lib/capybara/spec/views/with_scope_other.erb +6 -0
- data/lib/capybara/spec/views/with_simple_html.erb +1 -1
- data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
- data/lib/capybara/spec/views/with_title.erb +1 -1
- data/lib/capybara/spec/views/with_unload_alert.erb +3 -1
- data/lib/capybara/spec/views/with_windows.erb +7 -1
- data/lib/capybara/spec/views/within_frames.erb +6 -3
- data/lib/capybara/version.rb +2 -1
- data/lib/capybara/window.rb +39 -21
- data/lib/capybara.rb +208 -186
- data/spec/basic_node_spec.rb +52 -39
- data/spec/capybara_spec.rb +72 -50
- data/spec/css_builder_spec.rb +101 -0
- data/spec/css_splitter_spec.rb +38 -0
- data/spec/dsl_spec.rb +81 -61
- data/spec/filter_set_spec.rb +46 -0
- data/spec/fixtures/capybara.csv +1 -0
- data/spec/fixtures/certificate.pem +25 -0
- data/spec/fixtures/key.pem +27 -0
- data/spec/fixtures/selenium_driver_rspec_failure.rb +7 -3
- data/spec/fixtures/selenium_driver_rspec_success.rb +7 -3
- data/spec/minitest_spec.rb +164 -0
- data/spec/minitest_spec_spec.rb +162 -0
- data/spec/per_session_config_spec.rb +68 -0
- data/spec/rack_test_spec.rb +189 -96
- data/spec/regexp_dissassembler_spec.rb +250 -0
- data/spec/result_spec.rb +143 -13
- data/spec/rspec/features_spec.rb +38 -32
- data/spec/rspec/scenarios_spec.rb +9 -7
- data/spec/rspec/shared_spec_matchers.rb +959 -0
- data/spec/rspec/views_spec.rb +9 -3
- data/spec/rspec_matchers_spec.rb +62 -0
- data/spec/rspec_spec.rb +127 -30
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +458 -37
- data/spec/selenium_spec_chrome.rb +196 -9
- data/spec/selenium_spec_chrome_remote.rb +100 -0
- data/spec/selenium_spec_edge.rb +47 -0
- data/spec/selenium_spec_firefox.rb +210 -0
- data/spec/selenium_spec_firefox_remote.rb +80 -0
- data/spec/selenium_spec_ie.rb +150 -0
- data/spec/selenium_spec_safari.rb +148 -0
- data/spec/server_spec.rb +200 -101
- data/spec/session_spec.rb +91 -0
- data/spec/shared_selenium_node.rb +83 -0
- data/spec/shared_selenium_session.rb +558 -0
- data/spec/spec_helper.rb +94 -2
- data/spec/xpath_builder_spec.rb +93 -0
- metadata +420 -60
- data/lib/capybara/query.rb +0 -7
- data/lib/capybara/spec/session/assert_current_path.rb +0 -60
- data/lib/capybara/spec/session/assert_selector.rb +0 -148
- data/lib/capybara/spec/session/assert_text.rb +0 -196
- data/lib/capybara/spec/session/assert_title.rb +0 -70
- data/lib/capybara/spec/session/source_spec.rb +0 -0
- data/lib/capybara/spec/session/within_frame_spec.rb +0 -53
- data/spec/rspec/matchers_spec.rb +0 -827
- data/spec/selenium_spec.rb +0 -151
|
@@ -1,56 +1,105 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
Capybara::SpecHelper.spec '#has_current_path?' do
|
|
3
4
|
before do
|
|
4
5
|
@session.visit('/with_js')
|
|
5
6
|
end
|
|
6
7
|
|
|
7
|
-
it
|
|
8
|
+
it 'should be true if the page has the given current path' do
|
|
8
9
|
expect(@session).to have_current_path('/with_js')
|
|
9
10
|
end
|
|
10
11
|
|
|
11
|
-
it
|
|
12
|
+
it 'should allow regexp matches' do
|
|
12
13
|
expect(@session).to have_current_path(/w[a-z]{3}_js/)
|
|
13
14
|
expect(@session).not_to have_current_path(/monkey/)
|
|
14
15
|
end
|
|
15
16
|
|
|
16
|
-
it
|
|
17
|
-
@session.
|
|
18
|
-
expect(@session).to
|
|
17
|
+
it 'should not raise an error when non-http' do
|
|
18
|
+
@session.reset_session!
|
|
19
|
+
expect(@session.has_current_path?(/monkey/)).to eq false
|
|
20
|
+
expect(@session.has_current_path?('/with_js')).to eq false
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'should handle non-escaped query options' do
|
|
24
|
+
@session.click_link('Non-escaped query options')
|
|
25
|
+
expect(@session).to have_current_path('/with_html?options[]=things')
|
|
19
26
|
end
|
|
20
27
|
|
|
21
|
-
it
|
|
22
|
-
@session.click_link(
|
|
23
|
-
expect(@session).to have_current_path(
|
|
28
|
+
it 'should handle escaped query options' do
|
|
29
|
+
@session.click_link('Escaped query options')
|
|
30
|
+
expect(@session).to have_current_path('/with_html?options%5B%5D=things')
|
|
24
31
|
end
|
|
25
32
|
|
|
26
|
-
it
|
|
27
|
-
@session.click_link(
|
|
28
|
-
expect(@session).to have_current_path(
|
|
33
|
+
it 'should wait for current_path', requires: [:js] do
|
|
34
|
+
@session.click_link('Change page')
|
|
35
|
+
expect(@session).to have_current_path('/with_html', wait: 3)
|
|
29
36
|
end
|
|
30
37
|
|
|
31
|
-
it
|
|
38
|
+
it 'should be false if the page has not the given current_path' do
|
|
32
39
|
expect(@session).not_to have_current_path('/with_html')
|
|
33
40
|
end
|
|
34
41
|
|
|
35
|
-
it
|
|
42
|
+
it 'should check query options' do
|
|
36
43
|
@session.visit('/with_js?test=test')
|
|
37
44
|
expect(@session).to have_current_path('/with_js?test=test')
|
|
38
45
|
end
|
|
39
46
|
|
|
40
|
-
it
|
|
47
|
+
it 'should compare the full url if url: true is used' do
|
|
41
48
|
expect(@session).to have_current_path(%r{\Ahttp://[^/]*/with_js\Z}, url: true)
|
|
49
|
+
domain_port = if @session.respond_to?(:server) && @session.server
|
|
50
|
+
"#{@session.server.host}:#{@session.server.port}"
|
|
51
|
+
else
|
|
52
|
+
'www.example.com'
|
|
53
|
+
end
|
|
54
|
+
expect(@session).to have_current_path("http://#{domain_port}/with_js", url: true)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'should not compare the full url if url: true is not passed' do
|
|
58
|
+
expect(@session).to have_current_path(%r{^/with_js\Z})
|
|
59
|
+
expect(@session).to have_current_path('/with_js')
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it 'should not compare the full url if url: false is passed' do
|
|
63
|
+
expect(@session).to have_current_path(%r{^/with_js\Z}, url: false)
|
|
64
|
+
expect(@session).to have_current_path('/with_js', url: false)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it 'should default to full url if value is a url' do
|
|
68
|
+
url = @session.current_url
|
|
69
|
+
expect(url).to match(/with_js$/)
|
|
70
|
+
expect(@session).to have_current_path(url)
|
|
71
|
+
expect(@session).not_to have_current_path('http://www.not_example.com/with_js')
|
|
42
72
|
end
|
|
43
73
|
|
|
44
|
-
it
|
|
74
|
+
it 'should ignore the query' do
|
|
45
75
|
@session.visit('/with_js?test=test')
|
|
46
76
|
expect(@session).to have_current_path('/with_js?test=test')
|
|
47
|
-
expect(@session).to have_current_path('/with_js',
|
|
77
|
+
expect(@session).to have_current_path('/with_js', ignore_query: true)
|
|
78
|
+
uri = ::Addressable::URI.parse(@session.current_url)
|
|
79
|
+
uri.query = nil
|
|
80
|
+
expect(@session).to have_current_path(uri.to_s, ignore_query: true)
|
|
48
81
|
end
|
|
49
82
|
|
|
50
|
-
it
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
83
|
+
it 'should not raise an exception if the current_url is nil' do
|
|
84
|
+
allow(@session).to receive(:current_url).and_return(nil)
|
|
85
|
+
allow(@session.page).to receive(:current_url).and_return(nil) if @session.respond_to? :page
|
|
86
|
+
|
|
87
|
+
# Without ignore_query option
|
|
88
|
+
expect do
|
|
89
|
+
expect(@session).to have_current_path(nil)
|
|
90
|
+
end.not_to raise_exception
|
|
91
|
+
|
|
92
|
+
# With ignore_query option
|
|
93
|
+
expect do
|
|
94
|
+
expect(@session).to have_current_path(nil, ignore_query: true)
|
|
95
|
+
end.not_to raise_exception
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it 'should accept a filter block that receives Addressable::URL' do
|
|
99
|
+
@session.visit('/with_js?a=3&b=defgh')
|
|
100
|
+
expect(@session).to have_current_path('/with_js', ignore_query: true) { |url|
|
|
101
|
+
url.query_values.keys == %w[a b]
|
|
102
|
+
}
|
|
54
103
|
end
|
|
55
104
|
end
|
|
56
105
|
|
|
@@ -59,21 +108,44 @@ Capybara::SpecHelper.spec '#has_no_current_path?' do
|
|
|
59
108
|
@session.visit('/with_js')
|
|
60
109
|
end
|
|
61
110
|
|
|
62
|
-
it
|
|
111
|
+
it 'should be false if the page has the given current_path' do
|
|
63
112
|
expect(@session).not_to have_no_current_path('/with_js')
|
|
64
113
|
end
|
|
65
114
|
|
|
66
|
-
it
|
|
115
|
+
it 'should allow regexp matches' do
|
|
67
116
|
expect(@session).not_to have_no_current_path(/w[a-z]{3}_js/)
|
|
68
117
|
expect(@session).to have_no_current_path(/monkey/)
|
|
69
118
|
end
|
|
70
119
|
|
|
71
|
-
it
|
|
72
|
-
|
|
73
|
-
|
|
120
|
+
it 'should wait for current_path to disappear', requires: [:js] do
|
|
121
|
+
Capybara.using_wait_time(3) do
|
|
122
|
+
@session.click_link('Change page')
|
|
123
|
+
expect(@session).to have_no_current_path('/with_js')
|
|
124
|
+
end
|
|
74
125
|
end
|
|
75
126
|
|
|
76
|
-
it
|
|
127
|
+
it 'should be true if the page has not the given current_path' do
|
|
77
128
|
expect(@session).to have_no_current_path('/with_html')
|
|
78
129
|
end
|
|
130
|
+
|
|
131
|
+
it 'should not raise an exception if the current_url is nil' do
|
|
132
|
+
allow(@session).to receive(:current_url).and_return(nil)
|
|
133
|
+
allow(@session.page).to receive(:current_url).and_return(nil) if @session.respond_to? :page
|
|
134
|
+
|
|
135
|
+
# Without ignore_query option
|
|
136
|
+
expect do
|
|
137
|
+
expect(@session).not_to have_current_path('/with_js')
|
|
138
|
+
end.not_to raise_exception
|
|
139
|
+
|
|
140
|
+
# With ignore_query option
|
|
141
|
+
expect do
|
|
142
|
+
expect(@session).not_to have_current_path('/with_js', ignore_query: true)
|
|
143
|
+
end.not_to raise_exception
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
it 'should accept a filter block that receives Addressable::URL' do
|
|
147
|
+
expect(@session).to have_no_current_path('/with_js', ignore_query: true) { |url|
|
|
148
|
+
!url.query.nil?
|
|
149
|
+
}
|
|
150
|
+
end
|
|
79
151
|
end
|
|
@@ -1,127 +1,187 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
Capybara::SpecHelper.spec '#has_field' do
|
|
3
4
|
before { @session.visit('/form') }
|
|
4
5
|
|
|
5
|
-
it
|
|
6
|
+
it 'should be true if the field is on the page' do
|
|
6
7
|
expect(@session).to have_field('Dog')
|
|
7
8
|
expect(@session).to have_field('form_description')
|
|
8
9
|
expect(@session).to have_field('Region')
|
|
9
|
-
expect(@session).to have_field(:
|
|
10
|
+
expect(@session).to have_field(:Region)
|
|
10
11
|
end
|
|
11
12
|
|
|
12
|
-
it
|
|
13
|
+
it 'should be false if the field is not on the page' do
|
|
13
14
|
expect(@session).not_to have_field('Monkey')
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
context 'with value' do
|
|
17
|
-
it
|
|
18
|
-
expect(@session).to have_field('First Name', :
|
|
19
|
-
expect(@session).to have_field('
|
|
20
|
-
expect(@session).to have_field('
|
|
21
|
-
expect(@session).to have_field('
|
|
18
|
+
it 'should be true if a field with the given value is on the page' do
|
|
19
|
+
expect(@session).to have_field('First Name', with: 'John')
|
|
20
|
+
expect(@session).to have_field('First Name', with: /^Joh/)
|
|
21
|
+
expect(@session).to have_field('Phone', with: '+1 555 7021')
|
|
22
|
+
expect(@session).to have_field('Street', with: 'Sesame street 66')
|
|
23
|
+
expect(@session).to have_field('Description', with: 'Descriptive text goes here')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'should be false if the given field is not on the page' do
|
|
27
|
+
expect(@session).not_to have_field('First Name', with: 'Peter')
|
|
28
|
+
expect(@session).not_to have_field('First Name', with: /eter$/)
|
|
29
|
+
expect(@session).not_to have_field('Wrong Name', with: 'John')
|
|
30
|
+
expect(@session).not_to have_field('Description', with: 'Monkey')
|
|
22
31
|
end
|
|
23
32
|
|
|
24
|
-
it
|
|
25
|
-
|
|
26
|
-
expect(@session).
|
|
27
|
-
expect(@session).
|
|
33
|
+
it 'should be true after the field has been filled in with the given value' do
|
|
34
|
+
@session.fill_in('First Name', with: 'Jonas')
|
|
35
|
+
expect(@session).to have_field('First Name', with: 'Jonas')
|
|
36
|
+
expect(@session).to have_field('First Name', with: /ona/)
|
|
28
37
|
end
|
|
29
38
|
|
|
30
|
-
it
|
|
31
|
-
@session.fill_in('First Name', :
|
|
32
|
-
expect(@session).
|
|
39
|
+
it 'should be false after the field has been filled in with a different value' do
|
|
40
|
+
@session.fill_in('First Name', with: 'Jonas')
|
|
41
|
+
expect(@session).not_to have_field('First Name', with: 'John')
|
|
42
|
+
expect(@session).not_to have_field('First Name', with: /John|Paul|George|Ringo/)
|
|
33
43
|
end
|
|
34
44
|
|
|
35
|
-
it
|
|
36
|
-
@session.fill_in('First Name', :
|
|
37
|
-
expect
|
|
45
|
+
it 'should output filter errors if only one element matched the selector but failed the filters' do
|
|
46
|
+
@session.fill_in('First Name', with: 'Thomas')
|
|
47
|
+
expect do
|
|
48
|
+
expect(@session).to have_field('First Name', with: 'Jonas')
|
|
49
|
+
end.to raise_exception(RSpec::Expectations::ExpectationNotMetError, /Expected value to be "Jonas" but was "Thomas"/)
|
|
50
|
+
|
|
51
|
+
# native boolean node filter
|
|
52
|
+
expect do
|
|
53
|
+
expect(@session).to have_field('First Name', readonly: true)
|
|
54
|
+
end.to raise_exception(RSpec::Expectations::ExpectationNotMetError, /Expected readonly true but it wasn't/)
|
|
55
|
+
|
|
56
|
+
# inherited boolean node filter
|
|
57
|
+
expect do
|
|
58
|
+
expect(@session).to have_field('form_pets_cat', checked: true)
|
|
59
|
+
end.to raise_exception(RSpec::Expectations::ExpectationNotMetError, /Expected checked true but it wasn't/)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
context 'with validation message', requires: [:html_validation] do
|
|
64
|
+
it 'should accept a regexp' do
|
|
65
|
+
@session.fill_in('form_zipcode', with: '1234')
|
|
66
|
+
expect(@session).to have_field('form_zipcode', validation_message: /match the requested format/)
|
|
67
|
+
expect(@session).not_to have_field('form_zipcode', validation_message: /random/)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it 'should accept a string' do
|
|
71
|
+
@session.fill_in('form_zipcode', with: '1234')
|
|
72
|
+
expect(@session).to have_field('form_zipcode', validation_message: 'Please match the requested format.')
|
|
73
|
+
expect(@session).not_to have_field('form_zipcode', validation_message: 'match the requested format.')
|
|
74
|
+
@session.fill_in('form_zipcode', with: '12345')
|
|
75
|
+
expect(@session).to have_field('form_zipcode', validation_message: '')
|
|
38
76
|
end
|
|
39
77
|
end
|
|
40
78
|
|
|
41
79
|
context 'with type' do
|
|
42
|
-
it
|
|
43
|
-
expect(@session).to have_field('First Name', :
|
|
44
|
-
expect(@session).to have_field('Html5 Email', :
|
|
45
|
-
expect(@session).to have_field('Html5 Multiple Email', :
|
|
46
|
-
expect(@session).to have_field('Html5 Tel', :
|
|
47
|
-
expect(@session).to have_field('Description', :
|
|
48
|
-
expect(@session).to have_field('Languages', :
|
|
80
|
+
it 'should be true if a field with the given type is on the page' do
|
|
81
|
+
expect(@session).to have_field('First Name', type: 'text')
|
|
82
|
+
expect(@session).to have_field('Html5 Email', type: 'email')
|
|
83
|
+
expect(@session).to have_field('Html5 Multiple Email', type: 'email')
|
|
84
|
+
expect(@session).to have_field('Html5 Tel', type: 'tel')
|
|
85
|
+
expect(@session).to have_field('Description', type: 'textarea')
|
|
86
|
+
expect(@session).to have_field('Languages', type: 'select')
|
|
49
87
|
end
|
|
50
88
|
|
|
51
|
-
it
|
|
52
|
-
expect(@session).not_to have_field('First Name', :
|
|
53
|
-
expect(@session).not_to have_field('Html5 Email', :
|
|
54
|
-
expect(@session).not_to have_field('Html5 Multiple Email', :
|
|
55
|
-
expect(@session).not_to have_field('Description', :
|
|
56
|
-
expect(@session).not_to have_field('Description', :
|
|
57
|
-
expect(@session).not_to have_field('Languages', :
|
|
89
|
+
it 'should be false if the given field is not on the page' do
|
|
90
|
+
expect(@session).not_to have_field('First Name', type: 'textarea')
|
|
91
|
+
expect(@session).not_to have_field('Html5 Email', type: 'tel')
|
|
92
|
+
expect(@session).not_to have_field('Html5 Multiple Email', type: 'tel')
|
|
93
|
+
expect(@session).not_to have_field('Description', type: '')
|
|
94
|
+
expect(@session).not_to have_field('Description', type: 'email')
|
|
95
|
+
expect(@session).not_to have_field('Languages', type: 'textarea')
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it 'it can find type="hidden" elements if explicity specified' do
|
|
99
|
+
expect(@session).to have_field('form[data]', with: 'TWTW', type: 'hidden')
|
|
58
100
|
end
|
|
59
101
|
end
|
|
60
102
|
|
|
61
103
|
context 'with multiple' do
|
|
62
|
-
it
|
|
104
|
+
it 'should be true if a field with the multiple attribute is on the page' do
|
|
63
105
|
expect(@session).to have_field('Html5 Multiple Email', multiple: true)
|
|
64
106
|
end
|
|
65
107
|
|
|
66
|
-
it
|
|
108
|
+
it 'should be false if a field without the multiple attribute is not on the page' do
|
|
67
109
|
expect(@session).not_to have_field('Html5 Multiple Email', multiple: false)
|
|
68
110
|
end
|
|
69
111
|
end
|
|
112
|
+
|
|
113
|
+
context 'with valid', requires: [:js] do
|
|
114
|
+
it 'should be true if field is valid' do
|
|
115
|
+
@session.fill_in 'required', with: 'something'
|
|
116
|
+
@session.fill_in 'length', with: 'abcd'
|
|
117
|
+
|
|
118
|
+
expect(@session).to have_field('required', valid: true)
|
|
119
|
+
expect(@session).to have_field('length', valid: true)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it 'should be false if field is invalid' do
|
|
123
|
+
expect(@session).not_to have_field('required', valid: true)
|
|
124
|
+
expect(@session).to have_field('required', valid: false)
|
|
125
|
+
|
|
126
|
+
@session.fill_in 'length', with: 'abc'
|
|
127
|
+
expect(@session).not_to have_field('length', valid: true)
|
|
128
|
+
end
|
|
129
|
+
end
|
|
70
130
|
end
|
|
71
131
|
|
|
72
132
|
Capybara::SpecHelper.spec '#has_no_field' do
|
|
73
133
|
before { @session.visit('/form') }
|
|
74
134
|
|
|
75
|
-
it
|
|
135
|
+
it 'should be false if the field is on the page' do
|
|
76
136
|
expect(@session).not_to have_no_field('Dog')
|
|
77
137
|
expect(@session).not_to have_no_field('form_description')
|
|
78
138
|
expect(@session).not_to have_no_field('Region')
|
|
79
139
|
end
|
|
80
140
|
|
|
81
|
-
it
|
|
141
|
+
it 'should be true if the field is not on the page' do
|
|
82
142
|
expect(@session).to have_no_field('Monkey')
|
|
83
143
|
end
|
|
84
144
|
|
|
85
145
|
context 'with value' do
|
|
86
|
-
it
|
|
87
|
-
expect(@session).not_to have_no_field('First Name', :
|
|
88
|
-
expect(@session).not_to have_no_field('Phone', :
|
|
89
|
-
expect(@session).not_to have_no_field('Street', :
|
|
90
|
-
expect(@session).not_to have_no_field('Description', :
|
|
146
|
+
it 'should be false if a field with the given value is on the page' do
|
|
147
|
+
expect(@session).not_to have_no_field('First Name', with: 'John')
|
|
148
|
+
expect(@session).not_to have_no_field('Phone', with: '+1 555 7021')
|
|
149
|
+
expect(@session).not_to have_no_field('Street', with: 'Sesame street 66')
|
|
150
|
+
expect(@session).not_to have_no_field('Description', with: 'Descriptive text goes here')
|
|
91
151
|
end
|
|
92
152
|
|
|
93
|
-
it
|
|
94
|
-
expect(@session).to have_no_field('First Name', :
|
|
95
|
-
expect(@session).to have_no_field('Wrong Name', :
|
|
96
|
-
expect(@session).to have_no_field('Description', :
|
|
153
|
+
it 'should be true if the given field is not on the page' do
|
|
154
|
+
expect(@session).to have_no_field('First Name', with: 'Peter')
|
|
155
|
+
expect(@session).to have_no_field('Wrong Name', with: 'John')
|
|
156
|
+
expect(@session).to have_no_field('Description', with: 'Monkey')
|
|
97
157
|
end
|
|
98
158
|
|
|
99
|
-
it
|
|
100
|
-
@session.fill_in('First Name', :
|
|
101
|
-
expect(@session).not_to have_no_field('First Name', :
|
|
159
|
+
it 'should be false after the field has been filled in with the given value' do
|
|
160
|
+
@session.fill_in('First Name', with: 'Jonas')
|
|
161
|
+
expect(@session).not_to have_no_field('First Name', with: 'Jonas')
|
|
102
162
|
end
|
|
103
163
|
|
|
104
|
-
it
|
|
105
|
-
@session.fill_in('First Name', :
|
|
106
|
-
expect(@session).to have_no_field('First Name', :
|
|
164
|
+
it 'should be true after the field has been filled in with a different value' do
|
|
165
|
+
@session.fill_in('First Name', with: 'Jonas')
|
|
166
|
+
expect(@session).to have_no_field('First Name', with: 'John')
|
|
107
167
|
end
|
|
108
168
|
end
|
|
109
169
|
|
|
110
170
|
context 'with type' do
|
|
111
|
-
it
|
|
112
|
-
expect(@session).not_to have_no_field('First Name', :
|
|
113
|
-
expect(@session).not_to have_no_field('Html5 Email', :
|
|
114
|
-
expect(@session).not_to have_no_field('Html5 Tel', :
|
|
115
|
-
expect(@session).not_to have_no_field('Description', :
|
|
116
|
-
expect(@session).not_to have_no_field('Languages', :
|
|
171
|
+
it 'should be false if a field with the given type is on the page' do
|
|
172
|
+
expect(@session).not_to have_no_field('First Name', type: 'text')
|
|
173
|
+
expect(@session).not_to have_no_field('Html5 Email', type: 'email')
|
|
174
|
+
expect(@session).not_to have_no_field('Html5 Tel', type: 'tel')
|
|
175
|
+
expect(@session).not_to have_no_field('Description', type: 'textarea')
|
|
176
|
+
expect(@session).not_to have_no_field('Languages', type: 'select')
|
|
117
177
|
end
|
|
118
178
|
|
|
119
|
-
it
|
|
120
|
-
expect(@session).to have_no_field('First Name', :
|
|
121
|
-
expect(@session).to have_no_field('Html5 Email', :
|
|
122
|
-
expect(@session).to have_no_field('Description', :
|
|
123
|
-
expect(@session).to have_no_field('Description', :
|
|
124
|
-
expect(@session).to have_no_field('Languages', :
|
|
179
|
+
it 'should be true if the given field is not on the page' do
|
|
180
|
+
expect(@session).to have_no_field('First Name', type: 'textarea')
|
|
181
|
+
expect(@session).to have_no_field('Html5 Email', type: 'tel')
|
|
182
|
+
expect(@session).to have_no_field('Description', type: '')
|
|
183
|
+
expect(@session).to have_no_field('Description', type: 'email')
|
|
184
|
+
expect(@session).to have_no_field('Languages', type: 'textarea')
|
|
125
185
|
end
|
|
126
186
|
end
|
|
127
187
|
end
|
|
@@ -129,56 +189,56 @@ end
|
|
|
129
189
|
Capybara::SpecHelper.spec '#has_checked_field?' do
|
|
130
190
|
before { @session.visit('/form') }
|
|
131
191
|
|
|
132
|
-
it
|
|
192
|
+
it 'should be true if a checked field is on the page' do
|
|
133
193
|
expect(@session).to have_checked_field('gender_female')
|
|
134
194
|
expect(@session).to have_checked_field('Hamster')
|
|
135
195
|
end
|
|
136
196
|
|
|
137
|
-
it
|
|
138
|
-
expect(@session).to have_checked_field('Disabled Checkbox', :
|
|
197
|
+
it 'should be true for disabled checkboxes if disabled: true' do
|
|
198
|
+
expect(@session).to have_checked_field('Disabled Checkbox', disabled: true)
|
|
139
199
|
end
|
|
140
200
|
|
|
141
|
-
it
|
|
201
|
+
it 'should be false if an unchecked field is on the page' do
|
|
142
202
|
expect(@session).not_to have_checked_field('form_pets_cat')
|
|
143
203
|
expect(@session).not_to have_checked_field('Male')
|
|
144
204
|
end
|
|
145
205
|
|
|
146
|
-
it
|
|
206
|
+
it 'should be false if no field is on the page' do
|
|
147
207
|
expect(@session).not_to have_checked_field('Does Not Exist')
|
|
148
208
|
end
|
|
149
209
|
|
|
150
|
-
it
|
|
210
|
+
it 'should be false for disabled checkboxes by default' do
|
|
151
211
|
expect(@session).not_to have_checked_field('Disabled Checkbox')
|
|
152
212
|
end
|
|
153
213
|
|
|
154
|
-
it
|
|
155
|
-
expect(@session).not_to have_checked_field('Disabled Checkbox', :
|
|
214
|
+
it 'should be false for disabled checkboxes if disabled: false' do
|
|
215
|
+
expect(@session).not_to have_checked_field('Disabled Checkbox', disabled: false)
|
|
156
216
|
end
|
|
157
217
|
|
|
158
|
-
it
|
|
159
|
-
expect(@session).to have_checked_field('Disabled Checkbox', :
|
|
218
|
+
it 'should be true for disabled checkboxes if disabled: :all' do
|
|
219
|
+
expect(@session).to have_checked_field('Disabled Checkbox', disabled: :all)
|
|
160
220
|
end
|
|
161
221
|
|
|
162
|
-
it
|
|
163
|
-
expect(@session).to have_checked_field('gender_female', :
|
|
222
|
+
it 'should be true for enabled checkboxes if disabled: :all' do
|
|
223
|
+
expect(@session).to have_checked_field('gender_female', disabled: :all)
|
|
164
224
|
end
|
|
165
225
|
|
|
166
|
-
it
|
|
226
|
+
it 'should be true after an unchecked checkbox is checked' do
|
|
167
227
|
@session.check('form_pets_cat')
|
|
168
228
|
expect(@session).to have_checked_field('form_pets_cat')
|
|
169
229
|
end
|
|
170
230
|
|
|
171
|
-
it
|
|
231
|
+
it 'should be false after a checked checkbox is unchecked' do
|
|
172
232
|
@session.uncheck('form_pets_dog')
|
|
173
233
|
expect(@session).not_to have_checked_field('form_pets_dog')
|
|
174
234
|
end
|
|
175
235
|
|
|
176
|
-
it
|
|
236
|
+
it 'should be true after an unchecked radio button is chosen' do
|
|
177
237
|
@session.choose('gender_male')
|
|
178
238
|
expect(@session).to have_checked_field('gender_male')
|
|
179
239
|
end
|
|
180
240
|
|
|
181
|
-
it
|
|
241
|
+
it 'should be false after another radio button in the group is chosen' do
|
|
182
242
|
@session.choose('gender_male')
|
|
183
243
|
expect(@session).not_to have_checked_field('gender_female')
|
|
184
244
|
end
|
|
@@ -187,109 +247,119 @@ end
|
|
|
187
247
|
Capybara::SpecHelper.spec '#has_no_checked_field?' do
|
|
188
248
|
before { @session.visit('/form') }
|
|
189
249
|
|
|
190
|
-
it
|
|
250
|
+
it 'should be false if a checked field is on the page' do
|
|
191
251
|
expect(@session).not_to have_no_checked_field('gender_female')
|
|
192
252
|
expect(@session).not_to have_no_checked_field('Hamster')
|
|
193
253
|
end
|
|
194
254
|
|
|
195
|
-
it
|
|
196
|
-
expect(@session).not_to have_no_checked_field('Disabled Checkbox', :
|
|
255
|
+
it 'should be false for disabled checkboxes if disabled: true' do
|
|
256
|
+
expect(@session).not_to have_no_checked_field('Disabled Checkbox', disabled: true)
|
|
197
257
|
end
|
|
198
258
|
|
|
199
|
-
it
|
|
259
|
+
it 'should be true if an unchecked field is on the page' do
|
|
200
260
|
expect(@session).to have_no_checked_field('form_pets_cat')
|
|
201
261
|
expect(@session).to have_no_checked_field('Male')
|
|
202
262
|
end
|
|
203
263
|
|
|
204
|
-
it
|
|
264
|
+
it 'should be true if no field is on the page' do
|
|
205
265
|
expect(@session).to have_no_checked_field('Does Not Exist')
|
|
206
266
|
end
|
|
207
267
|
|
|
208
|
-
it
|
|
268
|
+
it 'should be true for disabled checkboxes by default' do
|
|
209
269
|
expect(@session).to have_no_checked_field('Disabled Checkbox')
|
|
210
270
|
end
|
|
211
271
|
|
|
212
|
-
it
|
|
213
|
-
expect(@session).to have_no_checked_field('Disabled Checkbox', :
|
|
272
|
+
it 'should be true for disabled checkboxes if disabled: false' do
|
|
273
|
+
expect(@session).to have_no_checked_field('Disabled Checkbox', disabled: false)
|
|
214
274
|
end
|
|
215
275
|
end
|
|
216
276
|
|
|
217
277
|
Capybara::SpecHelper.spec '#has_unchecked_field?' do
|
|
218
278
|
before { @session.visit('/form') }
|
|
219
279
|
|
|
220
|
-
it
|
|
280
|
+
it 'should be false if a checked field is on the page' do
|
|
221
281
|
expect(@session).not_to have_unchecked_field('gender_female')
|
|
222
282
|
expect(@session).not_to have_unchecked_field('Hamster')
|
|
223
283
|
end
|
|
224
284
|
|
|
225
|
-
it
|
|
285
|
+
it 'should be true if an unchecked field is on the page' do
|
|
226
286
|
expect(@session).to have_unchecked_field('form_pets_cat')
|
|
227
287
|
expect(@session).to have_unchecked_field('Male')
|
|
228
288
|
end
|
|
229
289
|
|
|
230
|
-
it
|
|
231
|
-
expect(@session).to have_unchecked_field('Disabled Unchecked Checkbox', :
|
|
290
|
+
it 'should be true for disabled unchecked fields if disabled: true' do
|
|
291
|
+
expect(@session).to have_unchecked_field('Disabled Unchecked Checkbox', disabled: true)
|
|
232
292
|
end
|
|
233
293
|
|
|
234
|
-
it
|
|
294
|
+
it 'should be false if no field is on the page' do
|
|
235
295
|
expect(@session).not_to have_unchecked_field('Does Not Exist')
|
|
236
296
|
end
|
|
237
297
|
|
|
238
|
-
it
|
|
298
|
+
it 'should be false for disabled unchecked fields by default' do
|
|
239
299
|
expect(@session).not_to have_unchecked_field('Disabled Unchecked Checkbox')
|
|
240
300
|
end
|
|
241
301
|
|
|
242
|
-
it
|
|
243
|
-
expect(@session).not_to have_unchecked_field('Disabled Unchecked Checkbox', :
|
|
302
|
+
it 'should be false for disabled unchecked fields if disabled: false' do
|
|
303
|
+
expect(@session).not_to have_unchecked_field('Disabled Unchecked Checkbox', disabled: false)
|
|
244
304
|
end
|
|
245
305
|
|
|
246
|
-
it
|
|
306
|
+
it 'should be false after an unchecked checkbox is checked' do
|
|
247
307
|
@session.check('form_pets_cat')
|
|
248
308
|
expect(@session).not_to have_unchecked_field('form_pets_cat')
|
|
249
309
|
end
|
|
250
310
|
|
|
251
|
-
it
|
|
311
|
+
it 'should be true after a checked checkbox is unchecked' do
|
|
252
312
|
@session.uncheck('form_pets_dog')
|
|
253
313
|
expect(@session).to have_unchecked_field('form_pets_dog')
|
|
254
314
|
end
|
|
255
315
|
|
|
256
|
-
it
|
|
316
|
+
it 'should be false after an unchecked radio button is chosen' do
|
|
257
317
|
@session.choose('gender_male')
|
|
258
318
|
expect(@session).not_to have_unchecked_field('gender_male')
|
|
259
319
|
end
|
|
260
320
|
|
|
261
|
-
it
|
|
321
|
+
it 'should be true after another radio button in the group is chosen' do
|
|
262
322
|
@session.choose('gender_male')
|
|
263
323
|
expect(@session).to have_unchecked_field('gender_female')
|
|
264
324
|
end
|
|
325
|
+
|
|
326
|
+
it 'should support locator-less usage' do
|
|
327
|
+
expect(@session.has_unchecked_field?(disabled: true, id: 'form_disabled_unchecked_checkbox')).to be true
|
|
328
|
+
expect(@session).to have_unchecked_field(disabled: true, id: 'form_disabled_unchecked_checkbox')
|
|
329
|
+
end
|
|
265
330
|
end
|
|
266
331
|
|
|
267
332
|
Capybara::SpecHelper.spec '#has_no_unchecked_field?' do
|
|
268
333
|
before { @session.visit('/form') }
|
|
269
334
|
|
|
270
|
-
it
|
|
335
|
+
it 'should be true if a checked field is on the page' do
|
|
271
336
|
expect(@session).to have_no_unchecked_field('gender_female')
|
|
272
337
|
expect(@session).to have_no_unchecked_field('Hamster')
|
|
273
338
|
end
|
|
274
339
|
|
|
275
|
-
it
|
|
340
|
+
it 'should be false if an unchecked field is on the page' do
|
|
276
341
|
expect(@session).not_to have_no_unchecked_field('form_pets_cat')
|
|
277
342
|
expect(@session).not_to have_no_unchecked_field('Male')
|
|
278
343
|
end
|
|
279
344
|
|
|
280
|
-
it
|
|
281
|
-
expect(@session).not_to have_no_unchecked_field('Disabled Unchecked Checkbox', :
|
|
345
|
+
it 'should be false for disabled unchecked fields if disabled: true' do
|
|
346
|
+
expect(@session).not_to have_no_unchecked_field('Disabled Unchecked Checkbox', disabled: true)
|
|
282
347
|
end
|
|
283
348
|
|
|
284
|
-
it
|
|
349
|
+
it 'should be true if no field is on the page' do
|
|
285
350
|
expect(@session).to have_no_unchecked_field('Does Not Exist')
|
|
286
351
|
end
|
|
287
352
|
|
|
288
|
-
it
|
|
353
|
+
it 'should be true for disabled unchecked fields by default' do
|
|
289
354
|
expect(@session).to have_no_unchecked_field('Disabled Unchecked Checkbox')
|
|
290
355
|
end
|
|
291
356
|
|
|
292
|
-
it
|
|
293
|
-
expect(@session).to have_no_unchecked_field('Disabled Unchecked Checkbox', :
|
|
357
|
+
it 'should be true for disabled unchecked fields if disabled: false' do
|
|
358
|
+
expect(@session).to have_no_unchecked_field('Disabled Unchecked Checkbox', disabled: false)
|
|
359
|
+
end
|
|
360
|
+
|
|
361
|
+
it 'should support locator-less usage' do
|
|
362
|
+
expect(@session.has_no_unchecked_field?(disabled: false, id: 'form_disabled_unchecked_checkbox')).to eq true
|
|
363
|
+
expect(@session).to have_no_unchecked_field(disabled: false, id: 'form_disabled_unchecked_checkbox')
|
|
294
364
|
end
|
|
295
365
|
end
|