capybara 2.7.0 → 3.35.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.yardopts +1 -0
- data/History.md +1147 -11
- data/License.txt +1 -1
- data/README.md +252 -131
- data/lib/capybara/config.rb +92 -0
- data/lib/capybara/cucumber.rb +3 -3
- data/lib/capybara/driver/base.rb +52 -21
- data/lib/capybara/driver/node.rb +48 -14
- data/lib/capybara/dsl.rb +16 -9
- data/lib/capybara/helpers.rb +72 -81
- data/lib/capybara/minitest/spec.rb +267 -0
- data/lib/capybara/minitest.rb +385 -0
- data/lib/capybara/node/actions.rb +337 -89
- data/lib/capybara/node/base.rb +50 -32
- data/lib/capybara/node/document.rb +19 -3
- data/lib/capybara/node/document_matchers.rb +22 -24
- data/lib/capybara/node/element.rb +388 -125
- data/lib/capybara/node/finders.rb +231 -121
- data/lib/capybara/node/matchers.rb +503 -217
- data/lib/capybara/node/simple.rb +64 -27
- data/lib/capybara/queries/ancestor_query.rb +27 -0
- data/lib/capybara/queries/base_query.rb +87 -11
- data/lib/capybara/queries/current_path_query.rb +24 -24
- data/lib/capybara/queries/match_query.rb +15 -10
- data/lib/capybara/queries/selector_query.rb +675 -81
- data/lib/capybara/queries/sibling_query.rb +26 -0
- data/lib/capybara/queries/style_query.rb +45 -0
- data/lib/capybara/queries/text_query.rb +88 -20
- data/lib/capybara/queries/title_query.rb +9 -11
- data/lib/capybara/rack_test/browser.rb +63 -39
- data/lib/capybara/rack_test/css_handlers.rb +6 -4
- data/lib/capybara/rack_test/driver.rb +26 -16
- data/lib/capybara/rack_test/errors.rb +6 -0
- data/lib/capybara/rack_test/form.rb +73 -58
- data/lib/capybara/rack_test/node.rb +187 -67
- data/lib/capybara/rails.rb +4 -8
- data/lib/capybara/registration_container.rb +44 -0
- data/lib/capybara/registrations/drivers.rb +42 -0
- data/lib/capybara/registrations/patches/puma_ssl.rb +29 -0
- data/lib/capybara/registrations/servers.rb +45 -0
- data/lib/capybara/result.rb +142 -14
- data/lib/capybara/rspec/features.rb +17 -42
- data/lib/capybara/rspec/matcher_proxies.rb +82 -0
- data/lib/capybara/rspec/matchers/base.rb +111 -0
- data/lib/capybara/rspec/matchers/become_closed.rb +33 -0
- data/lib/capybara/rspec/matchers/compound.rb +88 -0
- data/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
- data/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
- data/lib/capybara/rspec/matchers/have_current_path.rb +29 -0
- data/lib/capybara/rspec/matchers/have_selector.rb +77 -0
- data/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
- data/lib/capybara/rspec/matchers/have_text.rb +33 -0
- data/lib/capybara/rspec/matchers/have_title.rb +29 -0
- data/lib/capybara/rspec/matchers/match_selector.rb +27 -0
- data/lib/capybara/rspec/matchers/match_style.rb +43 -0
- data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
- data/lib/capybara/rspec/matchers.rb +143 -244
- data/lib/capybara/rspec.rb +10 -12
- data/lib/capybara/selector/builders/css_builder.rb +84 -0
- data/lib/capybara/selector/builders/xpath_builder.rb +71 -0
- data/lib/capybara/selector/css.rb +102 -0
- data/lib/capybara/selector/definition/button.rb +63 -0
- data/lib/capybara/selector/definition/checkbox.rb +26 -0
- data/lib/capybara/selector/definition/css.rb +10 -0
- data/lib/capybara/selector/definition/datalist_input.rb +35 -0
- data/lib/capybara/selector/definition/datalist_option.rb +25 -0
- data/lib/capybara/selector/definition/element.rb +28 -0
- data/lib/capybara/selector/definition/field.rb +40 -0
- data/lib/capybara/selector/definition/fieldset.rb +14 -0
- data/lib/capybara/selector/definition/file_field.rb +13 -0
- data/lib/capybara/selector/definition/fillable_field.rb +33 -0
- data/lib/capybara/selector/definition/frame.rb +17 -0
- data/lib/capybara/selector/definition/id.rb +6 -0
- data/lib/capybara/selector/definition/label.rb +62 -0
- data/lib/capybara/selector/definition/link.rb +54 -0
- data/lib/capybara/selector/definition/link_or_button.rb +16 -0
- data/lib/capybara/selector/definition/option.rb +27 -0
- data/lib/capybara/selector/definition/radio_button.rb +27 -0
- data/lib/capybara/selector/definition/select.rb +81 -0
- data/lib/capybara/selector/definition/table.rb +109 -0
- data/lib/capybara/selector/definition/table_row.rb +21 -0
- data/lib/capybara/selector/definition/xpath.rb +5 -0
- data/lib/capybara/selector/definition.rb +278 -0
- data/lib/capybara/selector/filter.rb +3 -46
- data/lib/capybara/selector/filter_set.rb +124 -0
- data/lib/capybara/selector/filters/base.rb +77 -0
- data/lib/capybara/selector/filters/expression_filter.rb +22 -0
- data/lib/capybara/selector/filters/locator_filter.rb +29 -0
- data/lib/capybara/selector/filters/node_filter.rb +31 -0
- data/lib/capybara/selector/regexp_disassembler.rb +214 -0
- data/lib/capybara/selector/selector.rb +155 -0
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/lib/capybara/selector.rb +232 -369
- data/lib/capybara/selenium/atoms/getAttribute.min.js +1 -0
- data/lib/capybara/selenium/atoms/isDisplayed.min.js +1 -0
- data/lib/capybara/selenium/atoms/src/getAttribute.js +161 -0
- data/lib/capybara/selenium/atoms/src/isDisplayed.js +454 -0
- data/lib/capybara/selenium/driver.rb +380 -142
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
- data/lib/capybara/selenium/driver_specializations/edge_driver.rb +124 -0
- data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +89 -0
- data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +26 -0
- data/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
- data/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
- data/lib/capybara/selenium/extensions/find.rb +110 -0
- data/lib/capybara/selenium/extensions/html5_drag.rb +228 -0
- data/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
- data/lib/capybara/selenium/extensions/scroll.rb +76 -0
- data/lib/capybara/selenium/logger_suppressor.rb +40 -0
- data/lib/capybara/selenium/node.rb +528 -97
- data/lib/capybara/selenium/nodes/chrome_node.rb +137 -0
- data/lib/capybara/selenium/nodes/edge_node.rb +104 -0
- data/lib/capybara/selenium/nodes/firefox_node.rb +136 -0
- data/lib/capybara/selenium/nodes/ie_node.rb +22 -0
- data/lib/capybara/selenium/nodes/safari_node.rb +118 -0
- data/lib/capybara/selenium/patches/action_pauser.rb +26 -0
- data/lib/capybara/selenium/patches/atoms.rb +18 -0
- data/lib/capybara/selenium/patches/is_displayed.rb +16 -0
- data/lib/capybara/selenium/patches/logs.rb +45 -0
- data/lib/capybara/selenium/patches/pause_duration_fix.rb +9 -0
- data/lib/capybara/selenium/patches/persistent_client.rb +20 -0
- data/lib/capybara/server/animation_disabler.rb +63 -0
- data/lib/capybara/server/checker.rb +44 -0
- data/lib/capybara/server/middleware.rb +71 -0
- data/lib/capybara/server.rb +74 -71
- data/lib/capybara/session/config.rb +126 -0
- data/lib/capybara/session/matchers.rb +44 -27
- data/lib/capybara/session.rb +500 -297
- data/lib/capybara/spec/fixtures/no_extension +1 -0
- data/lib/capybara/spec/public/jquery.js +5 -5
- data/lib/capybara/spec/public/offset.js +6 -0
- data/lib/capybara/spec/public/test.js +168 -14
- data/lib/capybara/spec/session/accept_alert_spec.rb +37 -14
- data/lib/capybara/spec/session/accept_confirm_spec.rb +7 -6
- data/lib/capybara/spec/session/accept_prompt_spec.rb +38 -10
- data/lib/capybara/spec/session/all_spec.rb +179 -59
- data/lib/capybara/spec/session/ancestor_spec.rb +88 -0
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +140 -0
- data/lib/capybara/spec/session/assert_current_path_spec.rb +75 -0
- data/lib/capybara/spec/session/assert_selector_spec.rb +143 -0
- data/lib/capybara/spec/session/assert_style_spec.rb +26 -0
- data/lib/capybara/spec/session/assert_text_spec.rb +258 -0
- data/lib/capybara/spec/session/assert_title_spec.rb +93 -0
- data/lib/capybara/spec/session/attach_file_spec.rb +154 -48
- data/lib/capybara/spec/session/body_spec.rb +12 -13
- data/lib/capybara/spec/session/check_spec.rb +168 -41
- data/lib/capybara/spec/session/choose_spec.rb +75 -23
- data/lib/capybara/spec/session/click_button_spec.rb +243 -175
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +57 -32
- data/lib/capybara/spec/session/click_link_spec.rb +100 -53
- data/lib/capybara/spec/session/current_scope_spec.rb +11 -10
- data/lib/capybara/spec/session/current_url_spec.rb +61 -35
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +7 -7
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +5 -4
- data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb} +13 -6
- data/lib/capybara/spec/session/element/match_css_spec.rb +21 -7
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +9 -7
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +91 -34
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +23 -0
- data/lib/capybara/spec/session/evaluate_script_spec.rb +45 -3
- data/lib/capybara/spec/session/execute_script_spec.rb +24 -4
- data/lib/capybara/spec/session/fill_in_spec.rb +166 -64
- data/lib/capybara/spec/session/find_button_spec.rb +37 -18
- data/lib/capybara/spec/session/find_by_id_spec.rb +10 -9
- data/lib/capybara/spec/session/find_field_spec.rb +57 -34
- data/lib/capybara/spec/session/find_link_spec.rb +47 -10
- data/lib/capybara/spec/session/find_spec.rb +290 -144
- data/lib/capybara/spec/session/first_spec.rb +91 -48
- data/lib/capybara/spec/session/frame/frame_title_spec.rb +23 -0
- data/lib/capybara/spec/session/frame/frame_url_spec.rb +23 -0
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +116 -0
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +112 -0
- data/lib/capybara/spec/session/go_back_spec.rb +3 -2
- data/lib/capybara/spec/session/go_forward_spec.rb +3 -2
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +69 -0
- data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
- data/lib/capybara/spec/session/has_any_selectors_spec.rb +25 -0
- data/lib/capybara/spec/session/has_button_spec.rb +76 -19
- data/lib/capybara/spec/session/has_css_spec.rb +277 -131
- data/lib/capybara/spec/session/has_current_path_spec.rb +98 -26
- data/lib/capybara/spec/session/has_field_spec.rb +177 -107
- data/lib/capybara/spec/session/has_link_spec.rb +13 -12
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +78 -0
- data/lib/capybara/spec/session/has_select_spec.rb +191 -95
- data/lib/capybara/spec/session/has_selector_spec.rb +128 -64
- data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
- data/lib/capybara/spec/session/has_table_spec.rb +172 -5
- data/lib/capybara/spec/session/has_text_spec.rb +126 -60
- data/lib/capybara/spec/session/has_title_spec.rb +35 -12
- data/lib/capybara/spec/session/has_xpath_spec.rb +74 -53
- data/lib/capybara/spec/session/{headers.rb → headers_spec.rb} +3 -2
- data/lib/capybara/spec/session/html_spec.rb +14 -6
- data/lib/capybara/spec/session/matches_style_spec.rb +35 -0
- data/lib/capybara/spec/session/node_spec.rb +1028 -131
- data/lib/capybara/spec/session/node_wrapper_spec.rb +39 -0
- data/lib/capybara/spec/session/refresh_spec.rb +34 -0
- data/lib/capybara/spec/session/reset_session_spec.rb +75 -34
- data/lib/capybara/spec/session/{response_code.rb → response_code_spec.rb} +2 -1
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +3 -2
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +11 -15
- data/lib/capybara/spec/session/save_page_spec.rb +42 -55
- data/lib/capybara/spec/session/save_screenshot_spec.rb +16 -14
- data/lib/capybara/spec/session/screenshot_spec.rb +2 -2
- data/lib/capybara/spec/session/scroll_spec.rb +117 -0
- data/lib/capybara/spec/session/select_spec.rb +112 -85
- data/lib/capybara/spec/session/selectors_spec.rb +71 -8
- data/lib/capybara/spec/session/sibling_spec.rb +52 -0
- data/lib/capybara/spec/session/text_spec.rb +38 -23
- data/lib/capybara/spec/session/title_spec.rb +17 -5
- data/lib/capybara/spec/session/uncheck_spec.rb +71 -12
- data/lib/capybara/spec/session/unselect_spec.rb +44 -43
- data/lib/capybara/spec/session/visit_spec.rb +99 -32
- data/lib/capybara/spec/session/window/become_closed_spec.rb +33 -29
- data/lib/capybara/spec/session/window/current_window_spec.rb +5 -3
- data/lib/capybara/spec/session/window/open_new_window_spec.rb +5 -3
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +39 -30
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +17 -10
- data/lib/capybara/spec/session/window/window_spec.rb +121 -73
- data/lib/capybara/spec/session/window/windows_spec.rb +12 -10
- data/lib/capybara/spec/session/window/within_window_spec.rb +52 -82
- data/lib/capybara/spec/session/within_spec.rb +76 -43
- data/lib/capybara/spec/spec_helper.rb +67 -33
- data/lib/capybara/spec/test_app.rb +85 -36
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/buttons.erb +1 -1
- data/lib/capybara/spec/views/fieldsets.erb +1 -1
- data/lib/capybara/spec/views/form.erb +227 -20
- data/lib/capybara/spec/views/frame_child.erb +10 -2
- data/lib/capybara/spec/views/frame_one.erb +2 -1
- data/lib/capybara/spec/views/frame_parent.erb +2 -2
- data/lib/capybara/spec/views/frame_two.erb +1 -1
- data/lib/capybara/spec/views/header_links.erb +1 -1
- data/lib/capybara/spec/views/host_links.erb +1 -1
- data/lib/capybara/spec/views/initial_alert.erb +10 -0
- data/lib/capybara/spec/views/obscured.erb +47 -0
- data/lib/capybara/spec/views/offset.erb +32 -0
- data/lib/capybara/spec/views/path.erb +1 -1
- data/lib/capybara/spec/views/popup_one.erb +1 -1
- data/lib/capybara/spec/views/popup_two.erb +1 -1
- data/lib/capybara/spec/views/postback.erb +1 -1
- data/lib/capybara/spec/views/react.erb +45 -0
- data/lib/capybara/spec/views/scroll.erb +20 -0
- data/lib/capybara/spec/views/spatial.erb +31 -0
- data/lib/capybara/spec/views/tables.erb +69 -2
- data/lib/capybara/spec/views/with_animation.erb +82 -0
- data/lib/capybara/spec/views/with_base_tag.erb +1 -1
- data/lib/capybara/spec/views/with_count.erb +1 -1
- data/lib/capybara/spec/views/with_dragula.erb +24 -0
- data/lib/capybara/spec/views/with_fixed_header_footer.erb +17 -0
- data/lib/capybara/spec/views/with_hover.erb +7 -1
- data/lib/capybara/spec/views/with_hover1.erb +10 -0
- data/lib/capybara/spec/views/with_html.erb +100 -10
- data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
- data/lib/capybara/spec/views/with_html_entities.erb +1 -1
- data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
- data/lib/capybara/spec/views/with_js.erb +49 -3
- data/lib/capybara/spec/views/with_jstree.erb +26 -0
- data/lib/capybara/spec/views/with_namespace.erb +20 -0
- data/lib/capybara/spec/views/with_scope.erb +1 -1
- data/lib/capybara/spec/views/with_scope_other.erb +6 -0
- data/lib/capybara/spec/views/with_simple_html.erb +1 -1
- data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
- data/lib/capybara/spec/views/with_title.erb +1 -1
- data/lib/capybara/spec/views/with_unload_alert.erb +3 -1
- data/lib/capybara/spec/views/with_windows.erb +7 -1
- data/lib/capybara/spec/views/within_frames.erb +6 -3
- data/lib/capybara/version.rb +2 -1
- data/lib/capybara/window.rb +39 -21
- data/lib/capybara.rb +208 -186
- data/spec/basic_node_spec.rb +52 -39
- data/spec/capybara_spec.rb +72 -50
- data/spec/css_builder_spec.rb +101 -0
- data/spec/css_splitter_spec.rb +38 -0
- data/spec/dsl_spec.rb +81 -61
- data/spec/filter_set_spec.rb +46 -0
- data/spec/fixtures/capybara.csv +1 -0
- data/spec/fixtures/certificate.pem +25 -0
- data/spec/fixtures/key.pem +27 -0
- data/spec/fixtures/selenium_driver_rspec_failure.rb +7 -3
- data/spec/fixtures/selenium_driver_rspec_success.rb +7 -3
- data/spec/minitest_spec.rb +164 -0
- data/spec/minitest_spec_spec.rb +162 -0
- data/spec/per_session_config_spec.rb +68 -0
- data/spec/rack_test_spec.rb +189 -96
- data/spec/regexp_dissassembler_spec.rb +250 -0
- data/spec/result_spec.rb +143 -13
- data/spec/rspec/features_spec.rb +38 -32
- data/spec/rspec/scenarios_spec.rb +9 -7
- data/spec/rspec/shared_spec_matchers.rb +959 -0
- data/spec/rspec/views_spec.rb +9 -3
- data/spec/rspec_matchers_spec.rb +62 -0
- data/spec/rspec_spec.rb +127 -30
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +458 -37
- data/spec/selenium_spec_chrome.rb +196 -9
- data/spec/selenium_spec_chrome_remote.rb +100 -0
- data/spec/selenium_spec_edge.rb +47 -0
- data/spec/selenium_spec_firefox.rb +210 -0
- data/spec/selenium_spec_firefox_remote.rb +80 -0
- data/spec/selenium_spec_ie.rb +150 -0
- data/spec/selenium_spec_safari.rb +148 -0
- data/spec/server_spec.rb +200 -101
- data/spec/session_spec.rb +91 -0
- data/spec/shared_selenium_node.rb +83 -0
- data/spec/shared_selenium_session.rb +558 -0
- data/spec/spec_helper.rb +94 -2
- data/spec/xpath_builder_spec.rb +93 -0
- metadata +420 -60
- data/lib/capybara/query.rb +0 -7
- data/lib/capybara/spec/session/assert_current_path.rb +0 -60
- data/lib/capybara/spec/session/assert_selector.rb +0 -148
- data/lib/capybara/spec/session/assert_text.rb +0 -196
- data/lib/capybara/spec/session/assert_title.rb +0 -70
- data/lib/capybara/spec/session/source_spec.rb +0 -0
- data/lib/capybara/spec/session/within_frame_spec.rb +0 -53
- data/spec/rspec/matchers_spec.rb +0 -827
- data/spec/selenium_spec.rb +0 -151
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'capybara/rspec/matchers/base'
|
|
4
|
+
|
|
5
|
+
module Capybara
|
|
6
|
+
module RSpecMatchers
|
|
7
|
+
module Matchers
|
|
8
|
+
class HaveSibling < CountableWrappedElementMatcher
|
|
9
|
+
def element_matches?(el)
|
|
10
|
+
el.assert_sibling(*@args, **session_query_options, &@filter_block)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def element_does_not_match?(el)
|
|
14
|
+
el.assert_no_sibling(*@args, **session_query_options, &@filter_block)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def description
|
|
18
|
+
"have sibling #{query.description}"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def query
|
|
22
|
+
@query ||= Capybara::Queries::SiblingQuery.new(*session_query_args, **session_query_options, &@filter_block)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'capybara/rspec/matchers/base'
|
|
4
|
+
|
|
5
|
+
module Capybara
|
|
6
|
+
module RSpecMatchers
|
|
7
|
+
module Matchers
|
|
8
|
+
class HaveText < CountableWrappedElementMatcher
|
|
9
|
+
def element_matches?(el)
|
|
10
|
+
el.assert_text(*@args, **@kw_args)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def element_does_not_match?(el)
|
|
14
|
+
el.assert_no_text(*@args, **@kw_args)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def description
|
|
18
|
+
"have text #{format(text)}"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def format(content)
|
|
22
|
+
content.inspect
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def text
|
|
28
|
+
@args[0].is_a?(Symbol) ? @args[1] : @args[0]
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'capybara/rspec/matchers/base'
|
|
4
|
+
|
|
5
|
+
module Capybara
|
|
6
|
+
module RSpecMatchers
|
|
7
|
+
module Matchers
|
|
8
|
+
class HaveTitle < WrappedElementMatcher
|
|
9
|
+
def element_matches?(el)
|
|
10
|
+
el.assert_title(*@args, **@kw_args)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def element_does_not_match?(el)
|
|
14
|
+
el.assert_no_title(*@args, **@kw_args)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def description
|
|
18
|
+
"have title #{title.inspect}"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
def title
|
|
24
|
+
@args.first
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'capybara/rspec/matchers/have_selector'
|
|
4
|
+
|
|
5
|
+
module Capybara
|
|
6
|
+
module RSpecMatchers
|
|
7
|
+
module Matchers
|
|
8
|
+
class MatchSelector < HaveSelector
|
|
9
|
+
def element_matches?(el)
|
|
10
|
+
el.assert_matches_selector(*@args, **session_query_options, &@filter_block)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def element_does_not_match?(el)
|
|
14
|
+
el.assert_not_matches_selector(*@args, **session_query_options, &@filter_block)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def description
|
|
18
|
+
"match #{query.description}"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def query
|
|
22
|
+
@query ||= Capybara::Queries::MatchQuery.new(*session_query_args, **session_query_options, &@filter_block)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'capybara/rspec/matchers/base'
|
|
4
|
+
|
|
5
|
+
module Capybara
|
|
6
|
+
module RSpecMatchers
|
|
7
|
+
module Matchers
|
|
8
|
+
class MatchStyle < WrappedElementMatcher
|
|
9
|
+
def initialize(styles = nil, **kw_args, &filter_block)
|
|
10
|
+
styles, kw_args = kw_args, {} if styles.nil?
|
|
11
|
+
super(styles, **kw_args, &filter_block)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def element_matches?(el)
|
|
15
|
+
el.assert_matches_style(*@args, **@kw_args)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def does_not_match?(_actual)
|
|
19
|
+
raise ArgumentError, 'The match_style matcher does not support use with not_to/should_not'
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def description
|
|
23
|
+
'match style'
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
module Capybara
|
|
31
|
+
module RSpecMatchers
|
|
32
|
+
module Matchers
|
|
33
|
+
##
|
|
34
|
+
# @deprecated
|
|
35
|
+
class HaveStyle < MatchStyle
|
|
36
|
+
def initialize(*args, **kw_args, &filter_block)
|
|
37
|
+
warn 'HaveStyle matcher is deprecated, please use the MatchStyle matcher instead'
|
|
38
|
+
super
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Capybara
|
|
4
|
+
module RSpecMatchers
|
|
5
|
+
module SpatialSugar
|
|
6
|
+
def above(el)
|
|
7
|
+
options[:above] = el
|
|
8
|
+
self
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def below(el)
|
|
12
|
+
options[:below] = el
|
|
13
|
+
self
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def left_of(el)
|
|
17
|
+
options[:left_of] = el
|
|
18
|
+
self
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def right_of(el)
|
|
22
|
+
options[:right_of] = el
|
|
23
|
+
self
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def near(el)
|
|
27
|
+
options[:near] = el
|
|
28
|
+
self
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def options
|
|
34
|
+
# (@args.last.is_a?(Hash) ? @args : @args.push({})).last
|
|
35
|
+
@kw_args
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -1,303 +1,202 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'capybara/rspec/matchers/have_selector'
|
|
4
|
+
require 'capybara/rspec/matchers/have_ancestor'
|
|
5
|
+
require 'capybara/rspec/matchers/have_sibling'
|
|
6
|
+
require 'capybara/rspec/matchers/match_selector'
|
|
7
|
+
require 'capybara/rspec/matchers/have_current_path'
|
|
8
|
+
require 'capybara/rspec/matchers/match_style'
|
|
9
|
+
require 'capybara/rspec/matchers/have_text'
|
|
10
|
+
require 'capybara/rspec/matchers/have_title'
|
|
11
|
+
require 'capybara/rspec/matchers/become_closed'
|
|
12
|
+
|
|
2
13
|
module Capybara
|
|
3
14
|
module RSpecMatchers
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
actual
|
|
10
|
-
else
|
|
11
|
-
Capybara.string(actual.to_s)
|
|
12
|
-
end
|
|
13
|
-
end
|
|
15
|
+
# RSpec matcher for whether the element(s) matching a given selector exist.
|
|
16
|
+
#
|
|
17
|
+
# @see Capybara::Node::Matchers#assert_selector
|
|
18
|
+
def have_selector(*args, **kw_args, &optional_filter_block)
|
|
19
|
+
Matchers::HaveSelector.new(*args, **kw_args, &optional_filter_block)
|
|
14
20
|
end
|
|
15
21
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def matches?(actual)
|
|
24
|
-
wrap(actual).assert_selector(*@args)
|
|
25
|
-
rescue Capybara::ExpectationNotMet => e
|
|
26
|
-
@failure_message = e.message
|
|
27
|
-
return false
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def does_not_match?(actual)
|
|
31
|
-
wrap(actual).assert_no_selector(*@args)
|
|
32
|
-
rescue Capybara::ExpectationNotMet => e
|
|
33
|
-
@failure_message_when_negated = e.message
|
|
34
|
-
return false
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def description
|
|
38
|
-
"have #{query.description}"
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def query
|
|
42
|
-
@query ||= Capybara::Queries::SelectorQuery.new(*@args)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# RSpec 2 compatibility:
|
|
46
|
-
alias_method :failure_message_for_should, :failure_message
|
|
47
|
-
alias_method :failure_message_for_should_not, :failure_message_when_negated
|
|
22
|
+
# RSpec matcher for whether the element(s) matching a group of selectors exist.
|
|
23
|
+
#
|
|
24
|
+
# @see Capybara::Node::Matchers#assert_all_of_selectors
|
|
25
|
+
def have_all_of_selectors(*args, **kw_args, &optional_filter_block)
|
|
26
|
+
Matchers::HaveAllSelectors.new(*args, **kw_args, &optional_filter_block)
|
|
48
27
|
end
|
|
49
28
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
def initialize(*args)
|
|
56
|
-
@args = args.dup
|
|
57
|
-
|
|
58
|
-
# are set just for backwards compatability
|
|
59
|
-
@type = args.shift if args.first.is_a?(Symbol)
|
|
60
|
-
@content = args.shift
|
|
61
|
-
@options = (args.first.is_a?(Hash))? args.first : {}
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def matches?(actual)
|
|
65
|
-
wrap(actual).assert_text(*@args)
|
|
66
|
-
rescue Capybara::ExpectationNotMet => e
|
|
67
|
-
@failure_message = e.message
|
|
68
|
-
return false
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def does_not_match?(actual)
|
|
72
|
-
wrap(actual).assert_no_text(*@args)
|
|
73
|
-
rescue Capybara::ExpectationNotMet => e
|
|
74
|
-
@failure_message_when_negated = e.message
|
|
75
|
-
return false
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def description
|
|
79
|
-
"text #{format(content)}"
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
def format(content)
|
|
83
|
-
content = Capybara::Helpers.normalize_whitespace(content) unless content.is_a? Regexp
|
|
84
|
-
content.inspect
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
# RSpec 2 compatibility:
|
|
88
|
-
alias_method :failure_message_for_should, :failure_message
|
|
89
|
-
alias_method :failure_message_for_should_not, :failure_message_when_negated
|
|
29
|
+
# RSpec matcher for whether no element(s) matching a group of selectors exist.
|
|
30
|
+
#
|
|
31
|
+
# @see Capybara::Node::Matchers#assert_none_of_selectors
|
|
32
|
+
def have_none_of_selectors(*args, **kw_args, &optional_filter_block)
|
|
33
|
+
Matchers::HaveNoSelectors.new(*args, **kw_args, &optional_filter_block)
|
|
90
34
|
end
|
|
91
35
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
def initialize(*args)
|
|
98
|
-
@args = args
|
|
99
|
-
|
|
100
|
-
# are set just for backwards compatability
|
|
101
|
-
@title = args.first
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
def matches?(actual)
|
|
105
|
-
wrap(actual).assert_title(*@args)
|
|
106
|
-
rescue Capybara::ExpectationNotMet => e
|
|
107
|
-
@failure_message = e.message
|
|
108
|
-
return false
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
def does_not_match?(actual)
|
|
112
|
-
wrap(actual).assert_no_title(*@args)
|
|
113
|
-
rescue Capybara::ExpectationNotMet => e
|
|
114
|
-
@failure_message_when_negated = e.message
|
|
115
|
-
return false
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
def description
|
|
119
|
-
"have title #{title.inspect}"
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
# RSpec 2 compatibility:
|
|
123
|
-
alias_method :failure_message_for_should, :failure_message
|
|
124
|
-
alias_method :failure_message_for_should_not, :failure_message_when_negated
|
|
36
|
+
# RSpec matcher for whether the element(s) matching any of a group of selectors exist.
|
|
37
|
+
#
|
|
38
|
+
# @see Capybara::Node::Matchers#assert_any_of_selectors
|
|
39
|
+
def have_any_of_selectors(*args, **kw_args, &optional_filter_block)
|
|
40
|
+
Matchers::HaveAnySelectors.new(*args, **kw_args, &optional_filter_block)
|
|
125
41
|
end
|
|
126
42
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
def initialize(*args)
|
|
133
|
-
@args = args
|
|
134
|
-
|
|
135
|
-
# are set just for backwards compatability
|
|
136
|
-
@current_path = args.first
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
def matches?(actual)
|
|
140
|
-
wrap(actual).assert_current_path(*@args)
|
|
141
|
-
rescue Capybara::ExpectationNotMet => e
|
|
142
|
-
@failure_message = e.message
|
|
143
|
-
return false
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
def does_not_match?(actual)
|
|
147
|
-
wrap(actual).assert_no_current_path(*@args)
|
|
148
|
-
rescue Capybara::ExpectationNotMet => e
|
|
149
|
-
@failure_message_when_negated = e.message
|
|
150
|
-
return false
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
def description
|
|
154
|
-
"have current path #{current_path.inspect}"
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
# RSpec 2 compatibility:
|
|
158
|
-
alias_method :failure_message_for_should, :failure_message
|
|
159
|
-
alias_method :failure_message_for_should_not, :failure_message_when_negated
|
|
43
|
+
# RSpec matcher for whether the current element matches a given selector.
|
|
44
|
+
#
|
|
45
|
+
# @see Capybara::Node::Matchers#assert_matches_selector
|
|
46
|
+
def match_selector(*args, **kw_args, &optional_filter_block)
|
|
47
|
+
Matchers::MatchSelector.new(*args, **kw_args, &optional_filter_block)
|
|
160
48
|
end
|
|
161
49
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
50
|
+
%i[css xpath].each do |selector|
|
|
51
|
+
define_method "have_#{selector}" do |expr, **options, &optional_filter_block|
|
|
52
|
+
Matchers::HaveSelector.new(selector, expr, **options, &optional_filter_block)
|
|
165
53
|
end
|
|
166
54
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
start_time = Capybara::Helpers.monotonic_time
|
|
170
|
-
while window.exists?
|
|
171
|
-
return false if (Capybara::Helpers.monotonic_time - start_time) > @wait_time
|
|
172
|
-
sleep 0.05
|
|
173
|
-
end
|
|
174
|
-
true
|
|
55
|
+
define_method "match_#{selector}" do |expr, **options, &optional_filter_block|
|
|
56
|
+
Matchers::MatchSelector.new(selector, expr, **options, &optional_filter_block)
|
|
175
57
|
end
|
|
176
|
-
|
|
177
|
-
def failure_message
|
|
178
|
-
"expected #{@window.inspect} to become closed after #{@wait_time} seconds"
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
def failure_message_when_negated
|
|
182
|
-
"expected #{@window.inspect} not to become closed after #{@wait_time} seconds"
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
# RSpec 2 compatibility:
|
|
186
|
-
alias_method :failure_message_for_should, :failure_message
|
|
187
|
-
alias_method :failure_message_for_should_not, :failure_message_when_negated
|
|
188
58
|
end
|
|
189
59
|
|
|
190
|
-
|
|
191
|
-
|
|
60
|
+
# @!method have_xpath(xpath, **options, &optional_filter_block)
|
|
61
|
+
# RSpec matcher for whether elements(s) matching a given xpath selector exist.
|
|
62
|
+
#
|
|
63
|
+
# @see Capybara::Node::Matchers#has_xpath?
|
|
192
64
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
65
|
+
# @!method have_css(css, **options, &optional_filter_block)
|
|
66
|
+
# RSpec matcher for whether elements(s) matching a given css selector exist
|
|
67
|
+
#
|
|
68
|
+
# @see Capybara::Node::Matchers#has_css?
|
|
196
69
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
return false
|
|
202
|
-
end
|
|
70
|
+
# @!method match_xpath(xpath, **options, &optional_filter_block)
|
|
71
|
+
# RSpec matcher for whether the current element matches a given xpath selector.
|
|
72
|
+
#
|
|
73
|
+
# @see Capybara::Node::Matchers#matches_xpath?
|
|
203
74
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
return false
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
def description
|
|
212
|
-
"match #{query.description}"
|
|
213
|
-
end
|
|
75
|
+
# @!method match_css(css, **options, &optional_filter_block)
|
|
76
|
+
# RSpec matcher for whether the current element matches a given css selector.
|
|
77
|
+
#
|
|
78
|
+
# @see Capybara::Node::Matchers#matches_css?
|
|
214
79
|
|
|
215
|
-
|
|
216
|
-
|
|
80
|
+
%i[link button field select table].each do |selector|
|
|
81
|
+
define_method "have_#{selector}" do |locator = nil, **options, &optional_filter_block|
|
|
82
|
+
Matchers::HaveSelector.new(selector, locator, **options, &optional_filter_block)
|
|
217
83
|
end
|
|
218
|
-
|
|
219
|
-
# RSpec 2 compatibility:
|
|
220
|
-
alias_method :failure_message_for_should, :failure_message
|
|
221
|
-
alias_method :failure_message_for_should_not, :failure_message_when_negated
|
|
222
84
|
end
|
|
223
85
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
86
|
+
# @!method have_link(locator = nil, **options, &optional_filter_block)
|
|
87
|
+
# RSpec matcher for links.
|
|
88
|
+
#
|
|
89
|
+
# @see Capybara::Node::Matchers#has_link?
|
|
227
90
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
#
|
|
232
|
-
# expect(page).not_to match_selector, so not sure we really need to support not_match_selector for prior to RSpec 3.1
|
|
233
|
-
::RSpec::Matchers.define_negated_matcher :not_match_selector, :match_selector if defined?(::RSpec::Expectations::Version) && (Gem::Version.new(RSpec::Expectations::Version::STRING) >= Gem::Version.new('3.1'))
|
|
91
|
+
# @!method have_button(locator = nil, **options, &optional_filter_block)
|
|
92
|
+
# RSpec matcher for buttons.
|
|
93
|
+
#
|
|
94
|
+
# @see Capybara::Node::Matchers#has_button?
|
|
234
95
|
|
|
96
|
+
# @!method have_field(locator = nil, **options, &optional_filter_block)
|
|
97
|
+
# RSpec matcher for form fields.
|
|
98
|
+
#
|
|
99
|
+
# @see Capybara::Node::Matchers#has_field?
|
|
235
100
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
101
|
+
# @!method have_select(locator = nil, **options, &optional_filter_block)
|
|
102
|
+
# RSpec matcher for select elements.
|
|
103
|
+
#
|
|
104
|
+
# @see Capybara::Node::Matchers#has_select?
|
|
239
105
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
106
|
+
# @!method have_table(locator = nil, **options, &optional_filter_block)
|
|
107
|
+
# RSpec matcher for table elements.
|
|
108
|
+
#
|
|
109
|
+
# @see Capybara::Node::Matchers#has_table?
|
|
243
110
|
|
|
244
|
-
|
|
245
|
-
|
|
111
|
+
%i[checked unchecked].each do |state|
|
|
112
|
+
define_method "have_#{state}_field" do |locator = nil, **options, &optional_filter_block|
|
|
113
|
+
Matchers::HaveSelector.new(:field, locator, **options.merge(state => true), &optional_filter_block)
|
|
114
|
+
end
|
|
246
115
|
end
|
|
247
116
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
117
|
+
# @!method have_checked_field(locator = nil, **options, &optional_filter_block)
|
|
118
|
+
# RSpec matcher for checked fields.
|
|
119
|
+
#
|
|
120
|
+
# @see Capybara::Node::Matchers#has_checked_field?
|
|
251
121
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
122
|
+
# @!method have_unchecked_field(locator = nil, **options, &optional_filter_block)
|
|
123
|
+
# RSpec matcher for unchecked fields.
|
|
124
|
+
#
|
|
125
|
+
# @see Capybara::Node::Matchers#has_unchecked_field?
|
|
256
126
|
|
|
257
|
-
|
|
258
|
-
|
|
127
|
+
# RSpec matcher for text content.
|
|
128
|
+
#
|
|
129
|
+
# @see Capybara::Node::Matchers#assert_text
|
|
130
|
+
def have_text(text_or_type, *args, **options)
|
|
131
|
+
Matchers::HaveText.new(text_or_type, *args, **options)
|
|
259
132
|
end
|
|
133
|
+
alias_method :have_content, :have_text
|
|
260
134
|
|
|
261
|
-
def
|
|
262
|
-
|
|
135
|
+
def have_title(title, **options)
|
|
136
|
+
Matchers::HaveTitle.new(title, **options)
|
|
263
137
|
end
|
|
264
138
|
|
|
265
|
-
|
|
266
|
-
|
|
139
|
+
# RSpec matcher for the current path.
|
|
140
|
+
#
|
|
141
|
+
# @see Capybara::SessionMatchers#assert_current_path
|
|
142
|
+
def have_current_path(path, **options, &optional_filter_block)
|
|
143
|
+
Matchers::HaveCurrentPath.new(path, **options, &optional_filter_block)
|
|
267
144
|
end
|
|
268
145
|
|
|
269
|
-
|
|
270
|
-
|
|
146
|
+
# RSpec matcher for element style.
|
|
147
|
+
#
|
|
148
|
+
# @see Capybara::Node::Matchers#matches_style?
|
|
149
|
+
def match_style(styles = nil, **options)
|
|
150
|
+
styles, options = options, {} if styles.nil?
|
|
151
|
+
Matchers::MatchStyle.new(styles, **options)
|
|
271
152
|
end
|
|
272
153
|
|
|
273
|
-
|
|
274
|
-
|
|
154
|
+
##
|
|
155
|
+
# @deprecated
|
|
156
|
+
#
|
|
157
|
+
def have_style(styles = nil, **options)
|
|
158
|
+
Capybara::Helpers.warn "DEPRECATED: have_style is deprecated, please use match_style : #{Capybara::Helpers.filter_backtrace(caller)}"
|
|
159
|
+
match_style(styles, **options)
|
|
275
160
|
end
|
|
276
161
|
|
|
277
|
-
|
|
278
|
-
|
|
162
|
+
%w[selector css xpath text title current_path link button
|
|
163
|
+
field checked_field unchecked_field select table
|
|
164
|
+
sibling ancestor].each do |matcher_type|
|
|
165
|
+
define_method "have_no_#{matcher_type}" do |*args, **kw_args, &optional_filter_block|
|
|
166
|
+
Matchers::NegatedMatcher.new(send("have_#{matcher_type}", *args, **kw_args, &optional_filter_block))
|
|
167
|
+
end
|
|
279
168
|
end
|
|
169
|
+
alias_method :have_no_content, :have_no_text
|
|
280
170
|
|
|
281
|
-
|
|
282
|
-
|
|
171
|
+
%w[selector css xpath].each do |matcher_type|
|
|
172
|
+
define_method "not_match_#{matcher_type}" do |*args, **kw_args, &optional_filter_block|
|
|
173
|
+
Matchers::NegatedMatcher.new(send("match_#{matcher_type}", *args, **kw_args, &optional_filter_block))
|
|
174
|
+
end
|
|
283
175
|
end
|
|
284
176
|
|
|
285
|
-
|
|
286
|
-
|
|
177
|
+
# RSpec matcher for whether sibling element(s) matching a given selector exist.
|
|
178
|
+
#
|
|
179
|
+
# @see Capybara::Node::Matchers#assert_sibling
|
|
180
|
+
def have_sibling(*args, **kw_args, &optional_filter_block)
|
|
181
|
+
Matchers::HaveSibling.new(*args, **kw_args, &optional_filter_block)
|
|
287
182
|
end
|
|
288
183
|
|
|
289
|
-
|
|
290
|
-
|
|
184
|
+
# RSpec matcher for whether ancestor element(s) matching a given selector exist.
|
|
185
|
+
#
|
|
186
|
+
# @see Capybara::Node::Matchers#assert_ancestor
|
|
187
|
+
def have_ancestor(*args, **kw_args, &optional_filter_block)
|
|
188
|
+
Matchers::HaveAncestor.new(*args, **kw_args, &optional_filter_block)
|
|
291
189
|
end
|
|
292
190
|
|
|
293
191
|
##
|
|
294
192
|
# Wait for window to become closed.
|
|
193
|
+
#
|
|
295
194
|
# @example
|
|
296
195
|
# expect(window).to become_closed(wait: 0.8)
|
|
297
|
-
#
|
|
298
|
-
# @option options [Numeric] :wait
|
|
299
|
-
def become_closed(options
|
|
300
|
-
BecomeClosed.new(options)
|
|
196
|
+
#
|
|
197
|
+
# @option options [Numeric] :wait Maximum wait time. Defaults to {Capybara.configure default_max_wait_time}
|
|
198
|
+
def become_closed(**options)
|
|
199
|
+
Matchers::BecomeClosed.new(options)
|
|
301
200
|
end
|
|
302
201
|
end
|
|
303
202
|
end
|