capybara 3.0.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 +891 -12
- data/License.txt +1 -1
- data/README.md +257 -84
- data/lib/capybara/config.rb +29 -10
- data/lib/capybara/cucumber.rb +1 -1
- data/lib/capybara/driver/base.rb +22 -4
- data/lib/capybara/driver/node.rb +38 -9
- data/lib/capybara/dsl.rb +9 -7
- data/lib/capybara/helpers.rb +57 -8
- data/lib/capybara/minitest/spec.rb +185 -84
- data/lib/capybara/minitest.rb +264 -145
- data/lib/capybara/node/actions.rb +248 -124
- data/lib/capybara/node/base.rb +35 -20
- data/lib/capybara/node/document.rb +14 -2
- data/lib/capybara/node/document_matchers.rb +13 -15
- data/lib/capybara/node/element.rb +350 -113
- data/lib/capybara/node/finders.rb +104 -82
- data/lib/capybara/node/matchers.rb +363 -157
- data/lib/capybara/node/simple.rb +54 -15
- 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 +9 -10
- data/lib/capybara/queries/base_query.rb +25 -18
- data/lib/capybara/queries/current_path_query.rb +16 -6
- data/lib/capybara/queries/match_query.rb +11 -0
- data/lib/capybara/queries/selector_query.rb +617 -104
- data/lib/capybara/queries/sibling_query.rb +9 -7
- data/lib/capybara/queries/style_query.rb +45 -0
- data/lib/capybara/queries/text_query.rb +40 -22
- data/lib/capybara/queries/title_query.rb +2 -2
- data/lib/capybara/rack_test/browser.rb +106 -31
- data/lib/capybara/rack_test/driver.rb +16 -7
- data/lib/capybara/rack_test/errors.rb +6 -0
- data/lib/capybara/rack_test/form.rb +74 -49
- data/lib/capybara/rack_test/node.rb +120 -47
- data/lib/capybara/rails.rb +1 -1
- 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 +87 -53
- data/lib/capybara/rspec/features.rb +8 -10
- data/lib/capybara/rspec/matcher_proxies.rb +39 -18
- 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 +142 -315
- data/lib/capybara/rspec.rb +3 -2
- 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 -8
- 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 +1 -0
- data/lib/capybara/selector/filter_set.rb +72 -28
- data/lib/capybara/selector/filters/base.rb +45 -2
- data/lib/capybara/selector/filters/expression_filter.rb +5 -6
- data/lib/capybara/selector/filters/locator_filter.rb +29 -0
- data/lib/capybara/selector/filters/node_filter.rb +18 -4
- data/lib/capybara/selector/regexp_disassembler.rb +211 -0
- data/lib/capybara/selector/selector.rb +89 -200
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/lib/capybara/selector.rb +474 -534
- 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 +270 -245
- 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 +460 -170
- 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 +58 -67
- data/lib/capybara/session/config.rb +40 -6
- data/lib/capybara/session/matchers.rb +26 -19
- data/lib/capybara/session.rb +252 -194
- 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 +126 -8
- data/lib/capybara/spec/session/accept_alert_spec.rb +11 -11
- data/lib/capybara/spec/session/accept_confirm_spec.rb +3 -3
- data/lib/capybara/spec/session/accept_prompt_spec.rb +9 -10
- data/lib/capybara/spec/session/active_element_spec.rb +31 -0
- data/lib/capybara/spec/session/all_spec.rb +135 -44
- data/lib/capybara/spec/session/ancestor_spec.rb +24 -19
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +67 -38
- data/lib/capybara/spec/session/{assert_current_path.rb → assert_current_path_spec.rb} +20 -18
- 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.rb → assert_text_spec.rb} +76 -52
- data/lib/capybara/spec/session/{assert_title.rb → assert_title_spec.rb} +12 -12
- data/lib/capybara/spec/session/attach_file_spec.rb +126 -72
- data/lib/capybara/spec/session/body_spec.rb +11 -13
- data/lib/capybara/spec/session/check_spec.rb +112 -51
- data/lib/capybara/spec/session/choose_spec.rb +62 -30
- data/lib/capybara/spec/session/click_button_spec.rb +227 -161
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +49 -30
- data/lib/capybara/spec/session/click_link_spec.rb +89 -55
- data/lib/capybara/spec/session/current_scope_spec.rb +8 -8
- data/lib/capybara/spec/session/current_url_spec.rb +44 -37
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +3 -3
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +2 -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 +8 -6
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +70 -56
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +7 -7
- data/lib/capybara/spec/session/evaluate_script_spec.rb +28 -8
- data/lib/capybara/spec/session/execute_script_spec.rb +8 -7
- data/lib/capybara/spec/session/fill_in_spec.rb +110 -44
- data/lib/capybara/spec/session/find_button_spec.rb +23 -23
- data/lib/capybara/spec/session/find_by_id_spec.rb +8 -8
- data/lib/capybara/spec/session/find_field_spec.rb +33 -31
- data/lib/capybara/spec/session/find_link_spec.rb +42 -14
- data/lib/capybara/spec/session/find_spec.rb +251 -142
- data/lib/capybara/spec/session/first_spec.rb +45 -44
- data/lib/capybara/spec/session/frame/frame_title_spec.rb +6 -6
- data/lib/capybara/spec/session/frame/frame_url_spec.rb +6 -6
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +32 -20
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +46 -19
- data/lib/capybara/spec/session/go_back_spec.rb +1 -1
- data/lib/capybara/spec/session/go_forward_spec.rb +1 -1
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +23 -23
- 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 +98 -12
- data/lib/capybara/spec/session/has_css_spec.rb +271 -137
- data/lib/capybara/spec/session/has_current_path_spec.rb +50 -35
- data/lib/capybara/spec/session/has_element_spec.rb +47 -0
- data/lib/capybara/spec/session/has_field_spec.rb +137 -58
- data/lib/capybara/spec/session/has_link_spec.rb +46 -6
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +33 -31
- data/lib/capybara/spec/session/has_select_spec.rb +84 -50
- data/lib/capybara/spec/session/has_selector_spec.rb +117 -69
- data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
- data/lib/capybara/spec/session/has_table_spec.rb +181 -4
- data/lib/capybara/spec/session/has_text_spec.rb +101 -53
- data/lib/capybara/spec/session/has_title_spec.rb +19 -14
- data/lib/capybara/spec/session/has_xpath_spec.rb +56 -38
- data/lib/capybara/spec/session/{headers.rb → headers_spec.rb} +1 -1
- data/lib/capybara/spec/session/html_spec.rb +13 -6
- data/lib/capybara/spec/session/matches_style_spec.rb +37 -0
- data/lib/capybara/spec/session/node_spec.rb +958 -122
- data/lib/capybara/spec/session/node_wrapper_spec.rb +15 -12
- data/lib/capybara/spec/session/refresh_spec.rb +9 -7
- data/lib/capybara/spec/session/reset_session_spec.rb +65 -37
- data/lib/capybara/spec/session/{response_code.rb → response_code_spec.rb} +1 -1
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +2 -2
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +5 -4
- data/lib/capybara/spec/session/save_page_spec.rb +41 -38
- data/lib/capybara/spec/session/save_screenshot_spec.rb +13 -11
- 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 +102 -76
- data/lib/capybara/spec/session/selectors_spec.rb +51 -18
- data/lib/capybara/spec/session/sibling_spec.rb +9 -9
- data/lib/capybara/spec/session/text_spec.rb +26 -24
- data/lib/capybara/spec/session/title_spec.rb +8 -6
- data/lib/capybara/spec/session/uncheck_spec.rb +41 -22
- data/lib/capybara/spec/session/unselect_spec.rb +37 -37
- data/lib/capybara/spec/session/visit_spec.rb +79 -53
- data/lib/capybara/spec/session/window/become_closed_spec.rb +22 -19
- data/lib/capybara/spec/session/window/current_window_spec.rb +4 -3
- data/lib/capybara/spec/session/window/open_new_window_spec.rb +4 -3
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +25 -21
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +10 -5
- data/lib/capybara/spec/session/window/window_spec.rb +88 -54
- data/lib/capybara/spec/session/window/windows_spec.rb +11 -8
- data/lib/capybara/spec/session/window/within_window_spec.rb +17 -16
- data/lib/capybara/spec/session/within_spec.rb +82 -44
- data/lib/capybara/spec/spec_helper.rb +46 -52
- data/lib/capybara/spec/test_app.rb +148 -41
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/form.erb +156 -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 +46 -11
- 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 +1 -1
- data/lib/capybara/version.rb +1 -1
- data/lib/capybara/window.rb +32 -26
- data/lib/capybara.rb +128 -104
- data/spec/basic_node_spec.rb +59 -34
- data/spec/capybara_spec.rb +65 -51
- 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 +84 -55
- data/spec/filter_set_spec.rb +24 -7
- data/spec/fixtures/certificate.pem +25 -0
- data/spec/fixtures/key.pem +27 -0
- data/spec/fixtures/selenium_driver_rspec_failure.rb +5 -5
- data/spec/fixtures/selenium_driver_rspec_success.rb +5 -5
- data/spec/minitest_spec.rb +49 -5
- data/spec/minitest_spec_spec.rb +92 -62
- data/spec/per_session_config_spec.rb +6 -6
- data/spec/rack_test_spec.rb +183 -115
- data/spec/regexp_dissassembler_spec.rb +250 -0
- data/spec/result_spec.rb +99 -39
- data/spec/rspec/features_spec.rb +28 -25
- data/spec/rspec/scenarios_spec.rb +10 -6
- data/spec/rspec/shared_spec_matchers.rb +418 -364
- data/spec/rspec/views_spec.rb +4 -3
- data/spec/rspec_matchers_spec.rb +35 -10
- data/spec/rspec_spec.rb +109 -85
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +392 -62
- data/spec/selenium_spec_chrome.rb +183 -41
- data/spec/selenium_spec_chrome_remote.rb +96 -0
- data/spec/selenium_spec_edge.rb +41 -8
- data/spec/selenium_spec_firefox.rb +228 -0
- data/spec/selenium_spec_firefox_remote.rb +94 -0
- data/spec/selenium_spec_ie.rb +129 -11
- data/spec/selenium_spec_safari.rb +162 -0
- data/spec/server_spec.rb +192 -81
- data/spec/session_spec.rb +52 -16
- data/spec/shared_selenium_node.rb +79 -0
- data/spec/shared_selenium_session.rb +460 -123
- data/spec/spec_helper.rb +124 -2
- data/spec/whitespace_normalizer_spec.rb +54 -0
- data/spec/xpath_builder_spec.rb +93 -0
- metadata +344 -45
- 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/rspec/compound.rb +0 -90
- data/lib/capybara/spec/session/assert_selector.rb +0 -149
- 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 -143
@@ -3,19 +3,19 @@
|
|
3
3
|
Capybara::SpecHelper.spec '#has_select?' do
|
4
4
|
before { @session.visit('/form') }
|
5
5
|
|
6
|
-
it
|
6
|
+
it 'should be true if the field is on the page' do
|
7
7
|
expect(@session).to have_select('Locale')
|
8
8
|
expect(@session).to have_select('form_region')
|
9
9
|
expect(@session).to have_select('Languages')
|
10
10
|
expect(@session).to have_select(:Languages)
|
11
11
|
end
|
12
12
|
|
13
|
-
it
|
13
|
+
it 'should be false if the field is not on the page' do
|
14
14
|
expect(@session).not_to have_select('Monkey')
|
15
15
|
end
|
16
16
|
|
17
17
|
context 'with selected value' do
|
18
|
-
it
|
18
|
+
it 'should be true if a field with the given value is on the page' do
|
19
19
|
expect(@session).to have_select('form_locale', selected: 'English')
|
20
20
|
expect(@session).to have_select('Region', selected: 'Norway')
|
21
21
|
expect(@session).to have_select('Underwear', selected: [
|
@@ -23,7 +23,7 @@ Capybara::SpecHelper.spec '#has_select?' do
|
|
23
23
|
])
|
24
24
|
end
|
25
25
|
|
26
|
-
it
|
26
|
+
it 'should be false if the given field is not on the page' do
|
27
27
|
expect(@session).not_to have_select('Locale', selected: 'Swedish')
|
28
28
|
expect(@session).not_to have_select('Does not exist', selected: 'John')
|
29
29
|
expect(@session).not_to have_select('City', selected: 'Not there')
|
@@ -38,24 +38,24 @@ Capybara::SpecHelper.spec '#has_select?' do
|
|
38
38
|
])
|
39
39
|
end
|
40
40
|
|
41
|
-
it
|
41
|
+
it 'should be true after the given value is selected' do
|
42
42
|
@session.select('Swedish', from: 'Locale')
|
43
43
|
expect(@session).to have_select('Locale', selected: 'Swedish')
|
44
44
|
end
|
45
45
|
|
46
|
-
it
|
46
|
+
it 'should be false after a different value is selected' do
|
47
47
|
@session.select('Swedish', from: 'Locale')
|
48
48
|
expect(@session).not_to have_select('Locale', selected: 'English')
|
49
49
|
end
|
50
50
|
|
51
|
-
it
|
51
|
+
it 'should be true after the given values are selected' do
|
52
52
|
@session.select('Boxers', from: 'Underwear')
|
53
53
|
expect(@session).to have_select('Underwear', selected: [
|
54
54
|
'Boxerbriefs', 'Briefs', 'Boxers', 'Commando', "Frenchman's Pantalons", 'Long Johns'
|
55
55
|
])
|
56
56
|
end
|
57
57
|
|
58
|
-
it
|
58
|
+
it 'should be false after one of the values is unselected' do
|
59
59
|
@session.unselect('Briefs', from: 'Underwear')
|
60
60
|
expect(@session).not_to have_select('Underwear', selected: [
|
61
61
|
'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons", 'Long Johns'
|
@@ -63,48 +63,48 @@ Capybara::SpecHelper.spec '#has_select?' do
|
|
63
63
|
end
|
64
64
|
|
65
65
|
it "should be true even when the selected option invisible, regardless of the select's visibility" do
|
66
|
-
expect(@session).to have_select('Icecream', visible:
|
66
|
+
expect(@session).to have_select('Icecream', visible: :hidden, selected: 'Chocolate')
|
67
67
|
expect(@session).to have_select('Sorbet', selected: 'Vanilla')
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
71
|
context 'with partial select' do
|
72
|
-
it
|
72
|
+
it 'should be true if a field with the given partial values is on the page' do
|
73
73
|
expect(@session).to have_select('Underwear', with_selected: %w[Boxerbriefs Briefs])
|
74
74
|
end
|
75
75
|
|
76
|
-
it
|
76
|
+
it 'should be false if a field with the given partial values is not on the page' do
|
77
77
|
expect(@session).not_to have_select('Underwear', with_selected: %w[Boxerbriefs Boxers])
|
78
78
|
end
|
79
79
|
|
80
|
-
it
|
80
|
+
it 'should be true after the given partial value is selected' do
|
81
81
|
@session.select('Boxers', from: 'Underwear')
|
82
82
|
expect(@session).to have_select('Underwear', with_selected: %w[Boxerbriefs Boxers])
|
83
83
|
end
|
84
84
|
|
85
|
-
it
|
85
|
+
it 'should be false after one of the given partial values is unselected' do
|
86
86
|
@session.unselect('Briefs', from: 'Underwear')
|
87
87
|
expect(@session).not_to have_select('Underwear', with_selected: %w[Boxerbriefs Briefs])
|
88
88
|
end
|
89
89
|
|
90
90
|
it "should be true even when the selected values are invisible, regardless of the select's visibility" do
|
91
|
-
expect(@session).to have_select('Dessert', visible:
|
91
|
+
expect(@session).to have_select('Dessert', visible: :hidden, with_options: %w[Pudding Tiramisu])
|
92
92
|
expect(@session).to have_select('Cake', with_selected: ['Chocolate Cake', 'Sponge Cake'])
|
93
93
|
end
|
94
94
|
|
95
|
-
it
|
95
|
+
it 'should support non array partial values' do
|
96
96
|
expect(@session).to have_select('Underwear', with_selected: 'Briefs')
|
97
97
|
expect(@session).not_to have_select('Underwear', with_selected: 'Boxers')
|
98
98
|
end
|
99
99
|
end
|
100
100
|
|
101
101
|
context 'with exact options' do
|
102
|
-
it
|
102
|
+
it 'should be true if a field with the given options is on the page' do
|
103
103
|
expect(@session).to have_select('Region', options: %w[Norway Sweden Finland])
|
104
104
|
expect(@session).to have_select('Tendency', options: [])
|
105
105
|
end
|
106
106
|
|
107
|
-
it
|
107
|
+
it 'should be false if the given field is not on the page' do
|
108
108
|
expect(@session).not_to have_select('Locale', options: ['Swedish'])
|
109
109
|
expect(@session).not_to have_select('Does not exist', options: ['John'])
|
110
110
|
expect(@session).not_to have_select('City', options: ['London', 'Made up city'])
|
@@ -112,49 +112,83 @@ Capybara::SpecHelper.spec '#has_select?' do
|
|
112
112
|
expect(@session).not_to have_select('Region', options: %w[Norway Norway Norway])
|
113
113
|
end
|
114
114
|
|
115
|
-
it
|
116
|
-
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])
|
117
145
|
end
|
118
146
|
end
|
119
147
|
|
120
148
|
context 'with partial options' do
|
121
|
-
it
|
149
|
+
it 'should be true if a field with the given partial options is on the page' do
|
122
150
|
expect(@session).to have_select('Region', with_options: %w[Norway Sweden])
|
123
151
|
expect(@session).to have_select('City', with_options: ['London'])
|
124
152
|
end
|
125
153
|
|
126
|
-
it
|
154
|
+
it 'should be false if a field with the given partial options is not on the page' do
|
127
155
|
expect(@session).not_to have_select('Locale', with_options: ['Uruguayan'])
|
128
156
|
expect(@session).not_to have_select('Does not exist', with_options: ['John'])
|
129
157
|
expect(@session).not_to have_select('Region', with_options: %w[Norway Sweden Finland Latvia])
|
130
158
|
end
|
131
159
|
|
132
|
-
it
|
133
|
-
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])
|
134
162
|
end
|
135
163
|
end
|
136
164
|
|
137
165
|
context 'with multiple option' do
|
138
|
-
it
|
166
|
+
it 'should find multiple selects if true' do
|
139
167
|
expect(@session).to have_select('form_languages', multiple: true)
|
140
168
|
expect(@session).not_to have_select('form_other_title', multiple: true)
|
141
169
|
end
|
142
170
|
|
143
|
-
it
|
171
|
+
it 'should not find multiple selects if false' do
|
144
172
|
expect(@session).not_to have_select('form_languages', multiple: false)
|
145
173
|
expect(@session).to have_select('form_other_title', multiple: false)
|
146
174
|
end
|
147
175
|
|
148
|
-
it
|
176
|
+
it 'should find both if not specified' do
|
149
177
|
expect(@session).to have_select('form_languages')
|
150
178
|
expect(@session).to have_select('form_other_title')
|
151
179
|
end
|
152
180
|
end
|
153
181
|
|
154
|
-
it
|
155
|
-
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
|
156
190
|
expect(@session).to have_select(with_options: ['London'])
|
157
|
-
expect(@session.has_select?(with_selected: %w[Commando Boxerbriefs])).to
|
191
|
+
expect(@session.has_select?(with_selected: %w[Commando Boxerbriefs])).to be true
|
158
192
|
expect(@session).to have_select(with_selected: ['Briefs'])
|
159
193
|
end
|
160
194
|
end
|
@@ -162,18 +196,18 @@ end
|
|
162
196
|
Capybara::SpecHelper.spec '#has_no_select?' do
|
163
197
|
before { @session.visit('/form') }
|
164
198
|
|
165
|
-
it
|
199
|
+
it 'should be false if the field is on the page' do
|
166
200
|
expect(@session).not_to have_no_select('Locale')
|
167
201
|
expect(@session).not_to have_no_select('form_region')
|
168
202
|
expect(@session).not_to have_no_select('Languages')
|
169
203
|
end
|
170
204
|
|
171
|
-
it
|
205
|
+
it 'should be true if the field is not on the page' do
|
172
206
|
expect(@session).to have_no_select('Monkey')
|
173
207
|
end
|
174
208
|
|
175
209
|
context 'with selected value' do
|
176
|
-
it
|
210
|
+
it 'should be false if a field with the given value is on the page' do
|
177
211
|
expect(@session).not_to have_no_select('form_locale', selected: 'English')
|
178
212
|
expect(@session).not_to have_no_select('Region', selected: 'Norway')
|
179
213
|
expect(@session).not_to have_no_select('Underwear', selected: [
|
@@ -181,7 +215,7 @@ Capybara::SpecHelper.spec '#has_no_select?' do
|
|
181
215
|
])
|
182
216
|
end
|
183
217
|
|
184
|
-
it
|
218
|
+
it 'should be true if the given field is not on the page' do
|
185
219
|
expect(@session).to have_no_select('Locale', selected: 'Swedish')
|
186
220
|
expect(@session).to have_no_select('Does not exist', selected: 'John')
|
187
221
|
expect(@session).to have_no_select('City', selected: 'Not there')
|
@@ -196,24 +230,24 @@ Capybara::SpecHelper.spec '#has_no_select?' do
|
|
196
230
|
])
|
197
231
|
end
|
198
232
|
|
199
|
-
it
|
233
|
+
it 'should be false after the given value is selected' do
|
200
234
|
@session.select('Swedish', from: 'Locale')
|
201
235
|
expect(@session).not_to have_no_select('Locale', selected: 'Swedish')
|
202
236
|
end
|
203
237
|
|
204
|
-
it
|
238
|
+
it 'should be true after a different value is selected' do
|
205
239
|
@session.select('Swedish', from: 'Locale')
|
206
240
|
expect(@session).to have_no_select('Locale', selected: 'English')
|
207
241
|
end
|
208
242
|
|
209
|
-
it
|
243
|
+
it 'should be false after the given values are selected' do
|
210
244
|
@session.select('Boxers', from: 'Underwear')
|
211
245
|
expect(@session).not_to have_no_select('Underwear', selected: [
|
212
246
|
'Boxerbriefs', 'Briefs', 'Boxers', 'Commando', "Frenchman's Pantalons", 'Long Johns'
|
213
247
|
])
|
214
248
|
end
|
215
249
|
|
216
|
-
it
|
250
|
+
it 'should be true after one of the values is unselected' do
|
217
251
|
@session.unselect('Briefs', from: 'Underwear')
|
218
252
|
expect(@session).to have_no_select('Underwear', selected: [
|
219
253
|
'Boxerbriefs', 'Briefs', 'Commando', "Frenchman's Pantalons", 'Long Johns'
|
@@ -222,36 +256,36 @@ Capybara::SpecHelper.spec '#has_no_select?' do
|
|
222
256
|
end
|
223
257
|
|
224
258
|
context 'with partial select' do
|
225
|
-
it
|
259
|
+
it 'should be false if a field with the given partial values is on the page' do
|
226
260
|
expect(@session).not_to have_no_select('Underwear', with_selected: %w[Boxerbriefs Briefs])
|
227
261
|
end
|
228
262
|
|
229
|
-
it
|
263
|
+
it 'should be true if a field with the given partial values is not on the page' do
|
230
264
|
expect(@session).to have_no_select('Underwear', with_selected: %w[Boxerbriefs Boxers])
|
231
265
|
end
|
232
266
|
|
233
|
-
it
|
267
|
+
it 'should be false after the given partial value is selected' do
|
234
268
|
@session.select('Boxers', from: 'Underwear')
|
235
269
|
expect(@session).not_to have_no_select('Underwear', with_selected: %w[Boxerbriefs Boxers])
|
236
270
|
end
|
237
271
|
|
238
|
-
it
|
272
|
+
it 'should be true after one of the given partial values is unselected' do
|
239
273
|
@session.unselect('Briefs', from: 'Underwear')
|
240
274
|
expect(@session).to have_no_select('Underwear', with_selected: %w[Boxerbriefs Briefs])
|
241
275
|
end
|
242
276
|
|
243
|
-
it
|
277
|
+
it 'should support non array partial values' do
|
244
278
|
expect(@session).not_to have_no_select('Underwear', with_selected: 'Briefs')
|
245
279
|
expect(@session).to have_no_select('Underwear', with_selected: 'Boxers')
|
246
280
|
end
|
247
281
|
end
|
248
282
|
|
249
283
|
context 'with exact options' do
|
250
|
-
it
|
284
|
+
it 'should be false if a field with the given options is on the page' do
|
251
285
|
expect(@session).not_to have_no_select('Region', options: %w[Norway Sweden Finland])
|
252
286
|
end
|
253
287
|
|
254
|
-
it
|
288
|
+
it 'should be true if the given field is not on the page' do
|
255
289
|
expect(@session).to have_no_select('Locale', options: ['Swedish'])
|
256
290
|
expect(@session).to have_no_select('Does not exist', options: ['John'])
|
257
291
|
expect(@session).to have_no_select('City', options: ['London', 'Made up city'])
|
@@ -261,22 +295,22 @@ Capybara::SpecHelper.spec '#has_no_select?' do
|
|
261
295
|
end
|
262
296
|
|
263
297
|
context 'with partial options' do
|
264
|
-
it
|
298
|
+
it 'should be false if a field with the given partial options is on the page' do
|
265
299
|
expect(@session).not_to have_no_select('Region', with_options: %w[Norway Sweden])
|
266
300
|
expect(@session).not_to have_no_select('City', with_options: ['London'])
|
267
301
|
end
|
268
302
|
|
269
|
-
it
|
303
|
+
it 'should be true if a field with the given partial options is not on the page' do
|
270
304
|
expect(@session).to have_no_select('Locale', with_options: ['Uruguayan'])
|
271
305
|
expect(@session).to have_no_select('Does not exist', with_options: ['John'])
|
272
306
|
expect(@session).to have_no_select('Region', with_options: %w[Norway Sweden Finland Latvia])
|
273
307
|
end
|
274
308
|
end
|
275
309
|
|
276
|
-
it
|
277
|
-
expect(@session.has_no_select?(with_options: %w[Norway Sweden Finland Latvia])).to
|
310
|
+
it 'should support locator-less usage' do
|
311
|
+
expect(@session.has_no_select?(with_options: %w[Norway Sweden Finland Latvia])).to be true
|
278
312
|
expect(@session).to have_no_select(with_options: ['New London'])
|
279
|
-
expect(@session.has_no_select?(with_selected: ['Boxers'])).to
|
280
|
-
expect(@session).to have_no_select(with_selected: %w[Commando Boxers])
|
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])
|
281
315
|
end
|
282
316
|
end
|
@@ -5,101 +5,143 @@ Capybara::SpecHelper.spec '#has_selector?' do
|
|
5
5
|
@session.visit('/with_html')
|
6
6
|
end
|
7
7
|
|
8
|
-
it
|
9
|
-
expect(@session).to have_selector(:xpath,
|
10
|
-
expect(@session).to have_selector(:css,
|
8
|
+
it 'should be true if the given selector is on the page' do
|
9
|
+
expect(@session).to have_selector(:xpath, '//p')
|
10
|
+
expect(@session).to have_selector(:css, 'p a#foo')
|
11
11
|
expect(@session).to have_selector("//p[contains(.,'est')]")
|
12
12
|
end
|
13
13
|
|
14
|
-
it
|
15
|
-
expect(@session).not_to have_selector(:xpath,
|
16
|
-
expect(@session).not_to have_selector(:css,
|
14
|
+
it 'should be false if the given selector is not on the page' do
|
15
|
+
expect(@session).not_to have_selector(:xpath, '//abbr')
|
16
|
+
expect(@session).not_to have_selector(:css, 'p a#doesnotexist')
|
17
17
|
expect(@session).not_to have_selector("//p[contains(.,'thisstringisnotonpage')]")
|
18
18
|
end
|
19
19
|
|
20
|
-
it
|
20
|
+
it 'should use default selector' do
|
21
21
|
Capybara.default_selector = :css
|
22
|
-
expect(@session).not_to have_selector(
|
23
|
-
expect(@session).to have_selector(
|
22
|
+
expect(@session).not_to have_selector('p a#doesnotexist')
|
23
|
+
expect(@session).to have_selector('p a#foo')
|
24
24
|
end
|
25
25
|
|
26
|
-
it
|
26
|
+
it 'should respect scopes' do
|
27
27
|
@session.within "//p[@id='first']" do
|
28
28
|
expect(@session).to have_selector(".//a[@id='foo']")
|
29
29
|
expect(@session).not_to have_selector(".//a[@id='red']")
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
it
|
34
|
-
expect(@session).to have_selector(:css,
|
33
|
+
it 'should accept a filter block' do
|
34
|
+
expect(@session).to have_selector(:css, 'a', count: 1) { |el| el[:id] == 'foo' }
|
35
35
|
end
|
36
36
|
|
37
|
-
context
|
38
|
-
it
|
39
|
-
expect(@session).to have_selector(
|
37
|
+
context 'with count' do
|
38
|
+
it 'should be true if the content is on the page the given number of times' do
|
39
|
+
expect(@session).to have_selector('//p', count: 3)
|
40
40
|
expect(@session).to have_selector("//p//a[@id='foo']", count: 1)
|
41
41
|
expect(@session).to have_selector("//p[contains(.,'est')]", count: 1)
|
42
42
|
end
|
43
43
|
|
44
|
-
it
|
45
|
-
expect(@session).not_to have_selector(
|
44
|
+
it 'should be false if the content is on the page the given number of times' do
|
45
|
+
expect(@session).not_to have_selector('//p', count: 6)
|
46
46
|
expect(@session).not_to have_selector("//p//a[@id='foo']", count: 2)
|
47
47
|
expect(@session).not_to have_selector("//p[contains(.,'est')]", count: 5)
|
48
48
|
end
|
49
49
|
|
50
50
|
it "should be false if the content isn't on the page at all" do
|
51
|
-
expect(@session).not_to have_selector(
|
51
|
+
expect(@session).not_to have_selector('//abbr', count: 2)
|
52
52
|
expect(@session).not_to have_selector("//p//a[@id='doesnotexist']", count: 1)
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
context
|
57
|
-
it
|
58
|
-
expect(@session).to have_selector(
|
59
|
-
expect(@session).
|
56
|
+
context 'with text' do
|
57
|
+
it 'should discard all matches where the given string is not contained' do
|
58
|
+
expect(@session).to have_selector('//p//a', text: 'Redirect', count: 1)
|
59
|
+
expect(@session).to have_selector(:css, 'p a', text: 'Redirect', count: 1)
|
60
|
+
expect(@session).not_to have_selector('//p', text: 'Doesnotexist')
|
60
61
|
end
|
61
62
|
|
62
|
-
it
|
63
|
-
expect(@session).to have_selector(:id,
|
64
|
-
expect(@session).not_to have_selector(:id,
|
63
|
+
it 'should respect visibility setting' do
|
64
|
+
expect(@session).to have_selector(:id, 'hidden-text', text: 'Some of this text is hidden!', visible: :all)
|
65
|
+
expect(@session).not_to have_selector(:id, 'hidden-text', text: 'Some of this text is hidden!', visible: :visible)
|
65
66
|
Capybara.ignore_hidden_elements = false
|
66
|
-
expect(@session).to have_selector(:id,
|
67
|
+
expect(@session).to have_selector(:id, 'hidden-text', text: 'Some of this text is hidden!', visible: :all)
|
67
68
|
Capybara.visible_text_only = true
|
68
|
-
expect(@session).not_to have_selector(:id,
|
69
|
+
expect(@session).not_to have_selector(:id, 'hidden-text', text: 'Some of this text is hidden!', visible: :visible)
|
69
70
|
end
|
70
71
|
|
71
|
-
it
|
72
|
-
expect(@session).to have_selector(
|
73
|
-
expect(@session).not_to have_selector(
|
72
|
+
it 'should discard all matches where the given regexp is not matched' do
|
73
|
+
expect(@session).to have_selector('//p//a', text: /re[dab]i/i, count: 1)
|
74
|
+
expect(@session).not_to have_selector('//p//a', text: /Red$/)
|
74
75
|
end
|
75
76
|
|
76
|
-
it
|
77
|
+
it 'should raise when extra parameters passed' do
|
77
78
|
expect do
|
78
|
-
expect(@session).to have_selector(:css,
|
79
|
+
expect(@session).to have_selector(:css, 'p a#foo', 'extra')
|
79
80
|
end.to raise_error ArgumentError, /extra/
|
80
81
|
end
|
82
|
+
|
83
|
+
context 'with whitespace normalization' do
|
84
|
+
context 'Capybara.default_normalize_ws = false' do
|
85
|
+
it 'should support normalize_ws option' do
|
86
|
+
Capybara.default_normalize_ws = false
|
87
|
+
expect(@session).not_to have_selector(:id, 'second', text: 'text with whitespace')
|
88
|
+
expect(@session).to have_selector(:id, 'second', text: 'text with whitespace', normalize_ws: true)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context 'Capybara.default_normalize_ws = true' do
|
93
|
+
it 'should support normalize_ws option' do
|
94
|
+
Capybara.default_normalize_ws = true
|
95
|
+
expect(@session).to have_selector(:id, 'second', text: 'text with whitespace')
|
96
|
+
expect(@session).not_to have_selector(:id, 'second', text: 'text with whitespace', normalize_ws: false)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
81
100
|
end
|
82
101
|
|
83
|
-
context
|
84
|
-
context
|
85
|
-
it
|
86
|
-
expect(@session).to have_selector(:id,
|
87
|
-
expect(@session).to have_no_selector(:id,
|
102
|
+
context 'with exact_text' do
|
103
|
+
context 'string' do
|
104
|
+
it 'should only match elements that match exactly' do
|
105
|
+
expect(@session).to have_selector(:id, 'h2one', exact_text: 'Header Class Test One')
|
106
|
+
expect(@session).to have_no_selector(:id, 'h2one', exact_text: 'Header Class Test')
|
88
107
|
end
|
89
108
|
end
|
90
109
|
|
91
|
-
context
|
92
|
-
it
|
93
|
-
expect(@session).to have_selector(:id,
|
94
|
-
expect(@session).to have_no_selector(:id,
|
110
|
+
context 'boolean' do
|
111
|
+
it 'should only match elements that match exactly when true' do
|
112
|
+
expect(@session).to have_selector(:id, 'h2one', text: 'Header Class Test One', exact_text: true)
|
113
|
+
expect(@session).to have_no_selector(:id, 'h2one', text: 'Header Class Test', exact_text: true)
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'should match substrings when false' do
|
117
|
+
expect(@session).to have_selector(:id, 'h2one', text: 'Header Class Test One', exact_text: false)
|
118
|
+
expect(@session).to have_selector(:id, 'h2one', text: 'Header Class Test', exact_text: false)
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'should warn if text option is a regexp that it is ignoring exact_text' do
|
122
|
+
allow(Capybara::Helpers).to receive(:warn)
|
123
|
+
expect(@session).to have_selector(:id, 'h2one', text: /Class Test/, exact_text: true)
|
124
|
+
expect(Capybara::Helpers).to have_received(:warn).with(/'exact_text' option is not supported/)
|
95
125
|
end
|
126
|
+
end
|
96
127
|
|
97
|
-
|
98
|
-
|
99
|
-
expect(@session).to have_selector(:id,
|
128
|
+
context 'regexp' do
|
129
|
+
it 'should only match when it fully matches' do
|
130
|
+
expect(@session).to have_selector(:id, 'h2one', exact_text: /Header Class Test One/)
|
131
|
+
expect(@session).to have_no_selector(:id, 'h2one', exact_text: /Header Class Test/)
|
132
|
+
expect(@session).to have_no_selector(:id, 'h2one', exact_text: /Class Test One/)
|
133
|
+
expect(@session).to have_no_selector(:id, 'h2one', exact_text: /Class Test/)
|
100
134
|
end
|
101
135
|
end
|
102
136
|
end
|
137
|
+
|
138
|
+
context 'datalist' do
|
139
|
+
it 'should match options' do
|
140
|
+
@session.visit('/form')
|
141
|
+
expect(@session).to have_selector(:datalist_input, with_options: %w[Jaguar Audi Mercedes])
|
142
|
+
expect(@session).not_to have_selector(:datalist_input, with_options: %w[Ford Chevy])
|
143
|
+
end
|
144
|
+
end
|
103
145
|
end
|
104
146
|
|
105
147
|
Capybara::SpecHelper.spec '#has_no_selector?' do
|
@@ -107,63 +149,69 @@ Capybara::SpecHelper.spec '#has_no_selector?' do
|
|
107
149
|
@session.visit('/with_html')
|
108
150
|
end
|
109
151
|
|
110
|
-
it
|
111
|
-
expect(@session).not_to have_no_selector(:xpath,
|
112
|
-
expect(@session).not_to have_no_selector(:css,
|
152
|
+
it 'should be false if the given selector is on the page' do
|
153
|
+
expect(@session).not_to have_no_selector(:xpath, '//p')
|
154
|
+
expect(@session).not_to have_no_selector(:css, 'p a#foo')
|
113
155
|
expect(@session).not_to have_no_selector("//p[contains(.,'est')]")
|
114
156
|
end
|
115
157
|
|
116
|
-
it
|
117
|
-
expect(@session).to have_no_selector(:xpath,
|
118
|
-
expect(@session).to have_no_selector(:css,
|
158
|
+
it 'should be true if the given selector is not on the page' do
|
159
|
+
expect(@session).to have_no_selector(:xpath, '//abbr')
|
160
|
+
expect(@session).to have_no_selector(:css, 'p a#doesnotexist')
|
119
161
|
expect(@session).to have_no_selector("//p[contains(.,'thisstringisnotonpage')]")
|
120
162
|
end
|
121
163
|
|
122
|
-
it
|
164
|
+
it 'should use default selector' do
|
123
165
|
Capybara.default_selector = :css
|
124
|
-
expect(@session).to have_no_selector(
|
125
|
-
expect(@session).not_to have_no_selector(
|
166
|
+
expect(@session).to have_no_selector('p a#doesnotexist')
|
167
|
+
expect(@session).not_to have_no_selector('p a#foo')
|
126
168
|
end
|
127
169
|
|
128
|
-
it
|
170
|
+
it 'should respect scopes' do
|
129
171
|
@session.within "//p[@id='first']" do
|
130
172
|
expect(@session).not_to have_no_selector(".//a[@id='foo']")
|
131
173
|
expect(@session).to have_no_selector(".//a[@id='red']")
|
132
174
|
end
|
133
175
|
end
|
134
176
|
|
135
|
-
it
|
136
|
-
expect(@session).to have_no_selector(:css,
|
177
|
+
it 'should accept a filter block' do
|
178
|
+
expect(@session).to have_no_selector(:css, 'a#foo') { |el| el[:id] != 'foo' }
|
137
179
|
end
|
138
180
|
|
139
|
-
context
|
140
|
-
it
|
141
|
-
expect(@session).not_to have_no_selector(
|
181
|
+
context 'with count' do
|
182
|
+
it 'should be false if the content is on the page the given number of times' do
|
183
|
+
expect(@session).not_to have_no_selector('//p', count: 3)
|
142
184
|
expect(@session).not_to have_no_selector("//p//a[@id='foo']", count: 1)
|
143
185
|
expect(@session).not_to have_no_selector("//p[contains(.,'est')]", count: 1)
|
144
186
|
end
|
145
187
|
|
146
|
-
it
|
147
|
-
expect(@session).to have_no_selector(
|
188
|
+
it 'should be true if the content is on the page the wrong number of times' do
|
189
|
+
expect(@session).to have_no_selector('//p', count: 6)
|
148
190
|
expect(@session).to have_no_selector("//p//a[@id='foo']", count: 2)
|
149
191
|
expect(@session).to have_no_selector("//p[contains(.,'est')]", count: 5)
|
150
192
|
end
|
151
193
|
|
152
194
|
it "should be true if the content isn't on the page at all" do
|
153
|
-
expect(@session).to have_no_selector(
|
195
|
+
expect(@session).to have_no_selector('//abbr', count: 2)
|
154
196
|
expect(@session).to have_no_selector("//p//a[@id='doesnotexist']", count: 1)
|
155
197
|
end
|
156
198
|
end
|
157
199
|
|
158
|
-
context
|
159
|
-
it
|
160
|
-
expect(@session).not_to have_no_selector(
|
161
|
-
expect(@session).to have_no_selector(
|
200
|
+
context 'with text' do
|
201
|
+
it 'should discard all matches where the given string is contained' do
|
202
|
+
expect(@session).not_to have_no_selector('//p//a', text: 'Redirect', count: 1)
|
203
|
+
expect(@session).to have_no_selector('//p', text: 'Doesnotexist')
|
204
|
+
end
|
205
|
+
|
206
|
+
it 'should discard all matches where the given regexp is matched' do
|
207
|
+
expect(@session).not_to have_no_selector('//p//a', text: /re[dab]i/i, count: 1)
|
208
|
+
expect(@session).to have_no_selector('//p//a', text: /Red$/)
|
162
209
|
end
|
163
210
|
|
164
|
-
it
|
165
|
-
expect
|
166
|
-
|
211
|
+
it 'should error when matching element exists' do
|
212
|
+
expect do
|
213
|
+
expect(@session).to have_no_selector('//h2', text: 'Header Class Test Five')
|
214
|
+
end.to raise_error RSpec::Expectations::ExpectationNotMetError
|
167
215
|
end
|
168
216
|
end
|
169
217
|
end
|