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_field' 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_field('Dog')
|
8
8
|
expect(@session).to have_field('form_description')
|
9
9
|
expect(@session).to have_field('Region')
|
10
10
|
expect(@session).to have_field(:Region)
|
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_field('Monkey')
|
15
15
|
end
|
16
16
|
|
17
17
|
context 'with 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_field('First Name', with: 'John')
|
20
20
|
expect(@session).to have_field('First Name', with: /^Joh/)
|
21
21
|
expect(@session).to have_field('Phone', with: '+1 555 7021')
|
@@ -23,28 +23,61 @@ Capybara::SpecHelper.spec '#has_field' do
|
|
23
23
|
expect(@session).to have_field('Description', with: 'Descriptive text goes here')
|
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_field('First Name', with: 'Peter')
|
28
28
|
expect(@session).not_to have_field('First Name', with: /eter$/)
|
29
29
|
expect(@session).not_to have_field('Wrong Name', with: 'John')
|
30
30
|
expect(@session).not_to have_field('Description', with: 'Monkey')
|
31
31
|
end
|
32
32
|
|
33
|
-
it
|
33
|
+
it 'should be true after the field has been filled in with the given value' do
|
34
34
|
@session.fill_in('First Name', with: 'Jonas')
|
35
35
|
expect(@session).to have_field('First Name', with: 'Jonas')
|
36
36
|
expect(@session).to have_field('First Name', with: /ona/)
|
37
37
|
end
|
38
38
|
|
39
|
-
it
|
39
|
+
it 'should be false after the field has been filled in with a different value' do
|
40
40
|
@session.fill_in('First Name', with: 'Jonas')
|
41
41
|
expect(@session).not_to have_field('First Name', with: 'John')
|
42
42
|
expect(@session).not_to have_field('First Name', with: /John|Paul|George|Ringo/)
|
43
43
|
end
|
44
|
+
|
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: '')
|
76
|
+
end
|
44
77
|
end
|
45
78
|
|
46
79
|
context 'with type' do
|
47
|
-
it
|
80
|
+
it 'should be true if a field with the given type is on the page' do
|
48
81
|
expect(@session).to have_field('First Name', type: 'text')
|
49
82
|
expect(@session).to have_field('Html5 Email', type: 'email')
|
50
83
|
expect(@session).to have_field('Html5 Multiple Email', type: 'email')
|
@@ -53,7 +86,7 @@ Capybara::SpecHelper.spec '#has_field' do
|
|
53
86
|
expect(@session).to have_field('Languages', type: 'select')
|
54
87
|
end
|
55
88
|
|
56
|
-
it
|
89
|
+
it 'should be false if the given field is not on the page' do
|
57
90
|
expect(@session).not_to have_field('First Name', type: 'textarea')
|
58
91
|
expect(@session).not_to have_field('Html5 Email', type: 'tel')
|
59
92
|
expect(@session).not_to have_field('Html5 Multiple Email', type: 'tel')
|
@@ -61,59 +94,93 @@ Capybara::SpecHelper.spec '#has_field' do
|
|
61
94
|
expect(@session).not_to have_field('Description', type: 'email')
|
62
95
|
expect(@session).not_to have_field('Languages', type: 'textarea')
|
63
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')
|
100
|
+
end
|
64
101
|
end
|
65
102
|
|
66
103
|
context 'with multiple' do
|
67
|
-
it
|
104
|
+
it 'should be true if a field with the multiple attribute is on the page' do
|
68
105
|
expect(@session).to have_field('Html5 Multiple Email', multiple: true)
|
69
106
|
end
|
70
107
|
|
71
|
-
it
|
108
|
+
it 'should be false if a field without the multiple attribute is not on the page' do
|
72
109
|
expect(@session).not_to have_field('Html5 Multiple Email', multiple: false)
|
73
110
|
end
|
74
111
|
end
|
112
|
+
|
113
|
+
context 'with focused:', requires: [:active_element] do
|
114
|
+
it 'should be true if a field has focus' do
|
115
|
+
2.times { @session.send_keys(:tab) }
|
116
|
+
|
117
|
+
expect(@session).to have_field('An Input', focused: true)
|
118
|
+
end
|
119
|
+
|
120
|
+
it 'should be false if a field does not have focus' do
|
121
|
+
expect(@session).to have_field('An Input', focused: false)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
context 'with valid', requires: [:js] do
|
126
|
+
it 'should be true if field is valid' do
|
127
|
+
@session.fill_in 'required', with: 'something'
|
128
|
+
@session.fill_in 'length', with: 'abcd'
|
129
|
+
|
130
|
+
expect(@session).to have_field('required', valid: true)
|
131
|
+
expect(@session).to have_field('length', valid: true)
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'should be false if field is invalid' do
|
135
|
+
expect(@session).not_to have_field('required', valid: true)
|
136
|
+
expect(@session).to have_field('required', valid: false)
|
137
|
+
|
138
|
+
@session.fill_in 'length', with: 'abc'
|
139
|
+
expect(@session).not_to have_field('length', valid: true)
|
140
|
+
end
|
141
|
+
end
|
75
142
|
end
|
76
143
|
|
77
144
|
Capybara::SpecHelper.spec '#has_no_field' do
|
78
145
|
before { @session.visit('/form') }
|
79
146
|
|
80
|
-
it
|
147
|
+
it 'should be false if the field is on the page' do
|
81
148
|
expect(@session).not_to have_no_field('Dog')
|
82
149
|
expect(@session).not_to have_no_field('form_description')
|
83
150
|
expect(@session).not_to have_no_field('Region')
|
84
151
|
end
|
85
152
|
|
86
|
-
it
|
153
|
+
it 'should be true if the field is not on the page' do
|
87
154
|
expect(@session).to have_no_field('Monkey')
|
88
155
|
end
|
89
156
|
|
90
157
|
context 'with value' do
|
91
|
-
it
|
158
|
+
it 'should be false if a field with the given value is on the page' do
|
92
159
|
expect(@session).not_to have_no_field('First Name', with: 'John')
|
93
160
|
expect(@session).not_to have_no_field('Phone', with: '+1 555 7021')
|
94
161
|
expect(@session).not_to have_no_field('Street', with: 'Sesame street 66')
|
95
162
|
expect(@session).not_to have_no_field('Description', with: 'Descriptive text goes here')
|
96
163
|
end
|
97
164
|
|
98
|
-
it
|
165
|
+
it 'should be true if the given field is not on the page' do
|
99
166
|
expect(@session).to have_no_field('First Name', with: 'Peter')
|
100
167
|
expect(@session).to have_no_field('Wrong Name', with: 'John')
|
101
168
|
expect(@session).to have_no_field('Description', with: 'Monkey')
|
102
169
|
end
|
103
170
|
|
104
|
-
it
|
171
|
+
it 'should be false after the field has been filled in with the given value' do
|
105
172
|
@session.fill_in('First Name', with: 'Jonas')
|
106
173
|
expect(@session).not_to have_no_field('First Name', with: 'Jonas')
|
107
174
|
end
|
108
175
|
|
109
|
-
it
|
176
|
+
it 'should be true after the field has been filled in with a different value' do
|
110
177
|
@session.fill_in('First Name', with: 'Jonas')
|
111
178
|
expect(@session).to have_no_field('First Name', with: 'John')
|
112
179
|
end
|
113
180
|
end
|
114
181
|
|
115
182
|
context 'with type' do
|
116
|
-
it
|
183
|
+
it 'should be false if a field with the given type is on the page' do
|
117
184
|
expect(@session).not_to have_no_field('First Name', type: 'text')
|
118
185
|
expect(@session).not_to have_no_field('Html5 Email', type: 'email')
|
119
186
|
expect(@session).not_to have_no_field('Html5 Tel', type: 'tel')
|
@@ -121,7 +188,7 @@ Capybara::SpecHelper.spec '#has_no_field' do
|
|
121
188
|
expect(@session).not_to have_no_field('Languages', type: 'select')
|
122
189
|
end
|
123
190
|
|
124
|
-
it
|
191
|
+
it 'should be true if the given field is not on the page' do
|
125
192
|
expect(@session).to have_no_field('First Name', type: 'textarea')
|
126
193
|
expect(@session).to have_no_field('Html5 Email', type: 'tel')
|
127
194
|
expect(@session).to have_no_field('Description', type: '')
|
@@ -129,61 +196,73 @@ Capybara::SpecHelper.spec '#has_no_field' do
|
|
129
196
|
expect(@session).to have_no_field('Languages', type: 'textarea')
|
130
197
|
end
|
131
198
|
end
|
199
|
+
|
200
|
+
context 'with focused:', requires: [:active_element] do
|
201
|
+
it 'should be true if a field does not have focus when focused: true' do
|
202
|
+
expect(@session).to have_no_field('An Input', focused: true)
|
203
|
+
end
|
204
|
+
|
205
|
+
it 'should be false if a field has focus when focused: true' do
|
206
|
+
2.times { @session.send_keys(:tab) }
|
207
|
+
|
208
|
+
expect(@session).not_to have_no_field('An Input', focused: true)
|
209
|
+
end
|
210
|
+
end
|
132
211
|
end
|
133
212
|
|
134
213
|
Capybara::SpecHelper.spec '#has_checked_field?' do
|
135
214
|
before { @session.visit('/form') }
|
136
215
|
|
137
|
-
it
|
216
|
+
it 'should be true if a checked field is on the page' do
|
138
217
|
expect(@session).to have_checked_field('gender_female')
|
139
218
|
expect(@session).to have_checked_field('Hamster')
|
140
219
|
end
|
141
220
|
|
142
|
-
it
|
221
|
+
it 'should be true for disabled checkboxes if disabled: true' do
|
143
222
|
expect(@session).to have_checked_field('Disabled Checkbox', disabled: true)
|
144
223
|
end
|
145
224
|
|
146
|
-
it
|
225
|
+
it 'should be false if an unchecked field is on the page' do
|
147
226
|
expect(@session).not_to have_checked_field('form_pets_cat')
|
148
227
|
expect(@session).not_to have_checked_field('Male')
|
149
228
|
end
|
150
229
|
|
151
|
-
it
|
230
|
+
it 'should be false if no field is on the page' do
|
152
231
|
expect(@session).not_to have_checked_field('Does Not Exist')
|
153
232
|
end
|
154
233
|
|
155
|
-
it
|
234
|
+
it 'should be false for disabled checkboxes by default' do
|
156
235
|
expect(@session).not_to have_checked_field('Disabled Checkbox')
|
157
236
|
end
|
158
237
|
|
159
|
-
it
|
238
|
+
it 'should be false for disabled checkboxes if disabled: false' do
|
160
239
|
expect(@session).not_to have_checked_field('Disabled Checkbox', disabled: false)
|
161
240
|
end
|
162
241
|
|
163
|
-
it
|
242
|
+
it 'should be true for disabled checkboxes if disabled: :all' do
|
164
243
|
expect(@session).to have_checked_field('Disabled Checkbox', disabled: :all)
|
165
244
|
end
|
166
245
|
|
167
|
-
it
|
246
|
+
it 'should be true for enabled checkboxes if disabled: :all' do
|
168
247
|
expect(@session).to have_checked_field('gender_female', disabled: :all)
|
169
248
|
end
|
170
249
|
|
171
|
-
it
|
250
|
+
it 'should be true after an unchecked checkbox is checked' do
|
172
251
|
@session.check('form_pets_cat')
|
173
252
|
expect(@session).to have_checked_field('form_pets_cat')
|
174
253
|
end
|
175
254
|
|
176
|
-
it
|
255
|
+
it 'should be false after a checked checkbox is unchecked' do
|
177
256
|
@session.uncheck('form_pets_dog')
|
178
257
|
expect(@session).not_to have_checked_field('form_pets_dog')
|
179
258
|
end
|
180
259
|
|
181
|
-
it
|
260
|
+
it 'should be true after an unchecked radio button is chosen' do
|
182
261
|
@session.choose('gender_male')
|
183
262
|
expect(@session).to have_checked_field('gender_male')
|
184
263
|
end
|
185
264
|
|
186
|
-
it
|
265
|
+
it 'should be false after another radio button in the group is chosen' do
|
187
266
|
@session.choose('gender_male')
|
188
267
|
expect(@session).not_to have_checked_field('gender_female')
|
189
268
|
end
|
@@ -192,29 +271,29 @@ end
|
|
192
271
|
Capybara::SpecHelper.spec '#has_no_checked_field?' do
|
193
272
|
before { @session.visit('/form') }
|
194
273
|
|
195
|
-
it
|
274
|
+
it 'should be false if a checked field is on the page' do
|
196
275
|
expect(@session).not_to have_no_checked_field('gender_female')
|
197
276
|
expect(@session).not_to have_no_checked_field('Hamster')
|
198
277
|
end
|
199
278
|
|
200
|
-
it
|
279
|
+
it 'should be false for disabled checkboxes if disabled: true' do
|
201
280
|
expect(@session).not_to have_no_checked_field('Disabled Checkbox', disabled: true)
|
202
281
|
end
|
203
282
|
|
204
|
-
it
|
283
|
+
it 'should be true if an unchecked field is on the page' do
|
205
284
|
expect(@session).to have_no_checked_field('form_pets_cat')
|
206
285
|
expect(@session).to have_no_checked_field('Male')
|
207
286
|
end
|
208
287
|
|
209
|
-
it
|
288
|
+
it 'should be true if no field is on the page' do
|
210
289
|
expect(@session).to have_no_checked_field('Does Not Exist')
|
211
290
|
end
|
212
291
|
|
213
|
-
it
|
292
|
+
it 'should be true for disabled checkboxes by default' do
|
214
293
|
expect(@session).to have_no_checked_field('Disabled Checkbox')
|
215
294
|
end
|
216
295
|
|
217
|
-
it
|
296
|
+
it 'should be true for disabled checkboxes if disabled: false' do
|
218
297
|
expect(@session).to have_no_checked_field('Disabled Checkbox', disabled: false)
|
219
298
|
end
|
220
299
|
end
|
@@ -222,89 +301,89 @@ end
|
|
222
301
|
Capybara::SpecHelper.spec '#has_unchecked_field?' do
|
223
302
|
before { @session.visit('/form') }
|
224
303
|
|
225
|
-
it
|
304
|
+
it 'should be false if a checked field is on the page' do
|
226
305
|
expect(@session).not_to have_unchecked_field('gender_female')
|
227
306
|
expect(@session).not_to have_unchecked_field('Hamster')
|
228
307
|
end
|
229
308
|
|
230
|
-
it
|
309
|
+
it 'should be true if an unchecked field is on the page' do
|
231
310
|
expect(@session).to have_unchecked_field('form_pets_cat')
|
232
311
|
expect(@session).to have_unchecked_field('Male')
|
233
312
|
end
|
234
313
|
|
235
|
-
it
|
314
|
+
it 'should be true for disabled unchecked fields if disabled: true' do
|
236
315
|
expect(@session).to have_unchecked_field('Disabled Unchecked Checkbox', disabled: true)
|
237
316
|
end
|
238
317
|
|
239
|
-
it
|
318
|
+
it 'should be false if no field is on the page' do
|
240
319
|
expect(@session).not_to have_unchecked_field('Does Not Exist')
|
241
320
|
end
|
242
321
|
|
243
|
-
it
|
322
|
+
it 'should be false for disabled unchecked fields by default' do
|
244
323
|
expect(@session).not_to have_unchecked_field('Disabled Unchecked Checkbox')
|
245
324
|
end
|
246
325
|
|
247
|
-
it
|
326
|
+
it 'should be false for disabled unchecked fields if disabled: false' do
|
248
327
|
expect(@session).not_to have_unchecked_field('Disabled Unchecked Checkbox', disabled: false)
|
249
328
|
end
|
250
329
|
|
251
|
-
it
|
330
|
+
it 'should be false after an unchecked checkbox is checked' do
|
252
331
|
@session.check('form_pets_cat')
|
253
332
|
expect(@session).not_to have_unchecked_field('form_pets_cat')
|
254
333
|
end
|
255
334
|
|
256
|
-
it
|
335
|
+
it 'should be true after a checked checkbox is unchecked' do
|
257
336
|
@session.uncheck('form_pets_dog')
|
258
337
|
expect(@session).to have_unchecked_field('form_pets_dog')
|
259
338
|
end
|
260
339
|
|
261
|
-
it
|
340
|
+
it 'should be false after an unchecked radio button is chosen' do
|
262
341
|
@session.choose('gender_male')
|
263
342
|
expect(@session).not_to have_unchecked_field('gender_male')
|
264
343
|
end
|
265
344
|
|
266
|
-
it
|
345
|
+
it 'should be true after another radio button in the group is chosen' do
|
267
346
|
@session.choose('gender_male')
|
268
347
|
expect(@session).to have_unchecked_field('gender_female')
|
269
348
|
end
|
270
349
|
|
271
|
-
it
|
272
|
-
expect(@session.has_unchecked_field?(disabled: true, id:
|
273
|
-
expect(@session).to have_unchecked_field(disabled: true, id:
|
350
|
+
it 'should support locator-less usage' do
|
351
|
+
expect(@session.has_unchecked_field?(disabled: true, id: 'form_disabled_unchecked_checkbox')).to be true
|
352
|
+
expect(@session).to have_unchecked_field(disabled: true, id: 'form_disabled_unchecked_checkbox')
|
274
353
|
end
|
275
354
|
end
|
276
355
|
|
277
356
|
Capybara::SpecHelper.spec '#has_no_unchecked_field?' do
|
278
357
|
before { @session.visit('/form') }
|
279
358
|
|
280
|
-
it
|
359
|
+
it 'should be true if a checked field is on the page' do
|
281
360
|
expect(@session).to have_no_unchecked_field('gender_female')
|
282
361
|
expect(@session).to have_no_unchecked_field('Hamster')
|
283
362
|
end
|
284
363
|
|
285
|
-
it
|
364
|
+
it 'should be false if an unchecked field is on the page' do
|
286
365
|
expect(@session).not_to have_no_unchecked_field('form_pets_cat')
|
287
366
|
expect(@session).not_to have_no_unchecked_field('Male')
|
288
367
|
end
|
289
368
|
|
290
|
-
it
|
369
|
+
it 'should be false for disabled unchecked fields if disabled: true' do
|
291
370
|
expect(@session).not_to have_no_unchecked_field('Disabled Unchecked Checkbox', disabled: true)
|
292
371
|
end
|
293
372
|
|
294
|
-
it
|
373
|
+
it 'should be true if no field is on the page' do
|
295
374
|
expect(@session).to have_no_unchecked_field('Does Not Exist')
|
296
375
|
end
|
297
376
|
|
298
|
-
it
|
377
|
+
it 'should be true for disabled unchecked fields by default' do
|
299
378
|
expect(@session).to have_no_unchecked_field('Disabled Unchecked Checkbox')
|
300
379
|
end
|
301
380
|
|
302
|
-
it
|
381
|
+
it 'should be true for disabled unchecked fields if disabled: false' do
|
303
382
|
expect(@session).to have_no_unchecked_field('Disabled Unchecked Checkbox', disabled: false)
|
304
383
|
end
|
305
384
|
|
306
|
-
it
|
307
|
-
expect(@session.has_no_unchecked_field?(disabled: false, id:
|
308
|
-
expect(@session).to have_no_unchecked_field(disabled: false, id:
|
385
|
+
it 'should support locator-less usage' do
|
386
|
+
expect(@session.has_no_unchecked_field?(disabled: false, id: 'form_disabled_unchecked_checkbox')).to be true
|
387
|
+
expect(@session).to have_no_unchecked_field(disabled: false, id: 'form_disabled_unchecked_checkbox')
|
309
388
|
end
|
310
389
|
end
|
@@ -5,18 +5,44 @@ Capybara::SpecHelper.spec '#has_link?' do
|
|
5
5
|
@session.visit('/with_html')
|
6
6
|
end
|
7
7
|
|
8
|
-
it
|
8
|
+
it 'should be true if the given link is on the page' do
|
9
9
|
expect(@session).to have_link('foo')
|
10
10
|
expect(@session).to have_link('awesome title')
|
11
11
|
expect(@session).to have_link('A link', href: '/with_simple_html')
|
12
12
|
expect(@session).to have_link(:'A link', href: :'/with_simple_html')
|
13
|
-
expect(@session).to have_link('A link', href:
|
13
|
+
expect(@session).to have_link('A link', href: %r{/with_simple_html})
|
14
|
+
expect(@session).to have_link('labore', target: '_self')
|
14
15
|
end
|
15
16
|
|
16
|
-
it
|
17
|
+
it 'should be false if the given link is not on the page' do
|
17
18
|
expect(@session).not_to have_link('monkey')
|
18
19
|
expect(@session).not_to have_link('A link', href: '/nonexistent-href')
|
19
20
|
expect(@session).not_to have_link('A link', href: /nonexistent/)
|
21
|
+
expect(@session).not_to have_link('labore', target: '_blank')
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should notify if an invalid locator is specified' do
|
25
|
+
allow(Capybara::Helpers).to receive(:warn).and_return(nil)
|
26
|
+
@session.has_link?(@session)
|
27
|
+
expect(Capybara::Helpers).to have_received(:warn).with(/Called from: .+/)
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'with focused:', requires: [:active_element] do
|
31
|
+
it 'should be true if the given link is on the page and has focus' do
|
32
|
+
@session.send_keys(:tab)
|
33
|
+
|
34
|
+
expect(@session).to have_link('labore', focused: true)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should be false if the given link is on the page and does not have focus' do
|
38
|
+
expect(@session).to have_link('labore', focused: false)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should raise an error if an invalid option is passed' do
|
43
|
+
expect do
|
44
|
+
expect(@session).to have_link('labore', invalid: true)
|
45
|
+
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, :href, :alt, :title, :target, :download')
|
20
46
|
end
|
21
47
|
end
|
22
48
|
|
@@ -25,15 +51,29 @@ Capybara::SpecHelper.spec '#has_no_link?' do
|
|
25
51
|
@session.visit('/with_html')
|
26
52
|
end
|
27
53
|
|
28
|
-
it
|
54
|
+
it 'should be false if the given link is on the page' do
|
29
55
|
expect(@session).not_to have_no_link('foo')
|
30
56
|
expect(@session).not_to have_no_link('awesome title')
|
31
57
|
expect(@session).not_to have_no_link('A link', href: '/with_simple_html')
|
58
|
+
expect(@session).not_to have_no_link('labore', target: '_self')
|
32
59
|
end
|
33
60
|
|
34
|
-
it
|
61
|
+
it 'should be true if the given link is not on the page' do
|
35
62
|
expect(@session).to have_no_link('monkey')
|
36
63
|
expect(@session).to have_no_link('A link', href: '/nonexistent-href')
|
37
|
-
expect(@session).to have_no_link('A link', href:
|
64
|
+
expect(@session).to have_no_link('A link', href: %r{/nonexistent-href})
|
65
|
+
expect(@session).to have_no_link('labore', target: '_blank')
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'with focused:', requires: [:active_element] do
|
69
|
+
it 'should be true if the given link is on the page and has focus' do
|
70
|
+
expect(@session).to have_no_link('labore', focused: true)
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'should be false if the given link is on the page and does not have focus' do
|
74
|
+
@session.send_keys(:tab)
|
75
|
+
|
76
|
+
expect(@session).to have_no_link('labore', focused: false)
|
77
|
+
end
|
38
78
|
end
|
39
79
|
end
|
@@ -1,76 +1,78 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
Capybara::SpecHelper.spec '#have_none_of_selectors' do
|
2
4
|
before do
|
3
5
|
@session.visit('/with_html')
|
4
6
|
end
|
5
7
|
|
6
|
-
it
|
8
|
+
it 'should be false if any of the given locators are on the page' do
|
7
9
|
expect do
|
8
|
-
expect(@session).to have_none_of_selectors(:xpath,
|
9
|
-
end.to raise_error
|
10
|
+
expect(@session).to have_none_of_selectors(:xpath, '//p', '//a')
|
11
|
+
end.to raise_error RSpec::Expectations::ExpectationNotMetError
|
10
12
|
expect do
|
11
|
-
expect(@session).to have_none_of_selectors(:css,
|
12
|
-
end.to raise_error
|
13
|
+
expect(@session).to have_none_of_selectors(:css, 'p a#foo')
|
14
|
+
end.to raise_error RSpec::Expectations::ExpectationNotMetError
|
13
15
|
end
|
14
16
|
|
15
|
-
it
|
16
|
-
expect(@session).to have_none_of_selectors(:xpath,
|
17
|
-
expect(@session).to have_none_of_selectors(:css,
|
17
|
+
it 'should be true if none of the given locators are on the page' do
|
18
|
+
expect(@session).to have_none_of_selectors(:xpath, '//abbr', '//td')
|
19
|
+
expect(@session).to have_none_of_selectors(:css, 'p a#doesnotexist', 'abbr')
|
18
20
|
end
|
19
21
|
|
20
|
-
it
|
22
|
+
it 'should use default selector' do
|
21
23
|
Capybara.default_selector = :css
|
22
|
-
expect(@session).to have_none_of_selectors(
|
24
|
+
expect(@session).to have_none_of_selectors('p a#doesnotexist', 'abbr')
|
23
25
|
expect do
|
24
|
-
expect(@session).to have_none_of_selectors(
|
25
|
-
end.to raise_error
|
26
|
+
expect(@session).to have_none_of_selectors('abbr', 'p a#foo')
|
27
|
+
end.to raise_error RSpec::Expectations::ExpectationNotMetError
|
26
28
|
end
|
27
29
|
|
28
|
-
context
|
29
|
-
it
|
30
|
+
context 'should respect scopes' do
|
31
|
+
it 'when used with `within`' do
|
30
32
|
@session.within "//p[@id='first']" do
|
31
33
|
expect do
|
32
34
|
expect(@session).to have_none_of_selectors(".//a[@id='foo']")
|
33
|
-
end.to raise_error
|
35
|
+
end.to raise_error RSpec::Expectations::ExpectationNotMetError
|
34
36
|
expect(@session).to have_none_of_selectors(".//a[@id='red']")
|
35
37
|
end
|
36
38
|
end
|
37
39
|
|
38
|
-
it
|
40
|
+
it 'when called on an element' do
|
39
41
|
el = @session.find "//p[@id='first']"
|
40
42
|
expect do
|
41
43
|
expect(el).to have_none_of_selectors(".//a[@id='foo']")
|
42
|
-
end.to raise_error
|
44
|
+
end.to raise_error RSpec::Expectations::ExpectationNotMetError
|
43
45
|
expect(el).to have_none_of_selectors(".//a[@id='red']")
|
44
46
|
end
|
45
47
|
end
|
46
48
|
|
47
|
-
context
|
48
|
-
it
|
49
|
+
context 'with options' do
|
50
|
+
it 'should apply the options to all locators' do
|
49
51
|
expect do
|
50
|
-
expect(@session).to have_none_of_selectors(
|
51
|
-
end.to raise_error
|
52
|
-
expect(@session).to have_none_of_selectors(
|
52
|
+
expect(@session).to have_none_of_selectors('//p//a', text: 'Redirect')
|
53
|
+
end.to raise_error RSpec::Expectations::ExpectationNotMetError
|
54
|
+
expect(@session).to have_none_of_selectors('//p', text: 'Doesnotexist')
|
53
55
|
end
|
54
56
|
|
55
|
-
it
|
57
|
+
it 'should discard all matches where the given regexp is matched' do
|
56
58
|
expect do
|
57
|
-
expect(@session).to have_none_of_selectors(
|
58
|
-
end.to raise_error
|
59
|
-
expect(@session).to have_none_of_selectors(
|
59
|
+
expect(@session).to have_none_of_selectors('//p//a', text: /re[dab]i/i, count: 1)
|
60
|
+
end.to raise_error RSpec::Expectations::ExpectationNotMetError
|
61
|
+
expect(@session).to have_none_of_selectors('//p//a', text: /Red$/)
|
60
62
|
end
|
61
63
|
end
|
62
64
|
|
63
|
-
context
|
64
|
-
it
|
65
|
+
context 'with wait', requires: [:js] do
|
66
|
+
it 'should not find elements if they appear after given wait duration' do
|
65
67
|
@session.visit('/with_js')
|
66
68
|
@session.click_link('Click me')
|
67
|
-
expect(@session).to have_none_of_selectors(:css,
|
69
|
+
expect(@session).to have_none_of_selectors(:css, '#new_field', 'a#has-been-clicked', wait: 0.1)
|
68
70
|
end
|
69
71
|
end
|
70
72
|
|
71
|
-
it
|
73
|
+
it 'cannot be negated' do
|
72
74
|
expect do
|
73
|
-
expect(@session).not_to have_none_of_selectors(:css,
|
75
|
+
expect(@session).not_to have_none_of_selectors(:css, 'p a#foo', 'h2#h2one', 'h2#h2two')
|
74
76
|
end.to raise_error ArgumentError
|
75
77
|
end
|
76
78
|
end
|