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
data/lib/capybara/minitest.rb
CHANGED
|
@@ -1,57 +1,63 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
require 'minitest'
|
|
3
4
|
require 'capybara/dsl'
|
|
4
5
|
|
|
5
6
|
module Capybara
|
|
6
7
|
module Minitest
|
|
7
8
|
module Assertions
|
|
8
|
-
##
|
|
9
|
+
##
|
|
10
|
+
# Assert text exists
|
|
9
11
|
#
|
|
12
|
+
# @!method assert_content
|
|
10
13
|
# @!method assert_text
|
|
11
|
-
#
|
|
14
|
+
# See {Capybara::Node::Matchers#assert_text}
|
|
12
15
|
|
|
13
|
-
##
|
|
16
|
+
##
|
|
17
|
+
# Assert text does not exist
|
|
14
18
|
#
|
|
19
|
+
# @!method refute_content
|
|
20
|
+
# @!method assert_no_content
|
|
21
|
+
# @!method refute_text
|
|
15
22
|
# @!method assert_no_text
|
|
16
|
-
#
|
|
23
|
+
# See {Capybara::Node::Matchers#assert_no_text}
|
|
17
24
|
|
|
18
25
|
##
|
|
19
26
|
# Assertion that page title does match
|
|
20
27
|
#
|
|
21
28
|
# @!method assert_title
|
|
22
|
-
#
|
|
29
|
+
# See {Capybara::Node::DocumentMatchers#assert_title}
|
|
23
30
|
|
|
24
31
|
##
|
|
25
32
|
# Assertion that page title does not match
|
|
26
33
|
#
|
|
27
34
|
# @!method refute_title
|
|
28
35
|
# @!method assert_no_title
|
|
29
|
-
#
|
|
36
|
+
# See {Capybara::Node::DocumentMatchers#assert_no_title}
|
|
30
37
|
|
|
31
38
|
##
|
|
32
39
|
# Assertion that current path matches
|
|
33
40
|
#
|
|
34
41
|
# @!method assert_current_path
|
|
35
|
-
#
|
|
42
|
+
# See {Capybara::SessionMatchers#assert_current_path}
|
|
36
43
|
|
|
37
44
|
##
|
|
38
45
|
# Assertion that current page does not match
|
|
39
46
|
#
|
|
40
47
|
# @!method refute_current_path
|
|
41
48
|
# @!method assert_no_current_path
|
|
42
|
-
#
|
|
43
|
-
|
|
49
|
+
# See {Capybara::SessionMatchers#assert_no_current_path}
|
|
44
50
|
|
|
45
|
-
%w
|
|
46
|
-
|
|
47
|
-
def #{assertion_name}
|
|
51
|
+
%w[text no_text title no_title current_path no_current_path].each do |assertion_name|
|
|
52
|
+
class_eval <<-ASSERTION, __FILE__, __LINE__ + 1
|
|
53
|
+
def assert_#{assertion_name}(*args, **kwargs, &optional_filter_block)
|
|
48
54
|
self.assertions +=1
|
|
49
|
-
subject,
|
|
50
|
-
subject
|
|
55
|
+
subject, args = determine_subject(args)
|
|
56
|
+
subject.assert_#{assertion_name}(*args, **kwargs, &optional_filter_block)
|
|
51
57
|
rescue Capybara::ExpectationNotMet => e
|
|
52
58
|
raise ::Minitest::Assertion, e.message
|
|
53
59
|
end
|
|
54
|
-
|
|
60
|
+
ASSERTION
|
|
55
61
|
end
|
|
56
62
|
|
|
57
63
|
alias_method :refute_title, :assert_no_title
|
|
@@ -61,210 +67,324 @@ module Capybara
|
|
|
61
67
|
alias_method :assert_content, :assert_text
|
|
62
68
|
alias_method :assert_no_content, :refute_text
|
|
63
69
|
|
|
64
|
-
##
|
|
70
|
+
##
|
|
71
|
+
# Assert selector exists on page
|
|
65
72
|
#
|
|
66
73
|
# @!method assert_selector
|
|
67
|
-
#
|
|
74
|
+
# See {Capybara::Node::Matchers#assert_selector}
|
|
68
75
|
|
|
69
|
-
##
|
|
76
|
+
##
|
|
77
|
+
# Assert selector does not exist on page
|
|
70
78
|
#
|
|
79
|
+
# @!method refute_selector
|
|
71
80
|
# @!method assert_no_selector
|
|
72
|
-
#
|
|
81
|
+
# See {Capybara::Node::Matchers#assert_no_selector}
|
|
73
82
|
|
|
74
|
-
##
|
|
83
|
+
##
|
|
84
|
+
# Assert element matches selector
|
|
75
85
|
#
|
|
76
86
|
# @!method assert_matches_selector
|
|
77
|
-
#
|
|
87
|
+
# See {Capybara::Node::Matchers#assert_matches_selector}
|
|
78
88
|
|
|
79
|
-
##
|
|
89
|
+
##
|
|
90
|
+
# Assert element does not match selector
|
|
80
91
|
#
|
|
81
|
-
# @!method
|
|
82
|
-
#
|
|
92
|
+
# @!method refute_matches_selector
|
|
93
|
+
# @!method assert_not_matches_selector
|
|
94
|
+
# See {Capybara::Node::Matchers#assert_not_matches_selector}
|
|
83
95
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
self.assertions +=1
|
|
90
|
-
subject, *args = determine_subject(args)
|
|
91
|
-
subject.#{assertion_name}(*args, &optional_filter_block)
|
|
92
|
-
rescue Capybara::ExpectationNotMet => e
|
|
93
|
-
raise ::Minitest::Assertion, e.message
|
|
94
|
-
end
|
|
95
|
-
EOM
|
|
96
|
-
end
|
|
96
|
+
##
|
|
97
|
+
# Assert all of the provided selectors exist on page
|
|
98
|
+
#
|
|
99
|
+
# @!method assert_all_of_selectors
|
|
100
|
+
# See {Capybara::Node::Matchers#assert_all_of_selectors}
|
|
97
101
|
|
|
98
|
-
|
|
99
|
-
|
|
102
|
+
##
|
|
103
|
+
# Assert none of the provided selectors exist on page
|
|
104
|
+
#
|
|
105
|
+
# @!method assert_none_of_selectors
|
|
106
|
+
# See {Capybara::Node::Matchers#assert_none_of_selectors}
|
|
100
107
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
end
|
|
108
|
+
##
|
|
109
|
+
# Assert any of the provided selectors exist on page
|
|
110
|
+
#
|
|
111
|
+
# @!method assert_any_of_selectors
|
|
112
|
+
# See {Capybara::Node::Matchers#assert_any_of_selectors}
|
|
107
113
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
alias_method "refute_#{selector_type}", "assert_no_#{selector_type}"
|
|
114
|
-
end
|
|
114
|
+
##
|
|
115
|
+
# Assert element has the provided CSS styles
|
|
116
|
+
#
|
|
117
|
+
# @!method assert_matches_style
|
|
118
|
+
# See {Capybara::Node::Matchers#assert_matches_style}
|
|
115
119
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
end
|
|
120
|
+
##
|
|
121
|
+
# Assert element has a matching sibling
|
|
122
|
+
#
|
|
123
|
+
# @!method assert_sibling
|
|
124
|
+
# See {Capybara::Node::Matchers#assert_sibling}
|
|
122
125
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
end
|
|
126
|
+
##
|
|
127
|
+
# Assert element does not have a matching sibling
|
|
128
|
+
#
|
|
129
|
+
# @!method refute_sibling
|
|
130
|
+
# @!method assert_no_sibling
|
|
131
|
+
# See {Capybara::Node::Matchers#assert_no_sibling}
|
|
130
132
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
133
|
+
##
|
|
134
|
+
# Assert element has a matching ancestor
|
|
135
|
+
#
|
|
136
|
+
# @!method assert_ancestor
|
|
137
|
+
# See {Capybara::Node::Matchers#assert_ancestor}
|
|
136
138
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
139
|
+
##
|
|
140
|
+
# Assert element does not have a matching ancestor
|
|
141
|
+
#
|
|
142
|
+
# @!method refute_ancestor
|
|
143
|
+
# @!method assert_no_ancestor
|
|
144
|
+
# See {Capybara::Node::Matchers#assert_no_ancestor}
|
|
145
|
+
|
|
146
|
+
%w[selector no_selector matches_style
|
|
147
|
+
all_of_selectors none_of_selectors any_of_selectors
|
|
148
|
+
matches_selector not_matches_selector
|
|
149
|
+
sibling no_sibling ancestor no_ancestor].each do |assertion_name|
|
|
150
|
+
class_eval <<-ASSERTION, __FILE__, __LINE__ + 1
|
|
151
|
+
def assert_#{assertion_name} *args, &optional_filter_block
|
|
152
|
+
self.assertions +=1
|
|
153
|
+
subject, args = determine_subject(args)
|
|
154
|
+
subject.assert_#{assertion_name}(*args, &optional_filter_block)
|
|
155
|
+
rescue Capybara::ExpectationNotMet => e
|
|
156
|
+
raise ::Minitest::Assertion, e.message
|
|
157
|
+
end
|
|
158
|
+
ASSERTION
|
|
159
|
+
ruby2_keywords "assert_#{assertion_name}" if respond_to?(:ruby2_keywords)
|
|
142
160
|
end
|
|
143
161
|
|
|
162
|
+
alias_method :refute_selector, :assert_no_selector
|
|
163
|
+
alias_method :refute_matches_selector, :assert_not_matches_selector
|
|
164
|
+
alias_method :refute_ancestor, :assert_no_ancestor
|
|
165
|
+
alias_method :refute_sibling, :assert_no_sibling
|
|
144
166
|
|
|
145
167
|
##
|
|
146
|
-
#
|
|
168
|
+
# Assert that provided xpath exists
|
|
147
169
|
#
|
|
148
170
|
# @!method assert_xpath
|
|
149
|
-
#
|
|
171
|
+
# See {Capybara::Node::Matchers#has_xpath?}
|
|
150
172
|
|
|
151
173
|
##
|
|
152
|
-
#
|
|
174
|
+
# Assert that provide xpath does not exist
|
|
153
175
|
#
|
|
154
176
|
# @!method refute_xpath
|
|
155
177
|
# @!method assert_no_xpath
|
|
156
|
-
#
|
|
178
|
+
# See {Capybara::Node::Matchers#has_no_xpath?}
|
|
157
179
|
|
|
158
180
|
##
|
|
159
|
-
#
|
|
181
|
+
# Assert that provided css exists
|
|
160
182
|
#
|
|
161
183
|
# @!method assert_css
|
|
162
|
-
#
|
|
184
|
+
# See {Capybara::Node::Matchers#has_css?}
|
|
163
185
|
|
|
164
186
|
##
|
|
165
|
-
#
|
|
187
|
+
# Assert that provided css does not exist
|
|
166
188
|
#
|
|
167
189
|
# @!method refute_css
|
|
168
190
|
# @!method assert_no_css
|
|
169
|
-
#
|
|
191
|
+
# See {Capybara::Node::Matchers#has_no_css?}
|
|
192
|
+
|
|
193
|
+
##
|
|
194
|
+
# Assert that provided element exists
|
|
195
|
+
#
|
|
196
|
+
# @!method assert_element
|
|
197
|
+
# See {Capybara::Node::Matchers#has_element?}
|
|
170
198
|
|
|
171
199
|
##
|
|
172
|
-
#
|
|
200
|
+
# Assert that provided element does not exist
|
|
201
|
+
#
|
|
202
|
+
# @!method assert_no_element
|
|
203
|
+
# @!method refute_element
|
|
204
|
+
# See {Capybara::Node::Matchers#has_no_element?}
|
|
205
|
+
|
|
206
|
+
##
|
|
207
|
+
# Assert that provided link exists
|
|
173
208
|
#
|
|
174
209
|
# @!method assert_link
|
|
175
|
-
#
|
|
210
|
+
# See {Capybara::Node::Matchers#has_link?}
|
|
176
211
|
|
|
177
212
|
##
|
|
178
|
-
#
|
|
213
|
+
# Assert that provided link does not exist
|
|
179
214
|
#
|
|
180
215
|
# @!method assert_no_link
|
|
181
216
|
# @!method refute_link
|
|
182
|
-
#
|
|
217
|
+
# See {Capybara::Node::Matchers#has_no_link?}
|
|
183
218
|
|
|
184
219
|
##
|
|
185
|
-
#
|
|
220
|
+
# Assert that provided button exists
|
|
186
221
|
#
|
|
187
222
|
# @!method assert_button
|
|
188
|
-
#
|
|
223
|
+
# See {Capybara::Node::Matchers#has_button?}
|
|
189
224
|
|
|
190
225
|
##
|
|
191
|
-
#
|
|
226
|
+
# Assert that provided button does not exist
|
|
192
227
|
#
|
|
193
228
|
# @!method refute_button
|
|
194
229
|
# @!method assert_no_button
|
|
195
|
-
#
|
|
230
|
+
# See {Capybara::Node::Matchers#has_no_button?}
|
|
196
231
|
|
|
197
232
|
##
|
|
198
|
-
#
|
|
233
|
+
# Assert that provided field exists
|
|
199
234
|
#
|
|
200
235
|
# @!method assert_field
|
|
201
|
-
#
|
|
236
|
+
# See {Capybara::Node::Matchers#has_field?}
|
|
202
237
|
|
|
203
238
|
##
|
|
204
|
-
#
|
|
239
|
+
# Assert that provided field does not exist
|
|
205
240
|
#
|
|
206
241
|
# @!method refute_field
|
|
207
242
|
# @!method assert_no_field
|
|
208
|
-
#
|
|
243
|
+
# See {Capybara::Node::Matchers#has_no_field?}
|
|
209
244
|
|
|
210
245
|
##
|
|
211
|
-
#
|
|
246
|
+
# Assert that provided checked field exists
|
|
212
247
|
#
|
|
213
248
|
# @!method assert_checked_field
|
|
214
|
-
#
|
|
249
|
+
# See {Capybara::Node::Matchers#has_checked_field?}
|
|
215
250
|
|
|
216
251
|
##
|
|
217
|
-
#
|
|
252
|
+
# Assert that provided checked_field does not exist
|
|
218
253
|
#
|
|
219
254
|
# @!method assert_no_checked_field
|
|
220
255
|
# @!method refute_checked_field
|
|
256
|
+
# See {Capybara::Node::Matchers#has_no_checked_field?}
|
|
221
257
|
|
|
222
258
|
##
|
|
223
|
-
#
|
|
259
|
+
# Assert that provided unchecked field exists
|
|
224
260
|
#
|
|
225
261
|
# @!method assert_unchecked_field
|
|
226
|
-
#
|
|
262
|
+
# See {Capybara::Node::Matchers#has_unchecked_field?}
|
|
227
263
|
|
|
228
264
|
##
|
|
229
|
-
#
|
|
265
|
+
# Assert that provided unchecked field does not exist
|
|
230
266
|
#
|
|
231
267
|
# @!method assert_no_unchecked_field
|
|
232
268
|
# @!method refute_unchecked_field
|
|
269
|
+
# See {Capybara::Node::Matchers#has_no_unchecked_field?}
|
|
233
270
|
|
|
234
271
|
##
|
|
235
|
-
#
|
|
272
|
+
# Assert that provided select exists
|
|
236
273
|
#
|
|
237
274
|
# @!method assert_select
|
|
238
|
-
#
|
|
275
|
+
# See {Capybara::Node::Matchers#has_select?}
|
|
239
276
|
|
|
240
277
|
##
|
|
241
|
-
#
|
|
278
|
+
# Assert that provided select does not exist
|
|
242
279
|
#
|
|
243
280
|
# @!method refute_select
|
|
244
281
|
# @!method assert_no_select
|
|
245
|
-
#
|
|
282
|
+
# See {Capybara::Node::Matchers#has_no_select?}
|
|
246
283
|
|
|
247
284
|
##
|
|
248
|
-
#
|
|
285
|
+
# Assert that provided table exists
|
|
249
286
|
#
|
|
250
287
|
# @!method assert_table
|
|
251
|
-
#
|
|
288
|
+
# See {Capybara::Node::Matchers#has_table?}
|
|
252
289
|
|
|
253
290
|
##
|
|
254
|
-
#
|
|
291
|
+
# Assert that provided table does not exist
|
|
255
292
|
#
|
|
256
293
|
# @!method refute_table
|
|
257
294
|
# @!method assert_no_table
|
|
258
|
-
#
|
|
295
|
+
# See {Capybara::Node::Matchers#has_no_table?}
|
|
296
|
+
|
|
297
|
+
%w[xpath css element link button field select table].each do |selector_type|
|
|
298
|
+
define_method "assert_#{selector_type}" do |*args, &optional_filter_block|
|
|
299
|
+
subject, args = determine_subject(args)
|
|
300
|
+
locator, options = extract_locator(args)
|
|
301
|
+
assert_selector(subject, selector_type.to_sym, locator, **options, &optional_filter_block)
|
|
302
|
+
end
|
|
303
|
+
ruby2_keywords "assert_#{selector_type}" if respond_to?(:ruby2_keywords)
|
|
304
|
+
|
|
305
|
+
define_method "assert_no_#{selector_type}" do |*args, &optional_filter_block|
|
|
306
|
+
subject, args = determine_subject(args)
|
|
307
|
+
locator, options = extract_locator(args)
|
|
308
|
+
assert_no_selector(subject, selector_type.to_sym, locator, **options, &optional_filter_block)
|
|
309
|
+
end
|
|
310
|
+
ruby2_keywords "assert_no_#{selector_type}" if respond_to?(:ruby2_keywords)
|
|
311
|
+
alias_method "refute_#{selector_type}", "assert_no_#{selector_type}"
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
%w[checked unchecked].each do |field_type|
|
|
315
|
+
define_method "assert_#{field_type}_field" do |*args, &optional_filter_block|
|
|
316
|
+
subject, args = determine_subject(args)
|
|
317
|
+
locator, options = extract_locator(args)
|
|
318
|
+
assert_selector(subject, :field, locator, **options.merge(field_type.to_sym => true), &optional_filter_block)
|
|
319
|
+
end
|
|
320
|
+
ruby2_keywords "assert_#{field_type}_field" if respond_to?(:ruby2_keywords)
|
|
321
|
+
|
|
322
|
+
define_method "assert_no_#{field_type}_field" do |*args, &optional_filter_block|
|
|
323
|
+
subject, args = determine_subject(args)
|
|
324
|
+
locator, options = extract_locator(args)
|
|
325
|
+
assert_no_selector(
|
|
326
|
+
subject,
|
|
327
|
+
:field,
|
|
328
|
+
locator,
|
|
329
|
+
**options.merge(field_type.to_sym => true),
|
|
330
|
+
&optional_filter_block
|
|
331
|
+
)
|
|
332
|
+
end
|
|
333
|
+
ruby2_keywords "assert_no_#{field_type}_field" if respond_to?(:ruby2_keywords)
|
|
334
|
+
alias_method "refute_#{field_type}_field", "assert_no_#{field_type}_field"
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
##
|
|
338
|
+
# Assert that element matches xpath
|
|
339
|
+
#
|
|
340
|
+
# @!method assert_matches_xpath
|
|
341
|
+
# See {Capybara::Node::Matchers#matches_xpath?}
|
|
342
|
+
|
|
343
|
+
##
|
|
344
|
+
# Assert that element does not match xpath
|
|
345
|
+
#
|
|
346
|
+
# @!method refute_matches_xpath
|
|
347
|
+
# @!method assert_not_matches_xpath
|
|
348
|
+
# See {Capybara::Node::Matchers#not_matches_xpath?}
|
|
349
|
+
|
|
350
|
+
##
|
|
351
|
+
# Assert that element matches css
|
|
352
|
+
#
|
|
353
|
+
# @!method assert_matches_css
|
|
354
|
+
# See {Capybara::Node::Matchers#matches_css?}
|
|
355
|
+
|
|
356
|
+
##
|
|
357
|
+
# Assert that element matches css
|
|
358
|
+
#
|
|
359
|
+
# @!method refute_matches_css
|
|
360
|
+
# @!method assert_not_matches_css
|
|
361
|
+
# See {Capybara::Node::Matchers#not_matches_css?}
|
|
362
|
+
|
|
363
|
+
%w[xpath css].each do |selector_type|
|
|
364
|
+
define_method "assert_matches_#{selector_type}" do |*args, &optional_filter_block|
|
|
365
|
+
subject, args = determine_subject(args)
|
|
366
|
+
assert_matches_selector(subject, selector_type.to_sym, *args, &optional_filter_block)
|
|
367
|
+
end
|
|
368
|
+
ruby2_keywords "assert_matches_#{selector_type}" if respond_to?(:ruby2_keywords)
|
|
369
|
+
|
|
370
|
+
define_method "assert_not_matches_#{selector_type}" do |*args, &optional_filter_block|
|
|
371
|
+
subject, args = determine_subject(args)
|
|
372
|
+
assert_not_matches_selector(subject, selector_type.to_sym, *args, &optional_filter_block)
|
|
373
|
+
end
|
|
374
|
+
ruby2_keywords "assert_not_matches_#{selector_type}" if respond_to?(:ruby2_keywords)
|
|
375
|
+
alias_method "refute_matches_#{selector_type}", "assert_not_matches_#{selector_type}"
|
|
376
|
+
end
|
|
259
377
|
|
|
260
|
-
|
|
378
|
+
private
|
|
261
379
|
|
|
262
380
|
def determine_subject(args)
|
|
263
381
|
case args.first
|
|
264
382
|
when Capybara::Session, Capybara::Node::Base, Capybara::Node::Simple
|
|
265
|
-
args
|
|
383
|
+
[args.shift, args]
|
|
384
|
+
when ->(arg) { arg.respond_to?(:to_capybara_node) }
|
|
385
|
+
[args.shift.to_capybara_node, args]
|
|
266
386
|
else
|
|
267
|
-
[page,
|
|
387
|
+
[page, args]
|
|
268
388
|
end
|
|
269
389
|
end
|
|
270
390
|
|