capybara 2.18.0 → 3.40.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/.yardopts +1 -1
- data/History.md +945 -12
- data/License.txt +1 -1
- data/README.md +264 -90
- data/lib/capybara/config.rb +29 -57
- data/lib/capybara/cucumber.rb +2 -3
- data/lib/capybara/driver/base.rb +35 -18
- data/lib/capybara/driver/node.rb +40 -10
- data/lib/capybara/dsl.rb +10 -7
- data/lib/capybara/helpers.rb +70 -31
- data/lib/capybara/minitest/spec.rb +185 -83
- data/lib/capybara/minitest.rb +232 -112
- data/lib/capybara/node/actions.rb +274 -171
- data/lib/capybara/node/base.rb +42 -34
- data/lib/capybara/node/document.rb +15 -3
- data/lib/capybara/node/document_matchers.rb +19 -21
- data/lib/capybara/node/element.rb +362 -135
- data/lib/capybara/node/finders.rb +151 -137
- data/lib/capybara/node/matchers.rb +394 -209
- data/lib/capybara/node/simple.rb +59 -26
- data/lib/capybara/node/whitespace_normalizer.rb +81 -0
- data/lib/capybara/queries/active_element_query.rb +18 -0
- data/lib/capybara/queries/ancestor_query.rb +12 -9
- data/lib/capybara/queries/base_query.rb +39 -28
- data/lib/capybara/queries/current_path_query.rb +21 -27
- data/lib/capybara/queries/match_query.rb +14 -7
- data/lib/capybara/queries/selector_query.rb +659 -149
- data/lib/capybara/queries/sibling_query.rb +11 -9
- data/lib/capybara/queries/style_query.rb +45 -0
- data/lib/capybara/queries/text_query.rb +56 -38
- data/lib/capybara/queries/title_query.rb +8 -11
- data/lib/capybara/rack_test/browser.rb +114 -42
- data/lib/capybara/rack_test/css_handlers.rb +6 -4
- data/lib/capybara/rack_test/driver.rb +22 -17
- data/lib/capybara/rack_test/errors.rb +6 -0
- data/lib/capybara/rack_test/form.rb +93 -58
- data/lib/capybara/rack_test/node.rb +184 -81
- data/lib/capybara/rails.rb +3 -7
- data/lib/capybara/registration_container.rb +41 -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 +66 -0
- data/lib/capybara/result.rb +97 -63
- data/lib/capybara/rspec/features.rb +17 -50
- data/lib/capybara/rspec/matcher_proxies.rb +52 -15
- data/lib/capybara/rspec/matchers/base.rb +113 -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 +69 -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 +146 -310
- data/lib/capybara/rspec.rb +7 -11
- 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 +85 -13
- data/lib/capybara/selector/definition/button.rb +68 -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 +55 -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 +280 -0
- data/lib/capybara/selector/filter.rb +2 -17
- data/lib/capybara/selector/filter_set.rb +80 -33
- data/lib/capybara/selector/filters/base.rb +50 -6
- data/lib/capybara/selector/filters/expression_filter.rb +8 -26
- data/lib/capybara/selector/filters/locator_filter.rb +29 -0
- data/lib/capybara/selector/filters/node_filter.rb +16 -12
- data/lib/capybara/selector/regexp_disassembler.rb +211 -0
- data/lib/capybara/selector/selector.rb +93 -210
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/lib/capybara/selector.rb +475 -523
- 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 +298 -267
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
- data/lib/capybara/selenium/driver_specializations/edge_driver.rb +128 -0
- data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +84 -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 +229 -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/node.rb +517 -145
- data/lib/capybara/selenium/nodes/chrome_node.rb +125 -0
- data/lib/capybara/selenium/nodes/edge_node.rb +110 -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/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 +80 -0
- data/lib/capybara/server/checker.rb +44 -0
- data/lib/capybara/server/middleware.rb +71 -0
- data/lib/capybara/server.rb +59 -67
- data/lib/capybara/session/config.rb +81 -67
- data/lib/capybara/session/matchers.rb +28 -20
- data/lib/capybara/session.rb +337 -365
- 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 +151 -12
- data/lib/capybara/spec/session/accept_alert_spec.rb +12 -11
- data/lib/capybara/spec/session/accept_confirm_spec.rb +6 -5
- data/lib/capybara/spec/session/accept_prompt_spec.rb +10 -10
- data/lib/capybara/spec/session/active_element_spec.rb +31 -0
- data/lib/capybara/spec/session/all_spec.rb +161 -57
- data/lib/capybara/spec/session/ancestor_spec.rb +27 -24
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +68 -38
- 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.rb → assert_title_spec.rb} +22 -12
- data/lib/capybara/spec/session/attach_file_spec.rb +144 -69
- data/lib/capybara/spec/session/body_spec.rb +12 -13
- data/lib/capybara/spec/session/check_spec.rb +117 -55
- data/lib/capybara/spec/session/choose_spec.rb +64 -31
- data/lib/capybara/spec/session/click_button_spec.rb +231 -173
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +55 -35
- data/lib/capybara/spec/session/click_link_spec.rb +93 -58
- data/lib/capybara/spec/session/current_scope_spec.rb +12 -11
- data/lib/capybara/spec/session/current_url_spec.rb +57 -39
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +4 -4
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +3 -2
- data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb} +11 -9
- data/lib/capybara/spec/session/element/match_css_spec.rb +18 -10
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +9 -7
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +71 -57
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +8 -7
- data/lib/capybara/spec/session/evaluate_script_spec.rb +29 -8
- data/lib/capybara/spec/session/execute_script_spec.rb +10 -8
- data/lib/capybara/spec/session/fill_in_spec.rb +134 -43
- data/lib/capybara/spec/session/find_button_spec.rb +25 -24
- data/lib/capybara/spec/session/find_by_id_spec.rb +10 -9
- data/lib/capybara/spec/session/find_field_spec.rb +37 -41
- data/lib/capybara/spec/session/find_link_spec.rb +46 -17
- data/lib/capybara/spec/session/find_spec.rb +260 -145
- data/lib/capybara/spec/session/first_spec.rb +80 -52
- 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 +33 -20
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +52 -32
- 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 +31 -31
- data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
- data/lib/capybara/spec/session/has_any_selectors_spec.rb +29 -0
- data/lib/capybara/spec/session/has_button_spec.rb +100 -13
- data/lib/capybara/spec/session/has_css_spec.rb +272 -137
- data/lib/capybara/spec/session/has_current_path_spec.rb +60 -61
- data/lib/capybara/spec/session/has_element_spec.rb +47 -0
- data/lib/capybara/spec/session/has_field_spec.rb +139 -59
- data/lib/capybara/spec/session/has_link_spec.rb +47 -6
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +42 -40
- data/lib/capybara/spec/session/has_select_spec.rb +107 -72
- data/lib/capybara/spec/session/has_selector_spec.rb +120 -71
- data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
- data/lib/capybara/spec/session/has_table_spec.rb +183 -5
- data/lib/capybara/spec/session/has_text_spec.rb +106 -62
- data/lib/capybara/spec/session/has_title_spec.rb +20 -14
- data/lib/capybara/spec/session/has_xpath_spec.rb +57 -38
- 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 +37 -0
- data/lib/capybara/spec/session/node_spec.rb +1024 -153
- data/lib/capybara/spec/session/node_wrapper_spec.rb +39 -0
- data/lib/capybara/spec/session/refresh_spec.rb +12 -6
- data/lib/capybara/spec/session/reset_session_spec.rb +82 -35
- 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 +8 -12
- 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 +119 -0
- data/lib/capybara/spec/session/select_spec.rb +107 -81
- data/lib/capybara/spec/session/selectors_spec.rb +52 -19
- data/lib/capybara/spec/session/sibling_spec.rb +10 -10
- data/lib/capybara/spec/session/text_spec.rb +37 -21
- data/lib/capybara/spec/session/title_spec.rb +17 -5
- data/lib/capybara/spec/session/uncheck_spec.rb +43 -23
- data/lib/capybara/spec/session/unselect_spec.rb +39 -38
- data/lib/capybara/spec/session/visit_spec.rb +85 -53
- data/lib/capybara/spec/session/window/become_closed_spec.rb +24 -20
- 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 +27 -22
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +12 -6
- data/lib/capybara/spec/session/window/window_spec.rb +97 -63
- data/lib/capybara/spec/session/window/windows_spec.rb +12 -10
- data/lib/capybara/spec/session/window/within_window_spec.rb +31 -86
- data/lib/capybara/spec/session/within_spec.rb +83 -44
- data/lib/capybara/spec/spec_helper.rb +54 -44
- data/lib/capybara/spec/test_app.rb +158 -43
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/form.erb +163 -42
- data/lib/capybara/spec/views/frame_child.erb +4 -3
- data/lib/capybara/spec/views/frame_one.erb +2 -1
- data/lib/capybara/spec/views/frame_parent.erb +1 -1
- data/lib/capybara/spec/views/frame_two.erb +1 -1
- data/lib/capybara/spec/views/initial_alert.erb +2 -1
- data/lib/capybara/spec/views/layout.erb +10 -0
- data/lib/capybara/spec/views/obscured.erb +47 -0
- data/lib/capybara/spec/views/offset.erb +33 -0
- data/lib/capybara/spec/views/path.erb +2 -2
- 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/react.erb +45 -0
- data/lib/capybara/spec/views/scroll.erb +21 -0
- data/lib/capybara/spec/views/spatial.erb +31 -0
- data/lib/capybara/spec/views/tables.erb +68 -1
- data/lib/capybara/spec/views/with_animation.erb +81 -0
- data/lib/capybara/spec/views/with_base_tag.erb +2 -2
- data/lib/capybara/spec/views/with_dragula.erb +24 -0
- data/lib/capybara/spec/views/with_fixed_header_footer.erb +2 -1
- data/lib/capybara/spec/views/with_hover.erb +3 -2
- data/lib/capybara/spec/views/with_hover1.erb +10 -0
- data/lib/capybara/spec/views/with_html.erb +69 -12
- data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
- data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
- data/lib/capybara/spec/views/with_js.erb +30 -5
- data/lib/capybara/spec/views/with_jstree.erb +26 -0
- data/lib/capybara/spec/views/with_namespace.erb +21 -0
- data/lib/capybara/spec/views/with_scope.erb +2 -2
- data/lib/capybara/spec/views/with_scope_other.erb +6 -0
- data/lib/capybara/spec/views/with_shadow.erb +31 -0
- data/lib/capybara/spec/views/with_slow_unload.erb +2 -1
- data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
- data/lib/capybara/spec/views/with_unload_alert.erb +1 -0
- data/lib/capybara/spec/views/with_windows.erb +1 -1
- data/lib/capybara/spec/views/within_frames.erb +5 -2
- data/lib/capybara/version.rb +2 -1
- data/lib/capybara/window.rb +36 -34
- data/lib/capybara.rb +134 -107
- data/spec/basic_node_spec.rb +60 -34
- data/spec/capybara_spec.rb +63 -88
- data/spec/counter_spec.rb +35 -0
- data/spec/css_builder_spec.rb +101 -0
- data/spec/css_splitter_spec.rb +38 -0
- data/spec/dsl_spec.rb +85 -64
- data/spec/filter_set_spec.rb +27 -9
- data/spec/fixtures/certificate.pem +25 -0
- data/spec/fixtures/key.pem +27 -0
- data/spec/fixtures/selenium_driver_rspec_failure.rb +6 -5
- data/spec/fixtures/selenium_driver_rspec_success.rb +6 -5
- data/spec/minitest_spec.rb +52 -7
- data/spec/minitest_spec_spec.rb +94 -63
- data/spec/per_session_config_spec.rb +14 -13
- data/spec/rack_test_spec.rb +194 -125
- data/spec/regexp_dissassembler_spec.rb +250 -0
- data/spec/result_spec.rb +111 -50
- data/spec/rspec/features_spec.rb +37 -31
- data/spec/rspec/scenarios_spec.rb +10 -8
- data/spec/rspec/shared_spec_matchers.rb +473 -422
- data/spec/rspec/views_spec.rb +5 -3
- data/spec/rspec_matchers_spec.rb +52 -11
- data/spec/rspec_spec.rb +109 -89
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +397 -68
- data/spec/selenium_spec_chrome.rb +187 -40
- data/spec/selenium_spec_chrome_remote.rb +96 -0
- data/spec/selenium_spec_edge.rb +60 -0
- data/spec/selenium_spec_firefox.rb +201 -41
- data/spec/selenium_spec_firefox_remote.rb +94 -0
- data/spec/selenium_spec_ie.rb +149 -0
- data/spec/selenium_spec_safari.rb +162 -0
- data/spec/server_spec.rb +213 -102
- data/spec/session_spec.rb +53 -16
- data/spec/shared_selenium_node.rb +79 -0
- data/spec/shared_selenium_session.rb +473 -122
- data/spec/spec_helper.rb +126 -7
- data/spec/whitespace_normalizer_spec.rb +54 -0
- data/spec/xpath_builder_spec.rb +93 -0
- metadata +355 -73
- data/.yard/templates_custom/default/class/html/selectors.erb +0 -38
- data/.yard/templates_custom/default/class/html/setup.rb +0 -17
- data/.yard/yard_extensions.rb +0 -78
- data/lib/capybara/query.rb +0 -7
- data/lib/capybara/rspec/compound.rb +0 -95
- data/lib/capybara/spec/session/assert_current_path.rb +0 -72
- data/lib/capybara/spec/session/assert_selector.rb +0 -148
- data/lib/capybara/spec/session/assert_text.rb +0 -234
- data/lib/capybara/spec/session/source_spec.rb +0 -0
- data/lib/capybara/spec/views/with_title.erb +0 -5
- data/spec/selenium_spec_marionette.rb +0 -127
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
Capybara::SpecHelper.spec '#has_select?' 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_select('Locale')
|
|
7
8
|
expect(@session).to have_select('form_region')
|
|
8
9
|
expect(@session).to have_select('Languages')
|
|
9
|
-
expect(@session).to have_select(:
|
|
10
|
+
expect(@session).to have_select(:Languages)
|
|
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_select('Monkey')
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
context 'with selected value' do
|
|
17
|
-
it
|
|
18
|
+
it 'should be true if a field with the given value is on the page' do
|
|
18
19
|
expect(@session).to have_select('form_locale', selected: 'English')
|
|
19
20
|
expect(@session).to have_select('Region', selected: 'Norway')
|
|
20
21
|
expect(@session).to have_select('Underwear', selected: [
|
|
@@ -22,7 +23,7 @@ Capybara::SpecHelper.spec '#has_select?' do
|
|
|
22
23
|
])
|
|
23
24
|
end
|
|
24
25
|
|
|
25
|
-
it
|
|
26
|
+
it 'should be false if the given field is not on the page' do
|
|
26
27
|
expect(@session).not_to have_select('Locale', selected: 'Swedish')
|
|
27
28
|
expect(@session).not_to have_select('Does not exist', selected: 'John')
|
|
28
29
|
expect(@session).not_to have_select('City', selected: 'Not there')
|
|
@@ -33,28 +34,28 @@ Capybara::SpecHelper.spec '#has_select?' do
|
|
|
33
34
|
'Boxerbriefs', 'Briefs', 'Boxers', 'Commando', "Frenchman's Pantalons", 'Long Johns'
|
|
34
35
|
])
|
|
35
36
|
expect(@session).not_to have_select('Underwear', selected: [
|
|
36
|
-
'Boxerbriefs', 'Briefs','Commando', "Frenchman's Pantalons"
|
|
37
|
+
'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons"
|
|
37
38
|
])
|
|
38
39
|
end
|
|
39
40
|
|
|
40
|
-
it
|
|
41
|
+
it 'should be true after the given value is selected' do
|
|
41
42
|
@session.select('Swedish', from: 'Locale')
|
|
42
43
|
expect(@session).to have_select('Locale', selected: 'Swedish')
|
|
43
44
|
end
|
|
44
45
|
|
|
45
|
-
it
|
|
46
|
+
it 'should be false after a different value is selected' do
|
|
46
47
|
@session.select('Swedish', from: 'Locale')
|
|
47
48
|
expect(@session).not_to have_select('Locale', selected: 'English')
|
|
48
49
|
end
|
|
49
50
|
|
|
50
|
-
it
|
|
51
|
+
it 'should be true after the given values are selected' do
|
|
51
52
|
@session.select('Boxers', from: 'Underwear')
|
|
52
53
|
expect(@session).to have_select('Underwear', selected: [
|
|
53
54
|
'Boxerbriefs', 'Briefs', 'Boxers', 'Commando', "Frenchman's Pantalons", 'Long Johns'
|
|
54
55
|
])
|
|
55
56
|
end
|
|
56
57
|
|
|
57
|
-
it
|
|
58
|
+
it 'should be false after one of the values is unselected' do
|
|
58
59
|
@session.unselect('Briefs', from: 'Underwear')
|
|
59
60
|
expect(@session).not_to have_select('Underwear', selected: [
|
|
60
61
|
'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons", 'Long Johns'
|
|
@@ -62,98 +63,132 @@ Capybara::SpecHelper.spec '#has_select?' do
|
|
|
62
63
|
end
|
|
63
64
|
|
|
64
65
|
it "should be true even when the selected option invisible, regardless of the select's visibility" do
|
|
65
|
-
expect(@session).to have_select('Icecream', visible:
|
|
66
|
+
expect(@session).to have_select('Icecream', visible: :hidden, selected: 'Chocolate')
|
|
66
67
|
expect(@session).to have_select('Sorbet', selected: 'Vanilla')
|
|
67
68
|
end
|
|
68
69
|
end
|
|
69
70
|
|
|
70
71
|
context 'with partial select' do
|
|
71
|
-
it
|
|
72
|
-
expect(@session).to have_select('Underwear', with_selected: [
|
|
72
|
+
it 'should be true if a field with the given partial values is on the page' do
|
|
73
|
+
expect(@session).to have_select('Underwear', with_selected: %w[Boxerbriefs Briefs])
|
|
73
74
|
end
|
|
74
75
|
|
|
75
|
-
it
|
|
76
|
-
expect(@session).not_to have_select('Underwear', with_selected: [
|
|
76
|
+
it 'should be false if a field with the given partial values is not on the page' do
|
|
77
|
+
expect(@session).not_to have_select('Underwear', with_selected: %w[Boxerbriefs Boxers])
|
|
77
78
|
end
|
|
78
79
|
|
|
79
|
-
it
|
|
80
|
+
it 'should be true after the given partial value is selected' do
|
|
80
81
|
@session.select('Boxers', from: 'Underwear')
|
|
81
|
-
expect(@session).to have_select('Underwear', with_selected: [
|
|
82
|
+
expect(@session).to have_select('Underwear', with_selected: %w[Boxerbriefs Boxers])
|
|
82
83
|
end
|
|
83
84
|
|
|
84
|
-
it
|
|
85
|
+
it 'should be false after one of the given partial values is unselected' do
|
|
85
86
|
@session.unselect('Briefs', from: 'Underwear')
|
|
86
|
-
expect(@session).not_to have_select('Underwear', with_selected: [
|
|
87
|
+
expect(@session).not_to have_select('Underwear', with_selected: %w[Boxerbriefs Briefs])
|
|
87
88
|
end
|
|
88
89
|
|
|
89
90
|
it "should be true even when the selected values are invisible, regardless of the select's visibility" do
|
|
90
|
-
expect(@session).to have_select('Dessert', visible:
|
|
91
|
+
expect(@session).to have_select('Dessert', visible: :hidden, with_options: %w[Pudding Tiramisu])
|
|
91
92
|
expect(@session).to have_select('Cake', with_selected: ['Chocolate Cake', 'Sponge Cake'])
|
|
92
93
|
end
|
|
93
94
|
|
|
94
|
-
it
|
|
95
|
+
it 'should support non array partial values' do
|
|
95
96
|
expect(@session).to have_select('Underwear', with_selected: 'Briefs')
|
|
96
97
|
expect(@session).not_to have_select('Underwear', with_selected: 'Boxers')
|
|
97
98
|
end
|
|
98
99
|
end
|
|
99
100
|
|
|
100
101
|
context 'with exact options' do
|
|
101
|
-
it
|
|
102
|
-
expect(@session).to have_select('Region', options: [
|
|
102
|
+
it 'should be true if a field with the given options is on the page' do
|
|
103
|
+
expect(@session).to have_select('Region', options: %w[Norway Sweden Finland])
|
|
103
104
|
expect(@session).to have_select('Tendency', options: [])
|
|
104
105
|
end
|
|
105
106
|
|
|
106
|
-
it
|
|
107
|
+
it 'should be false if the given field is not on the page' do
|
|
107
108
|
expect(@session).not_to have_select('Locale', options: ['Swedish'])
|
|
108
109
|
expect(@session).not_to have_select('Does not exist', options: ['John'])
|
|
109
110
|
expect(@session).not_to have_select('City', options: ['London', 'Made up city'])
|
|
110
|
-
expect(@session).not_to have_select('Region', options: [
|
|
111
|
-
expect(@session).not_to have_select('Region', options: [
|
|
111
|
+
expect(@session).not_to have_select('Region', options: %w[Norway Sweden])
|
|
112
|
+
expect(@session).not_to have_select('Region', options: %w[Norway Norway Norway])
|
|
112
113
|
end
|
|
113
114
|
|
|
114
|
-
it
|
|
115
|
-
expect(@session).to have_select(
|
|
115
|
+
it 'should be true even when the options are invisible, if the select itself is invisible' do
|
|
116
|
+
expect(@session).to have_select('Icecream', visible: :hidden, options: %w[Chocolate Vanilla Strawberry])
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
context 'with enabled options' do
|
|
121
|
+
it 'should be true if the listed options exist and are enabled' do
|
|
122
|
+
expect(@session).to have_select('form_title', enabled_options: %w[Mr Mrs Miss])
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it 'should be false if the listed options do not exist' do
|
|
126
|
+
expect(@session).not_to have_select('form_title', enabled_options: ['Not there'])
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
it 'should be false if the listed option exists but is not enabled' do
|
|
130
|
+
expect(@session).not_to have_select('form_title', enabled_options: %w[Mr Mrs Miss Other])
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
context 'with disabled options' do
|
|
135
|
+
it 'should be true if the listed options exist and are disabled' do
|
|
136
|
+
expect(@session).to have_select('form_title', disabled_options: ['Other'])
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
it 'should be false if the listed options do not exist' do
|
|
140
|
+
expect(@session).not_to have_select('form_title', disabled_options: ['Not there'])
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
it 'should be false if the listed option exists but is not disabled' do
|
|
144
|
+
expect(@session).not_to have_select('form_title', disabled_options: %w[Other Mrs])
|
|
116
145
|
end
|
|
117
146
|
end
|
|
118
147
|
|
|
119
148
|
context 'with partial options' do
|
|
120
|
-
it
|
|
121
|
-
expect(@session).to have_select('Region', with_options: [
|
|
149
|
+
it 'should be true if a field with the given partial options is on the page' do
|
|
150
|
+
expect(@session).to have_select('Region', with_options: %w[Norway Sweden])
|
|
122
151
|
expect(@session).to have_select('City', with_options: ['London'])
|
|
123
152
|
end
|
|
124
153
|
|
|
125
|
-
it
|
|
154
|
+
it 'should be false if a field with the given partial options is not on the page' do
|
|
126
155
|
expect(@session).not_to have_select('Locale', with_options: ['Uruguayan'])
|
|
127
156
|
expect(@session).not_to have_select('Does not exist', with_options: ['John'])
|
|
128
|
-
expect(@session).not_to have_select('Region', with_options: [
|
|
157
|
+
expect(@session).not_to have_select('Region', with_options: %w[Norway Sweden Finland Latvia])
|
|
129
158
|
end
|
|
130
159
|
|
|
131
|
-
it
|
|
132
|
-
expect(@session).to have_select(
|
|
160
|
+
it 'should be true even when the options are invisible, if the select itself is invisible' do
|
|
161
|
+
expect(@session).to have_select('Icecream', visible: :hidden, with_options: %w[Vanilla Strawberry])
|
|
133
162
|
end
|
|
134
163
|
end
|
|
135
164
|
|
|
136
165
|
context 'with multiple option' do
|
|
137
|
-
it
|
|
166
|
+
it 'should find multiple selects if true' do
|
|
138
167
|
expect(@session).to have_select('form_languages', multiple: true)
|
|
139
168
|
expect(@session).not_to have_select('form_other_title', multiple: true)
|
|
140
169
|
end
|
|
141
170
|
|
|
142
|
-
it
|
|
171
|
+
it 'should not find multiple selects if false' do
|
|
143
172
|
expect(@session).not_to have_select('form_languages', multiple: false)
|
|
144
173
|
expect(@session).to have_select('form_other_title', multiple: false)
|
|
145
174
|
end
|
|
146
175
|
|
|
147
|
-
it
|
|
176
|
+
it 'should find both if not specified' do
|
|
148
177
|
expect(@session).to have_select('form_languages')
|
|
149
178
|
expect(@session).to have_select('form_other_title')
|
|
150
179
|
end
|
|
151
180
|
end
|
|
152
181
|
|
|
153
|
-
it
|
|
154
|
-
expect
|
|
182
|
+
it 'should raise an error if an invalid option is passed' do
|
|
183
|
+
expect do
|
|
184
|
+
expect(@session).to have_select('form_languages', invalid: true)
|
|
185
|
+
end.to raise_error(ArgumentError, 'Invalid option(s) :invalid, should be one of :above, :below, :left_of, :right_of, :near, :count, :minimum, :maximum, :between, :text, :id, :class, :style, :visible, :obscured, :exact, :exact_text, :normalize_ws, :match, :wait, :filter_set, :focused, :disabled, :name, :placeholder, :options, :enabled_options, :disabled_options, :selected, :with_selected, :multiple, :with_options')
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
it 'should support locator-less usage' do
|
|
189
|
+
expect(@session.has_select?(with_options: %w[Norway Sweden])).to be true
|
|
155
190
|
expect(@session).to have_select(with_options: ['London'])
|
|
156
|
-
expect(@session.has_select?(with_selected: [
|
|
191
|
+
expect(@session.has_select?(with_selected: %w[Commando Boxerbriefs])).to be true
|
|
157
192
|
expect(@session).to have_select(with_selected: ['Briefs'])
|
|
158
193
|
end
|
|
159
194
|
end
|
|
@@ -161,18 +196,18 @@ end
|
|
|
161
196
|
Capybara::SpecHelper.spec '#has_no_select?' do
|
|
162
197
|
before { @session.visit('/form') }
|
|
163
198
|
|
|
164
|
-
it
|
|
199
|
+
it 'should be false if the field is on the page' do
|
|
165
200
|
expect(@session).not_to have_no_select('Locale')
|
|
166
201
|
expect(@session).not_to have_no_select('form_region')
|
|
167
202
|
expect(@session).not_to have_no_select('Languages')
|
|
168
203
|
end
|
|
169
204
|
|
|
170
|
-
it
|
|
205
|
+
it 'should be true if the field is not on the page' do
|
|
171
206
|
expect(@session).to have_no_select('Monkey')
|
|
172
207
|
end
|
|
173
208
|
|
|
174
209
|
context 'with selected value' do
|
|
175
|
-
it
|
|
210
|
+
it 'should be false if a field with the given value is on the page' do
|
|
176
211
|
expect(@session).not_to have_no_select('form_locale', selected: 'English')
|
|
177
212
|
expect(@session).not_to have_no_select('Region', selected: 'Norway')
|
|
178
213
|
expect(@session).not_to have_no_select('Underwear', selected: [
|
|
@@ -180,7 +215,7 @@ Capybara::SpecHelper.spec '#has_no_select?' do
|
|
|
180
215
|
])
|
|
181
216
|
end
|
|
182
217
|
|
|
183
|
-
it
|
|
218
|
+
it 'should be true if the given field is not on the page' do
|
|
184
219
|
expect(@session).to have_no_select('Locale', selected: 'Swedish')
|
|
185
220
|
expect(@session).to have_no_select('Does not exist', selected: 'John')
|
|
186
221
|
expect(@session).to have_no_select('City', selected: 'Not there')
|
|
@@ -191,28 +226,28 @@ Capybara::SpecHelper.spec '#has_no_select?' do
|
|
|
191
226
|
'Boxerbriefs', 'Briefs', 'Boxers', 'Commando', "Frenchman's Pantalons", 'Long Johns'
|
|
192
227
|
])
|
|
193
228
|
expect(@session).to have_no_select('Underwear', selected: [
|
|
194
|
-
'Boxerbriefs', 'Briefs','Commando', "Frenchman's Pantalons"
|
|
229
|
+
'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons"
|
|
195
230
|
])
|
|
196
231
|
end
|
|
197
232
|
|
|
198
|
-
it
|
|
233
|
+
it 'should be false after the given value is selected' do
|
|
199
234
|
@session.select('Swedish', from: 'Locale')
|
|
200
235
|
expect(@session).not_to have_no_select('Locale', selected: 'Swedish')
|
|
201
236
|
end
|
|
202
237
|
|
|
203
|
-
it
|
|
238
|
+
it 'should be true after a different value is selected' do
|
|
204
239
|
@session.select('Swedish', from: 'Locale')
|
|
205
240
|
expect(@session).to have_no_select('Locale', selected: 'English')
|
|
206
241
|
end
|
|
207
242
|
|
|
208
|
-
it
|
|
243
|
+
it 'should be false after the given values are selected' do
|
|
209
244
|
@session.select('Boxers', from: 'Underwear')
|
|
210
245
|
expect(@session).not_to have_no_select('Underwear', selected: [
|
|
211
246
|
'Boxerbriefs', 'Briefs', 'Boxers', 'Commando', "Frenchman's Pantalons", 'Long Johns'
|
|
212
247
|
])
|
|
213
248
|
end
|
|
214
249
|
|
|
215
|
-
it
|
|
250
|
+
it 'should be true after one of the values is unselected' do
|
|
216
251
|
@session.unselect('Briefs', from: 'Underwear')
|
|
217
252
|
expect(@session).to have_no_select('Underwear', selected: [
|
|
218
253
|
'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons", 'Long Johns'
|
|
@@ -221,61 +256,61 @@ Capybara::SpecHelper.spec '#has_no_select?' do
|
|
|
221
256
|
end
|
|
222
257
|
|
|
223
258
|
context 'with partial select' do
|
|
224
|
-
it
|
|
225
|
-
expect(@session).not_to have_no_select('Underwear', with_selected: [
|
|
259
|
+
it 'should be false if a field with the given partial values is on the page' do
|
|
260
|
+
expect(@session).not_to have_no_select('Underwear', with_selected: %w[Boxerbriefs Briefs])
|
|
226
261
|
end
|
|
227
262
|
|
|
228
|
-
it
|
|
229
|
-
expect(@session).to have_no_select('Underwear', with_selected: [
|
|
263
|
+
it 'should be true if a field with the given partial values is not on the page' do
|
|
264
|
+
expect(@session).to have_no_select('Underwear', with_selected: %w[Boxerbriefs Boxers])
|
|
230
265
|
end
|
|
231
266
|
|
|
232
|
-
it
|
|
267
|
+
it 'should be false after the given partial value is selected' do
|
|
233
268
|
@session.select('Boxers', from: 'Underwear')
|
|
234
|
-
expect(@session).not_to have_no_select('Underwear', with_selected: [
|
|
269
|
+
expect(@session).not_to have_no_select('Underwear', with_selected: %w[Boxerbriefs Boxers])
|
|
235
270
|
end
|
|
236
271
|
|
|
237
|
-
it
|
|
272
|
+
it 'should be true after one of the given partial values is unselected' do
|
|
238
273
|
@session.unselect('Briefs', from: 'Underwear')
|
|
239
|
-
expect(@session).to have_no_select('Underwear', with_selected: [
|
|
274
|
+
expect(@session).to have_no_select('Underwear', with_selected: %w[Boxerbriefs Briefs])
|
|
240
275
|
end
|
|
241
276
|
|
|
242
|
-
it
|
|
277
|
+
it 'should support non array partial values' do
|
|
243
278
|
expect(@session).not_to have_no_select('Underwear', with_selected: 'Briefs')
|
|
244
279
|
expect(@session).to have_no_select('Underwear', with_selected: 'Boxers')
|
|
245
280
|
end
|
|
246
281
|
end
|
|
247
282
|
|
|
248
283
|
context 'with exact options' do
|
|
249
|
-
it
|
|
250
|
-
expect(@session).not_to have_no_select('Region', options: [
|
|
284
|
+
it 'should be false if a field with the given options is on the page' do
|
|
285
|
+
expect(@session).not_to have_no_select('Region', options: %w[Norway Sweden Finland])
|
|
251
286
|
end
|
|
252
287
|
|
|
253
|
-
it
|
|
288
|
+
it 'should be true if the given field is not on the page' do
|
|
254
289
|
expect(@session).to have_no_select('Locale', options: ['Swedish'])
|
|
255
290
|
expect(@session).to have_no_select('Does not exist', options: ['John'])
|
|
256
291
|
expect(@session).to have_no_select('City', options: ['London', 'Made up city'])
|
|
257
|
-
expect(@session).to have_no_select('Region', options: [
|
|
258
|
-
expect(@session).to have_no_select('Region', options: [
|
|
292
|
+
expect(@session).to have_no_select('Region', options: %w[Norway Sweden])
|
|
293
|
+
expect(@session).to have_no_select('Region', options: %w[Norway Norway Norway])
|
|
259
294
|
end
|
|
260
295
|
end
|
|
261
296
|
|
|
262
297
|
context 'with partial options' do
|
|
263
|
-
it
|
|
264
|
-
expect(@session).not_to have_no_select('Region', with_options: [
|
|
298
|
+
it 'should be false if a field with the given partial options is on the page' do
|
|
299
|
+
expect(@session).not_to have_no_select('Region', with_options: %w[Norway Sweden])
|
|
265
300
|
expect(@session).not_to have_no_select('City', with_options: ['London'])
|
|
266
301
|
end
|
|
267
302
|
|
|
268
|
-
it
|
|
303
|
+
it 'should be true if a field with the given partial options is not on the page' do
|
|
269
304
|
expect(@session).to have_no_select('Locale', with_options: ['Uruguayan'])
|
|
270
305
|
expect(@session).to have_no_select('Does not exist', with_options: ['John'])
|
|
271
|
-
expect(@session).to have_no_select('Region', with_options: [
|
|
306
|
+
expect(@session).to have_no_select('Region', with_options: %w[Norway Sweden Finland Latvia])
|
|
272
307
|
end
|
|
273
308
|
end
|
|
274
309
|
|
|
275
|
-
it
|
|
276
|
-
expect(@session.has_no_select?(with_options: [
|
|
277
|
-
expect(@session).to have_no_select(with_options: ['New London']
|
|
278
|
-
expect(@session.has_no_select?(with_selected: ['Boxers'])).to
|
|
279
|
-
expect(@session).to have_no_select(
|
|
310
|
+
it 'should support locator-less usage' do
|
|
311
|
+
expect(@session.has_no_select?(with_options: %w[Norway Sweden Finland Latvia])).to be true
|
|
312
|
+
expect(@session).to have_no_select(with_options: ['New London'])
|
|
313
|
+
expect(@session.has_no_select?(id: 'form_underwear', with_selected: ['Boxers'])).to be true
|
|
314
|
+
expect(@session).to have_no_select(id: 'form_underwear', with_selected: %w[Commando Boxers])
|
|
280
315
|
end
|
|
281
316
|
end
|