mega-max-rb 0.0.1
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 +7 -0
- data/capybara-3.40.0/History.md +2043 -0
- data/capybara-3.40.0/License.txt +22 -0
- data/capybara-3.40.0/README.md +1264 -0
- data/capybara-3.40.0/lib/capybara/config.rb +104 -0
- data/capybara-3.40.0/lib/capybara/cucumber.rb +27 -0
- data/capybara-3.40.0/lib/capybara/driver/base.rb +178 -0
- data/capybara-3.40.0/lib/capybara/driver/node.rb +143 -0
- data/capybara-3.40.0/lib/capybara/dsl.rb +59 -0
- data/capybara-3.40.0/lib/capybara/helpers.rb +127 -0
- data/capybara-3.40.0/lib/capybara/minitest/spec.rb +279 -0
- data/capybara-3.40.0/lib/capybara/minitest.rb +398 -0
- data/capybara-3.40.0/lib/capybara/node/actions.rb +420 -0
- data/capybara-3.40.0/lib/capybara/node/base.rb +144 -0
- data/capybara-3.40.0/lib/capybara/node/document.rb +48 -0
- data/capybara-3.40.0/lib/capybara/node/document_matchers.rb +67 -0
- data/capybara-3.40.0/lib/capybara/node/element.rb +613 -0
- data/capybara-3.40.0/lib/capybara/node/finders.rb +335 -0
- data/capybara-3.40.0/lib/capybara/node/matchers.rb +908 -0
- data/capybara-3.40.0/lib/capybara/node/simple.rb +216 -0
- data/capybara-3.40.0/lib/capybara/node/whitespace_normalizer.rb +81 -0
- data/capybara-3.40.0/lib/capybara/queries/active_element_query.rb +18 -0
- data/capybara-3.40.0/lib/capybara/queries/ancestor_query.rb +28 -0
- data/capybara-3.40.0/lib/capybara/queries/base_query.rb +106 -0
- data/capybara-3.40.0/lib/capybara/queries/current_path_query.rb +61 -0
- data/capybara-3.40.0/lib/capybara/queries/match_query.rb +26 -0
- data/capybara-3.40.0/lib/capybara/queries/selector_query.rb +761 -0
- data/capybara-3.40.0/lib/capybara/queries/sibling_query.rb +27 -0
- data/capybara-3.40.0/lib/capybara/queries/style_query.rb +45 -0
- data/capybara-3.40.0/lib/capybara/queries/text_query.rb +116 -0
- data/capybara-3.40.0/lib/capybara/queries/title_query.rb +39 -0
- data/capybara-3.40.0/lib/capybara/rack_test/browser.rb +200 -0
- data/capybara-3.40.0/lib/capybara/rack_test/css_handlers.rb +13 -0
- data/capybara-3.40.0/lib/capybara/rack_test/driver.rb +110 -0
- data/capybara-3.40.0/lib/capybara/rack_test/errors.rb +6 -0
- data/capybara-3.40.0/lib/capybara/rack_test/form.rb +149 -0
- data/capybara-3.40.0/lib/capybara/rack_test/node.rb +324 -0
- data/capybara-3.40.0/lib/capybara/rails.rb +16 -0
- data/capybara-3.40.0/lib/capybara/registration_container.rb +41 -0
- data/capybara-3.40.0/lib/capybara/registrations/drivers.rb +42 -0
- data/capybara-3.40.0/lib/capybara/registrations/patches/puma_ssl.rb +29 -0
- data/capybara-3.40.0/lib/capybara/registrations/servers.rb +66 -0
- data/capybara-3.40.0/lib/capybara/result.rb +186 -0
- data/capybara-3.40.0/lib/capybara/rspec/features.rb +23 -0
- data/capybara-3.40.0/lib/capybara/rspec/matcher_proxies.rb +82 -0
- data/capybara-3.40.0/lib/capybara/rspec/matchers/base.rb +113 -0
- data/capybara-3.40.0/lib/capybara/rspec/matchers/become_closed.rb +33 -0
- data/capybara-3.40.0/lib/capybara/rspec/matchers/compound.rb +88 -0
- data/capybara-3.40.0/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
- data/capybara-3.40.0/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
- data/capybara-3.40.0/lib/capybara/rspec/matchers/have_current_path.rb +29 -0
- data/capybara-3.40.0/lib/capybara/rspec/matchers/have_selector.rb +69 -0
- data/capybara-3.40.0/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
- data/capybara-3.40.0/lib/capybara/rspec/matchers/have_text.rb +33 -0
- data/capybara-3.40.0/lib/capybara/rspec/matchers/have_title.rb +29 -0
- data/capybara-3.40.0/lib/capybara/rspec/matchers/match_selector.rb +27 -0
- data/capybara-3.40.0/lib/capybara/rspec/matchers/match_style.rb +43 -0
- data/capybara-3.40.0/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
- data/capybara-3.40.0/lib/capybara/rspec/matchers.rb +207 -0
- data/capybara-3.40.0/lib/capybara/rspec.rb +31 -0
- data/capybara-3.40.0/lib/capybara/selector/builders/css_builder.rb +84 -0
- data/capybara-3.40.0/lib/capybara/selector/builders/xpath_builder.rb +71 -0
- data/capybara-3.40.0/lib/capybara/selector/css.rb +102 -0
- data/capybara-3.40.0/lib/capybara/selector/definition/button.rb +68 -0
- data/capybara-3.40.0/lib/capybara/selector/definition/checkbox.rb +26 -0
- data/capybara-3.40.0/lib/capybara/selector/definition/css.rb +10 -0
- data/capybara-3.40.0/lib/capybara/selector/definition/datalist_input.rb +35 -0
- data/capybara-3.40.0/lib/capybara/selector/definition/datalist_option.rb +25 -0
- data/capybara-3.40.0/lib/capybara/selector/definition/element.rb +28 -0
- data/capybara-3.40.0/lib/capybara/selector/definition/field.rb +40 -0
- data/capybara-3.40.0/lib/capybara/selector/definition/fieldset.rb +14 -0
- data/capybara-3.40.0/lib/capybara/selector/definition/file_field.rb +13 -0
- data/capybara-3.40.0/lib/capybara/selector/definition/fillable_field.rb +33 -0
- data/capybara-3.40.0/lib/capybara/selector/definition/frame.rb +17 -0
- data/capybara-3.40.0/lib/capybara/selector/definition/id.rb +6 -0
- data/capybara-3.40.0/lib/capybara/selector/definition/label.rb +62 -0
- data/capybara-3.40.0/lib/capybara/selector/definition/link.rb +55 -0
- data/capybara-3.40.0/lib/capybara/selector/definition/link_or_button.rb +16 -0
- data/capybara-3.40.0/lib/capybara/selector/definition/option.rb +27 -0
- data/capybara-3.40.0/lib/capybara/selector/definition/radio_button.rb +27 -0
- data/capybara-3.40.0/lib/capybara/selector/definition/select.rb +81 -0
- data/capybara-3.40.0/lib/capybara/selector/definition/table.rb +109 -0
- data/capybara-3.40.0/lib/capybara/selector/definition/table_row.rb +21 -0
- data/capybara-3.40.0/lib/capybara/selector/definition/xpath.rb +5 -0
- data/capybara-3.40.0/lib/capybara/selector/definition.rb +280 -0
- data/capybara-3.40.0/lib/capybara/selector/filter.rb +5 -0
- data/capybara-3.40.0/lib/capybara/selector/filter_set.rb +121 -0
- data/capybara-3.40.0/lib/capybara/selector/filters/base.rb +77 -0
- data/capybara-3.40.0/lib/capybara/selector/filters/expression_filter.rb +22 -0
- data/capybara-3.40.0/lib/capybara/selector/filters/locator_filter.rb +29 -0
- data/capybara-3.40.0/lib/capybara/selector/filters/node_filter.rb +31 -0
- data/capybara-3.40.0/lib/capybara/selector/regexp_disassembler.rb +211 -0
- data/capybara-3.40.0/lib/capybara/selector/selector.rb +159 -0
- data/capybara-3.40.0/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/capybara-3.40.0/lib/capybara/selector.rb +494 -0
- data/capybara-3.40.0/lib/capybara/selenium/atoms/getAttribute.min.js +1 -0
- data/capybara-3.40.0/lib/capybara/selenium/atoms/isDisplayed.min.js +1 -0
- data/capybara-3.40.0/lib/capybara/selenium/atoms/src/getAttribute.js +161 -0
- data/capybara-3.40.0/lib/capybara/selenium/atoms/src/isDisplayed.js +454 -0
- data/capybara-3.40.0/lib/capybara/selenium/driver.rb +517 -0
- data/capybara-3.40.0/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
- data/capybara-3.40.0/lib/capybara/selenium/driver_specializations/edge_driver.rb +128 -0
- data/capybara-3.40.0/lib/capybara/selenium/driver_specializations/firefox_driver.rb +84 -0
- data/capybara-3.40.0/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +26 -0
- data/capybara-3.40.0/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
- data/capybara-3.40.0/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
- data/capybara-3.40.0/lib/capybara/selenium/extensions/find.rb +110 -0
- data/capybara-3.40.0/lib/capybara/selenium/extensions/html5_drag.rb +229 -0
- data/capybara-3.40.0/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
- data/capybara-3.40.0/lib/capybara/selenium/extensions/scroll.rb +76 -0
- data/capybara-3.40.0/lib/capybara/selenium/node.rb +636 -0
- data/capybara-3.40.0/lib/capybara/selenium/nodes/chrome_node.rb +125 -0
- data/capybara-3.40.0/lib/capybara/selenium/nodes/edge_node.rb +110 -0
- data/capybara-3.40.0/lib/capybara/selenium/nodes/firefox_node.rb +136 -0
- data/capybara-3.40.0/lib/capybara/selenium/nodes/ie_node.rb +22 -0
- data/capybara-3.40.0/lib/capybara/selenium/nodes/safari_node.rb +118 -0
- data/capybara-3.40.0/lib/capybara/selenium/patches/atoms.rb +18 -0
- data/capybara-3.40.0/lib/capybara/selenium/patches/is_displayed.rb +16 -0
- data/capybara-3.40.0/lib/capybara/selenium/patches/logs.rb +45 -0
- data/capybara-3.40.0/lib/capybara/selenium/patches/pause_duration_fix.rb +9 -0
- data/capybara-3.40.0/lib/capybara/selenium/patches/persistent_client.rb +20 -0
- data/capybara-3.40.0/lib/capybara/server/animation_disabler.rb +80 -0
- data/capybara-3.40.0/lib/capybara/server/checker.rb +44 -0
- data/capybara-3.40.0/lib/capybara/server/middleware.rb +71 -0
- data/capybara-3.40.0/lib/capybara/server.rb +126 -0
- data/capybara-3.40.0/lib/capybara/session/config.rb +128 -0
- data/capybara-3.40.0/lib/capybara/session/matchers.rb +87 -0
- data/capybara-3.40.0/lib/capybara/session.rb +951 -0
- data/capybara-3.40.0/lib/capybara/spec/fixtures/another_test_file.txt +1 -0
- data/capybara-3.40.0/lib/capybara/spec/fixtures/capybara.jpg +3 -0
- data/capybara-3.40.0/lib/capybara/spec/fixtures/no_extension +1 -0
- data/capybara-3.40.0/lib/capybara/spec/fixtures/test_file.txt +1 -0
- data/capybara-3.40.0/lib/capybara/spec/public/jquery-ui.js +13 -0
- data/capybara-3.40.0/lib/capybara/spec/public/jquery.js +5 -0
- data/capybara-3.40.0/lib/capybara/spec/public/offset.js +6 -0
- data/capybara-3.40.0/lib/capybara/spec/public/test.js +284 -0
- data/capybara-3.40.0/lib/capybara/spec/session/accept_alert_spec.rb +81 -0
- data/capybara-3.40.0/lib/capybara/spec/session/accept_confirm_spec.rb +32 -0
- data/capybara-3.40.0/lib/capybara/spec/session/accept_prompt_spec.rb +78 -0
- data/capybara-3.40.0/lib/capybara/spec/session/active_element_spec.rb +31 -0
- data/capybara-3.40.0/lib/capybara/spec/session/all_spec.rb +274 -0
- data/capybara-3.40.0/lib/capybara/spec/session/ancestor_spec.rb +88 -0
- data/capybara-3.40.0/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +140 -0
- data/capybara-3.40.0/lib/capybara/spec/session/assert_current_path_spec.rb +75 -0
- data/capybara-3.40.0/lib/capybara/spec/session/assert_selector_spec.rb +143 -0
- data/capybara-3.40.0/lib/capybara/spec/session/assert_style_spec.rb +26 -0
- data/capybara-3.40.0/lib/capybara/spec/session/assert_text_spec.rb +258 -0
- data/capybara-3.40.0/lib/capybara/spec/session/assert_title_spec.rb +93 -0
- data/capybara-3.40.0/lib/capybara/spec/session/attach_file_spec.rb +222 -0
- data/capybara-3.40.0/lib/capybara/spec/session/body_spec.rb +23 -0
- data/capybara-3.40.0/lib/capybara/spec/session/check_spec.rb +251 -0
- data/capybara-3.40.0/lib/capybara/spec/session/choose_spec.rb +127 -0
- data/capybara-3.40.0/lib/capybara/spec/session/click_button_spec.rb +517 -0
- data/capybara-3.40.0/lib/capybara/spec/session/click_link_or_button_spec.rb +138 -0
- data/capybara-3.40.0/lib/capybara/spec/session/click_link_spec.rb +240 -0
- data/capybara-3.40.0/lib/capybara/spec/session/current_scope_spec.rb +31 -0
- data/capybara-3.40.0/lib/capybara/spec/session/current_url_spec.rb +125 -0
- data/capybara-3.40.0/lib/capybara/spec/session/dismiss_confirm_spec.rb +36 -0
- data/capybara-3.40.0/lib/capybara/spec/session/dismiss_prompt_spec.rb +21 -0
- data/capybara-3.40.0/lib/capybara/spec/session/element/assert_match_selector_spec.rb +38 -0
- data/capybara-3.40.0/lib/capybara/spec/session/element/match_css_spec.rb +31 -0
- data/capybara-3.40.0/lib/capybara/spec/session/element/match_xpath_spec.rb +25 -0
- data/capybara-3.40.0/lib/capybara/spec/session/element/matches_selector_spec.rb +120 -0
- data/capybara-3.40.0/lib/capybara/spec/session/evaluate_async_script_spec.rb +23 -0
- data/capybara-3.40.0/lib/capybara/spec/session/evaluate_script_spec.rb +49 -0
- data/capybara-3.40.0/lib/capybara/spec/session/execute_script_spec.rb +28 -0
- data/capybara-3.40.0/lib/capybara/spec/session/fill_in_spec.rb +292 -0
- data/capybara-3.40.0/lib/capybara/spec/session/find_button_spec.rb +74 -0
- data/capybara-3.40.0/lib/capybara/spec/session/find_by_id_spec.rb +33 -0
- data/capybara-3.40.0/lib/capybara/spec/session/find_field_spec.rb +113 -0
- data/capybara-3.40.0/lib/capybara/spec/session/find_link_spec.rb +80 -0
- data/capybara-3.40.0/lib/capybara/spec/session/find_spec.rb +545 -0
- data/capybara-3.40.0/lib/capybara/spec/session/first_spec.rb +156 -0
- data/capybara-3.40.0/lib/capybara/spec/session/frame/frame_title_spec.rb +23 -0
- data/capybara-3.40.0/lib/capybara/spec/session/frame/frame_url_spec.rb +23 -0
- data/capybara-3.40.0/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +116 -0
- data/capybara-3.40.0/lib/capybara/spec/session/frame/within_frame_spec.rb +114 -0
- data/capybara-3.40.0/lib/capybara/spec/session/go_back_spec.rb +12 -0
- data/capybara-3.40.0/lib/capybara/spec/session/go_forward_spec.rb +14 -0
- data/capybara-3.40.0/lib/capybara/spec/session/has_all_selectors_spec.rb +69 -0
- data/capybara-3.40.0/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
- data/capybara-3.40.0/lib/capybara/spec/session/has_any_selectors_spec.rb +29 -0
- data/capybara-3.40.0/lib/capybara/spec/session/has_button_spec.rb +150 -0
- data/capybara-3.40.0/lib/capybara/spec/session/has_css_spec.rb +375 -0
- data/capybara-3.40.0/lib/capybara/spec/session/has_current_path_spec.rb +151 -0
- data/capybara-3.40.0/lib/capybara/spec/session/has_element_spec.rb +47 -0
- data/capybara-3.40.0/lib/capybara/spec/session/has_field_spec.rb +389 -0
- data/capybara-3.40.0/lib/capybara/spec/session/has_link_spec.rb +79 -0
- data/capybara-3.40.0/lib/capybara/spec/session/has_none_selectors_spec.rb +78 -0
- data/capybara-3.40.0/lib/capybara/spec/session/has_select_spec.rb +316 -0
- data/capybara-3.40.0/lib/capybara/spec/session/has_selector_spec.rb +217 -0
- data/capybara-3.40.0/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
- data/capybara-3.40.0/lib/capybara/spec/session/has_table_spec.rb +209 -0
- data/capybara-3.40.0/lib/capybara/spec/session/has_text_spec.rb +375 -0
- data/capybara-3.40.0/lib/capybara/spec/session/has_title_spec.rb +71 -0
- data/capybara-3.40.0/lib/capybara/spec/session/has_xpath_spec.rb +149 -0
- data/capybara-3.40.0/lib/capybara/spec/session/headers_spec.rb +8 -0
- data/capybara-3.40.0/lib/capybara/spec/session/html_spec.rb +47 -0
- data/capybara-3.40.0/lib/capybara/spec/session/matches_style_spec.rb +37 -0
- data/capybara-3.40.0/lib/capybara/spec/session/node_spec.rb +1399 -0
- data/capybara-3.40.0/lib/capybara/spec/session/node_wrapper_spec.rb +39 -0
- data/capybara-3.40.0/lib/capybara/spec/session/refresh_spec.rb +34 -0
- data/capybara-3.40.0/lib/capybara/spec/session/reset_session_spec.rb +161 -0
- data/capybara-3.40.0/lib/capybara/spec/session/response_code_spec.rb +8 -0
- data/capybara-3.40.0/lib/capybara/spec/session/save_and_open_page_spec.rb +21 -0
- data/capybara-3.40.0/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +43 -0
- data/capybara-3.40.0/lib/capybara/spec/session/save_page_spec.rb +110 -0
- data/capybara-3.40.0/lib/capybara/spec/session/save_screenshot_spec.rb +55 -0
- data/capybara-3.40.0/lib/capybara/spec/session/screenshot_spec.rb +18 -0
- data/capybara-3.40.0/lib/capybara/spec/session/scroll_spec.rb +119 -0
- data/capybara-3.40.0/lib/capybara/spec/session/select_spec.rb +229 -0
- data/capybara-3.40.0/lib/capybara/spec/session/selectors_spec.rb +98 -0
- data/capybara-3.40.0/lib/capybara/spec/session/sibling_spec.rb +52 -0
- data/capybara-3.40.0/lib/capybara/spec/session/text_spec.rb +74 -0
- data/capybara-3.40.0/lib/capybara/spec/session/title_spec.rb +29 -0
- data/capybara-3.40.0/lib/capybara/spec/session/uncheck_spec.rb +100 -0
- data/capybara-3.40.0/lib/capybara/spec/session/unselect_spec.rb +116 -0
- data/capybara-3.40.0/lib/capybara/spec/session/visit_spec.rb +224 -0
- data/capybara-3.40.0/lib/capybara/spec/session/window/become_closed_spec.rb +89 -0
- data/capybara-3.40.0/lib/capybara/spec/session/window/current_window_spec.rb +28 -0
- data/capybara-3.40.0/lib/capybara/spec/session/window/open_new_window_spec.rb +31 -0
- data/capybara-3.40.0/lib/capybara/spec/session/window/switch_to_window_spec.rb +132 -0
- data/capybara-3.40.0/lib/capybara/spec/session/window/window_opened_by_spec.rb +99 -0
- data/capybara-3.40.0/lib/capybara/spec/session/window/window_spec.rb +203 -0
- data/capybara-3.40.0/lib/capybara/spec/session/window/windows_spec.rb +34 -0
- data/capybara-3.40.0/lib/capybara/spec/session/window/within_window_spec.rb +157 -0
- data/capybara-3.40.0/lib/capybara/spec/session/within_spec.rb +212 -0
- data/capybara-3.40.0/lib/capybara/spec/spec_helper.rb +141 -0
- data/capybara-3.40.0/lib/capybara/spec/test_app.rb +305 -0
- data/capybara-3.40.0/lib/capybara/spec/views/animated.erb +49 -0
- data/capybara-3.40.0/lib/capybara/spec/views/buttons.erb +5 -0
- data/capybara-3.40.0/lib/capybara/spec/views/fieldsets.erb +30 -0
- data/capybara-3.40.0/lib/capybara/spec/views/form.erb +738 -0
- data/capybara-3.40.0/lib/capybara/spec/views/frame_child.erb +18 -0
- data/capybara-3.40.0/lib/capybara/spec/views/frame_one.erb +10 -0
- data/capybara-3.40.0/lib/capybara/spec/views/frame_parent.erb +9 -0
- data/capybara-3.40.0/lib/capybara/spec/views/frame_two.erb +9 -0
- data/capybara-3.40.0/lib/capybara/spec/views/header_links.erb +8 -0
- data/capybara-3.40.0/lib/capybara/spec/views/host_links.erb +13 -0
- data/capybara-3.40.0/lib/capybara/spec/views/initial_alert.erb +11 -0
- data/capybara-3.40.0/lib/capybara/spec/views/layout.erb +10 -0
- data/capybara-3.40.0/lib/capybara/spec/views/obscured.erb +47 -0
- data/capybara-3.40.0/lib/capybara/spec/views/offset.erb +33 -0
- data/capybara-3.40.0/lib/capybara/spec/views/path.erb +13 -0
- data/capybara-3.40.0/lib/capybara/spec/views/popup_one.erb +9 -0
- data/capybara-3.40.0/lib/capybara/spec/views/popup_two.erb +9 -0
- data/capybara-3.40.0/lib/capybara/spec/views/postback.erb +14 -0
- data/capybara-3.40.0/lib/capybara/spec/views/react.erb +45 -0
- data/capybara-3.40.0/lib/capybara/spec/views/scroll.erb +21 -0
- data/capybara-3.40.0/lib/capybara/spec/views/spatial.erb +31 -0
- data/capybara-3.40.0/lib/capybara/spec/views/tables.erb +130 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_animation.erb +81 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_base_tag.erb +11 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_count.erb +8 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_dragula.erb +24 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_fixed_header_footer.erb +18 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_hover.erb +24 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_hover1.erb +10 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_html.erb +210 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_html5_svg.erb +20 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_html_entities.erb +2 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_js.erb +162 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_jstree.erb +26 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_namespace.erb +21 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_scope.erb +42 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_scope_other.erb +6 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_shadow.erb +31 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_simple_html.erb +2 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_slow_unload.erb +18 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_sortable_js.erb +21 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_unload_alert.erb +15 -0
- data/capybara-3.40.0/lib/capybara/spec/views/with_windows.erb +54 -0
- data/capybara-3.40.0/lib/capybara/spec/views/within_frames.erb +15 -0
- data/capybara-3.40.0/lib/capybara/version.rb +5 -0
- data/capybara-3.40.0/lib/capybara/window.rb +142 -0
- data/capybara-3.40.0/lib/capybara.rb +521 -0
- data/capybara-3.40.0/spec/basic_node_spec.rb +168 -0
- data/capybara-3.40.0/spec/capybara_spec.rb +124 -0
- data/capybara-3.40.0/spec/counter_spec.rb +35 -0
- data/capybara-3.40.0/spec/css_builder_spec.rb +101 -0
- data/capybara-3.40.0/spec/css_splitter_spec.rb +38 -0
- data/capybara-3.40.0/spec/dsl_spec.rb +291 -0
- data/capybara-3.40.0/spec/filter_set_spec.rb +46 -0
- data/capybara-3.40.0/spec/fixtures/capybara.csv +1 -0
- data/capybara-3.40.0/spec/fixtures/certificate.pem +25 -0
- data/capybara-3.40.0/spec/fixtures/key.pem +27 -0
- data/capybara-3.40.0/spec/fixtures/selenium_driver_rspec_failure.rb +13 -0
- data/capybara-3.40.0/spec/fixtures/selenium_driver_rspec_success.rb +13 -0
- data/capybara-3.40.0/spec/minitest_spec.rb +175 -0
- data/capybara-3.40.0/spec/minitest_spec_spec.rb +166 -0
- data/capybara-3.40.0/spec/per_session_config_spec.rb +68 -0
- data/capybara-3.40.0/spec/rack_test_spec.rb +297 -0
- data/capybara-3.40.0/spec/regexp_dissassembler_spec.rb +250 -0
- data/capybara-3.40.0/spec/result_spec.rb +202 -0
- data/capybara-3.40.0/spec/rspec/features_spec.rb +101 -0
- data/capybara-3.40.0/spec/rspec/scenarios_spec.rb +23 -0
- data/capybara-3.40.0/spec/rspec/shared_spec_matchers.rb +983 -0
- data/capybara-3.40.0/spec/rspec/views_spec.rb +14 -0
- data/capybara-3.40.0/spec/rspec_matchers_spec.rb +87 -0
- data/capybara-3.40.0/spec/rspec_spec.rb +149 -0
- data/capybara-3.40.0/spec/sauce_spec_chrome.rb +43 -0
- data/capybara-3.40.0/spec/selector_spec.rb +528 -0
- data/capybara-3.40.0/spec/selenium_spec_chrome.rb +209 -0
- data/capybara-3.40.0/spec/selenium_spec_chrome_remote.rb +96 -0
- data/capybara-3.40.0/spec/selenium_spec_edge.rb +60 -0
- data/capybara-3.40.0/spec/selenium_spec_firefox.rb +228 -0
- data/capybara-3.40.0/spec/selenium_spec_firefox_remote.rb +94 -0
- data/capybara-3.40.0/spec/selenium_spec_ie.rb +149 -0
- data/capybara-3.40.0/spec/selenium_spec_safari.rb +162 -0
- data/capybara-3.40.0/spec/server_spec.rb +315 -0
- data/capybara-3.40.0/spec/session_spec.rb +91 -0
- data/capybara-3.40.0/spec/shared_selenium_node.rb +79 -0
- data/capybara-3.40.0/spec/shared_selenium_session.rb +566 -0
- data/capybara-3.40.0/spec/spec_helper.rb +133 -0
- data/capybara-3.40.0/spec/whitespace_normalizer_spec.rb +54 -0
- data/capybara-3.40.0/spec/xpath_builder_spec.rb +93 -0
- data/mega-max-rb.gemspec +12 -0
- metadata +358 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Capybara
|
|
4
|
+
module Node
|
|
5
|
+
##
|
|
6
|
+
#
|
|
7
|
+
# A {Capybara::Node::Simple} is a simpler version of {Capybara::Node::Base} which
|
|
8
|
+
# includes only {Capybara::Node::Finders} and {Capybara::Node::Matchers} and does
|
|
9
|
+
# not include {Capybara::Node::Actions}. This type of node is returned when
|
|
10
|
+
# using {Capybara.string}.
|
|
11
|
+
#
|
|
12
|
+
# It is useful in that it does not require a session, an application or a driver,
|
|
13
|
+
# but can still use Capybara's finders and matchers on any string that contains HTML.
|
|
14
|
+
#
|
|
15
|
+
class Simple
|
|
16
|
+
include Capybara::Node::Finders
|
|
17
|
+
include Capybara::Node::Matchers
|
|
18
|
+
include Capybara::Node::DocumentMatchers
|
|
19
|
+
|
|
20
|
+
attr_reader :native
|
|
21
|
+
|
|
22
|
+
def initialize(native)
|
|
23
|
+
native = Capybara::HTML(native) if native.is_a?(String)
|
|
24
|
+
@native = native
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
##
|
|
28
|
+
#
|
|
29
|
+
# @return [String] The text of the element
|
|
30
|
+
#
|
|
31
|
+
def text(_type = nil, normalize_ws: false)
|
|
32
|
+
txt = native.text
|
|
33
|
+
normalize_ws ? txt.gsub(/[[:space:]]+/, ' ').strip : txt
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
##
|
|
37
|
+
#
|
|
38
|
+
# Retrieve the given attribute
|
|
39
|
+
#
|
|
40
|
+
# element[:title] # => HTML title attribute
|
|
41
|
+
#
|
|
42
|
+
# @param [Symbol] name The attribute name to retrieve
|
|
43
|
+
# @return [String] The value of the attribute
|
|
44
|
+
#
|
|
45
|
+
def [](name)
|
|
46
|
+
attr_name = name.to_s
|
|
47
|
+
if attr_name == 'value'
|
|
48
|
+
value
|
|
49
|
+
elsif (tag_name == 'input') && (native[:type] == 'checkbox') && (attr_name == 'checked')
|
|
50
|
+
native['checked'] == 'checked'
|
|
51
|
+
else
|
|
52
|
+
native[attr_name]
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
##
|
|
57
|
+
#
|
|
58
|
+
# @return [String] The tag name of the element
|
|
59
|
+
#
|
|
60
|
+
def tag_name
|
|
61
|
+
native.node_name
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
##
|
|
65
|
+
#
|
|
66
|
+
# An XPath expression describing where on the page the element can be found
|
|
67
|
+
#
|
|
68
|
+
# @return [String] An XPath expression
|
|
69
|
+
#
|
|
70
|
+
def path
|
|
71
|
+
native.path
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
##
|
|
75
|
+
#
|
|
76
|
+
# @return [String] The value of the form element
|
|
77
|
+
#
|
|
78
|
+
def value
|
|
79
|
+
if tag_name == 'textarea'
|
|
80
|
+
native['_capybara_raw_value']
|
|
81
|
+
elsif tag_name == 'select'
|
|
82
|
+
selected_options = find_xpath('.//option[@selected]')
|
|
83
|
+
if multiple?
|
|
84
|
+
selected_options.map(&method(:option_value))
|
|
85
|
+
else
|
|
86
|
+
option_value(selected_options.first || find_xpath('.//option').first)
|
|
87
|
+
end
|
|
88
|
+
elsif tag_name == 'input' && %w[radio checkbox].include?(native[:type])
|
|
89
|
+
native[:value] || 'on'
|
|
90
|
+
else
|
|
91
|
+
native[:value]
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
##
|
|
96
|
+
#
|
|
97
|
+
# Whether or not the element is visible. Does not support CSS, so
|
|
98
|
+
# the result may be inaccurate.
|
|
99
|
+
#
|
|
100
|
+
# @param [Boolean] check_ancestors Whether to inherit visibility from ancestors
|
|
101
|
+
# @return [Boolean] Whether the element is visible
|
|
102
|
+
#
|
|
103
|
+
def visible?(check_ancestors = true) # rubocop:disable Style/OptionalBooleanParameter
|
|
104
|
+
return false if (tag_name == 'input') && (native[:type] == 'hidden')
|
|
105
|
+
return false if tag_name == 'template'
|
|
106
|
+
|
|
107
|
+
if check_ancestors
|
|
108
|
+
!find_xpath(VISIBILITY_XPATH)
|
|
109
|
+
else
|
|
110
|
+
# No need for an xpath if only checking the current element
|
|
111
|
+
!(native.key?('hidden') ||
|
|
112
|
+
/display:\s?none/.match?(native[:style] || '') ||
|
|
113
|
+
%w[script head style].include?(tag_name))
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
##
|
|
118
|
+
#
|
|
119
|
+
# Whether or not the element is checked.
|
|
120
|
+
#
|
|
121
|
+
# @return [Boolean] Whether the element is checked
|
|
122
|
+
#
|
|
123
|
+
def checked?
|
|
124
|
+
native.has_attribute?('checked')
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
##
|
|
128
|
+
#
|
|
129
|
+
# Whether or not the element is disabled.
|
|
130
|
+
#
|
|
131
|
+
# @return [Boolean] Whether the element is disabled
|
|
132
|
+
def disabled?
|
|
133
|
+
native.has_attribute?('disabled') &&
|
|
134
|
+
%w[button input select textarea optgroup option menuitem fieldset].include?(tag_name)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
##
|
|
138
|
+
#
|
|
139
|
+
# Whether or not the element is selected.
|
|
140
|
+
#
|
|
141
|
+
# @return [Boolean] Whether the element is selected
|
|
142
|
+
#
|
|
143
|
+
def selected?
|
|
144
|
+
native.has_attribute?('selected')
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def multiple?
|
|
148
|
+
native.has_attribute?('multiple')
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def readonly?
|
|
152
|
+
native.has_attribute?('readonly')
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def synchronize(_seconds = nil)
|
|
156
|
+
yield # simple nodes don't need to wait
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def allow_reload!(*)
|
|
160
|
+
# no op
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
##
|
|
164
|
+
#
|
|
165
|
+
# @return [String] The title of the document
|
|
166
|
+
def title
|
|
167
|
+
native.title
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def inspect
|
|
171
|
+
%(#<Capybara::Node::Simple tag="#{tag_name}" path="#{path}">)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
# @api private
|
|
175
|
+
def find_css(css, **_options)
|
|
176
|
+
native.css(css)
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
# @api private
|
|
180
|
+
def find_xpath(xpath, **_options)
|
|
181
|
+
native.xpath(xpath)
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
# @api private
|
|
185
|
+
def session_options
|
|
186
|
+
Capybara.session_options
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
# @api private
|
|
190
|
+
def initial_cache
|
|
191
|
+
{}
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def ==(other)
|
|
195
|
+
eql?(other) || (other.respond_to?(:native) && native == other.native)
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
private
|
|
199
|
+
|
|
200
|
+
def option_value(option)
|
|
201
|
+
return nil if option.nil?
|
|
202
|
+
|
|
203
|
+
option[:value] || option.content
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
VISIBILITY_XPATH = XPath.generate do |x|
|
|
207
|
+
x.ancestor_or_self[
|
|
208
|
+
x.attr(:style)[x.contains('display:none') | x.contains('display: none')] |
|
|
209
|
+
x.attr(:hidden) |
|
|
210
|
+
x.qname.one_of('script', 'head') |
|
|
211
|
+
(~x.self(:summary) & XPath.parent(:details)[!XPath.attr(:open)])
|
|
212
|
+
].boolean
|
|
213
|
+
end.to_s.freeze
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Capybara
|
|
4
|
+
module Node
|
|
5
|
+
##
|
|
6
|
+
#
|
|
7
|
+
# {Capybara::Node::WhitespaceNormalizer} provides methods that
|
|
8
|
+
# help to normalize the spacing of text content inside of
|
|
9
|
+
# {Capybara::Node::Element}s by removing various unicode
|
|
10
|
+
# spacing and directional markings.
|
|
11
|
+
#
|
|
12
|
+
module WhitespaceNormalizer
|
|
13
|
+
# Unicode for NBSP, or
|
|
14
|
+
NON_BREAKING_SPACE = "\u00a0"
|
|
15
|
+
LINE_SEPERATOR = "\u2028"
|
|
16
|
+
PARAGRAPH_SEPERATOR = "\u2029"
|
|
17
|
+
|
|
18
|
+
# All spaces except for NBSP
|
|
19
|
+
BREAKING_SPACES = "[[:space:]&&[^#{NON_BREAKING_SPACE}]]".freeze
|
|
20
|
+
|
|
21
|
+
# Whitespace we want to substitute with plain spaces
|
|
22
|
+
SQUEEZED_SPACES = " \n\f\t\v#{LINE_SEPERATOR}#{PARAGRAPH_SEPERATOR}".freeze
|
|
23
|
+
|
|
24
|
+
# Any whitespace at the front of text
|
|
25
|
+
LEADING_SPACES = /\A#{BREAKING_SPACES}+/
|
|
26
|
+
|
|
27
|
+
# Any whitespace at the end of text
|
|
28
|
+
TRAILING_SPACES = /#{BREAKING_SPACES}+\z/
|
|
29
|
+
|
|
30
|
+
# "Invisible" space character
|
|
31
|
+
ZERO_WIDTH_SPACE = "\u200b"
|
|
32
|
+
|
|
33
|
+
# Signifies text is read left to right
|
|
34
|
+
LEFT_TO_RIGHT_MARK = "\u200e"
|
|
35
|
+
|
|
36
|
+
# Signifies text is read right to left
|
|
37
|
+
RIGHT_TO_LEFT_MARK = "\u200f"
|
|
38
|
+
|
|
39
|
+
# Characters we want to truncate from text
|
|
40
|
+
REMOVED_CHARACTERS = [ZERO_WIDTH_SPACE, LEFT_TO_RIGHT_MARK, RIGHT_TO_LEFT_MARK].join
|
|
41
|
+
|
|
42
|
+
# Matches multiple empty lines
|
|
43
|
+
EMPTY_LINES = /[\ \n]*\n[\ \n]*/
|
|
44
|
+
|
|
45
|
+
##
|
|
46
|
+
#
|
|
47
|
+
# Normalizes the spacing of a node's text to be similar to
|
|
48
|
+
# what matchers might expect.
|
|
49
|
+
#
|
|
50
|
+
# @param text [String]
|
|
51
|
+
# @return [String]
|
|
52
|
+
#
|
|
53
|
+
def normalize_spacing(text)
|
|
54
|
+
text
|
|
55
|
+
.delete(REMOVED_CHARACTERS)
|
|
56
|
+
.tr(SQUEEZED_SPACES, ' ')
|
|
57
|
+
.squeeze(' ')
|
|
58
|
+
.sub(LEADING_SPACES, '')
|
|
59
|
+
.sub(TRAILING_SPACES, '')
|
|
60
|
+
.tr(NON_BREAKING_SPACE, ' ')
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
##
|
|
64
|
+
#
|
|
65
|
+
# Variant on {Capybara::Node::Normalizer#normalize_spacing} that
|
|
66
|
+
# targets the whitespace of visible elements only.
|
|
67
|
+
#
|
|
68
|
+
# @param text [String]
|
|
69
|
+
# @return [String]
|
|
70
|
+
#
|
|
71
|
+
def normalize_visible_spacing(text)
|
|
72
|
+
text
|
|
73
|
+
.squeeze(' ')
|
|
74
|
+
.gsub(EMPTY_LINES, "\n")
|
|
75
|
+
.sub(LEADING_SPACES, '')
|
|
76
|
+
.sub(TRAILING_SPACES, '')
|
|
77
|
+
.tr(NON_BREAKING_SPACE, ' ')
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Capybara
|
|
4
|
+
# @api private
|
|
5
|
+
module Queries
|
|
6
|
+
class ActiveElementQuery < BaseQuery
|
|
7
|
+
def initialize(**options)
|
|
8
|
+
@options = options
|
|
9
|
+
super(@options)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def resolve_for(session)
|
|
13
|
+
node = session.driver.active_element
|
|
14
|
+
[Capybara::Node::Element.new(session, node, nil, self)]
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Capybara
|
|
4
|
+
module Queries
|
|
5
|
+
class AncestorQuery < Capybara::Queries::SelectorQuery
|
|
6
|
+
# @api private
|
|
7
|
+
def resolve_for(node, exact = nil)
|
|
8
|
+
@child_node = node
|
|
9
|
+
|
|
10
|
+
node.synchronize do
|
|
11
|
+
scope = node.respond_to?(:session) ? node.session.current_scope : node.find(:xpath, '/*')
|
|
12
|
+
match_results = super(scope, exact)
|
|
13
|
+
ancestors = node.find_xpath(XPath.ancestor.to_s)
|
|
14
|
+
.map(&method(:to_element))
|
|
15
|
+
.select { |el| match_results.include?(el) }
|
|
16
|
+
Capybara::Result.new(ordered_results(ancestors), self)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def description(applied = false) # rubocop:disable Style/OptionalBooleanParameter
|
|
21
|
+
child_query = @child_node&.instance_variable_get(:@query)
|
|
22
|
+
desc = super
|
|
23
|
+
desc += " that is an ancestor of #{child_query.description}" if child_query
|
|
24
|
+
desc
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Capybara
|
|
4
|
+
# @api private
|
|
5
|
+
module Queries
|
|
6
|
+
class BaseQuery
|
|
7
|
+
COUNT_KEYS = %i[count minimum maximum between].freeze
|
|
8
|
+
|
|
9
|
+
attr_reader :options
|
|
10
|
+
attr_writer :session_options
|
|
11
|
+
|
|
12
|
+
def initialize(options)
|
|
13
|
+
@session_options = options.delete(:session_options)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def session_options
|
|
17
|
+
@session_options || Capybara.session_options
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def wait
|
|
21
|
+
self.class.wait(options, session_options.default_max_wait_time)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.wait(options, default = Capybara.default_max_wait_time)
|
|
25
|
+
# if no value or nil for the :wait option is passed it should default to the default
|
|
26
|
+
wait = options.fetch(:wait, nil)
|
|
27
|
+
wait = default if wait.nil?
|
|
28
|
+
wait || 0
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
##
|
|
32
|
+
#
|
|
33
|
+
# Checks if a count of 0 is valid for the query
|
|
34
|
+
# Returns false if query does not have any count options specified.
|
|
35
|
+
#
|
|
36
|
+
def expects_none?
|
|
37
|
+
count_specified? ? matches_count?(0) : false
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
##
|
|
41
|
+
#
|
|
42
|
+
# Checks if the given count matches the query count options.
|
|
43
|
+
# Defaults to true if no count options are specified. If multiple
|
|
44
|
+
# count options exist, it tests that all conditions are met;
|
|
45
|
+
# however, if :count is specified, all other options are ignored.
|
|
46
|
+
#
|
|
47
|
+
# @param [Integer] count The actual number. Should be coercible via Integer()
|
|
48
|
+
#
|
|
49
|
+
def matches_count?(count)
|
|
50
|
+
return (Integer(options[:count]) == count) if options[:count]
|
|
51
|
+
return false if options[:maximum] && (Integer(options[:maximum]) < count)
|
|
52
|
+
return false if options[:minimum] && (Integer(options[:minimum]) > count)
|
|
53
|
+
return false if options[:between] && !options[:between].include?(count)
|
|
54
|
+
|
|
55
|
+
true
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
##
|
|
59
|
+
#
|
|
60
|
+
# Generates a failure message from the query description and count options.
|
|
61
|
+
#
|
|
62
|
+
def failure_message
|
|
63
|
+
+"expected to find #{description}" << count_message
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def negative_failure_message
|
|
67
|
+
+"expected not to find #{description}" << count_message
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
private
|
|
71
|
+
|
|
72
|
+
def count_specified?
|
|
73
|
+
COUNT_KEYS.any? { |key| options.key? key }
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def count_message
|
|
77
|
+
message = +''
|
|
78
|
+
count, between, maximum, minimum = options.values_at(:count, :between, :maximum, :minimum)
|
|
79
|
+
if count
|
|
80
|
+
message << " #{occurrences count}"
|
|
81
|
+
elsif between
|
|
82
|
+
message << " between #{between.begin ? between.first : 1} and " \
|
|
83
|
+
"#{between.end ? between.last : 'infinite'} times"
|
|
84
|
+
elsif maximum
|
|
85
|
+
message << " at most #{occurrences maximum}"
|
|
86
|
+
elsif minimum
|
|
87
|
+
message << " at least #{occurrences minimum}"
|
|
88
|
+
end
|
|
89
|
+
message
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def occurrences(count)
|
|
93
|
+
"#{count} #{Capybara::Helpers.declension('time', 'times', count)}"
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def assert_valid_keys
|
|
97
|
+
invalid_keys = @options.keys - valid_keys
|
|
98
|
+
return if invalid_keys.empty?
|
|
99
|
+
|
|
100
|
+
invalid_names = invalid_keys.map(&:inspect).join(', ')
|
|
101
|
+
valid_names = valid_keys.map(&:inspect).join(', ')
|
|
102
|
+
raise ArgumentError, "Invalid option(s) #{invalid_names}, should be one of #{valid_names}"
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'addressable/uri'
|
|
4
|
+
|
|
5
|
+
module Capybara
|
|
6
|
+
# @api private
|
|
7
|
+
module Queries
|
|
8
|
+
class CurrentPathQuery < BaseQuery
|
|
9
|
+
def initialize(expected_path, **options, &optional_filter_block)
|
|
10
|
+
super(options)
|
|
11
|
+
@expected_path = expected_path
|
|
12
|
+
@options = {
|
|
13
|
+
url: !@expected_path.is_a?(Regexp) && !::Addressable::URI.parse(@expected_path || '').hostname.nil?,
|
|
14
|
+
ignore_query: false
|
|
15
|
+
}.merge(options)
|
|
16
|
+
@filter_block = optional_filter_block
|
|
17
|
+
assert_valid_keys
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def resolves_for?(session)
|
|
21
|
+
uri = ::Addressable::URI.parse(session.current_url)
|
|
22
|
+
@actual_path = (options[:ignore_query] ? uri&.omit(:query) : uri).then do |u|
|
|
23
|
+
options[:url] ? u&.to_s : u&.request_uri
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
res = if @expected_path.is_a? Regexp
|
|
27
|
+
@actual_path.to_s.match?(@expected_path)
|
|
28
|
+
else
|
|
29
|
+
::Addressable::URI.parse(@expected_path) == ::Addressable::URI.parse(@actual_path)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
res && matches_filter_block?(uri)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def failure_message
|
|
36
|
+
failure_message_helper
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def negative_failure_message
|
|
40
|
+
failure_message_helper(' not')
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
private
|
|
44
|
+
|
|
45
|
+
def matches_filter_block?(url)
|
|
46
|
+
return true unless @filter_block
|
|
47
|
+
|
|
48
|
+
@filter_block.call(url)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def failure_message_helper(negated = '')
|
|
52
|
+
verb = @expected_path.is_a?(Regexp) ? 'match' : 'equal'
|
|
53
|
+
"expected #{@actual_path.inspect}#{negated} to #{verb} #{@expected_path.inspect}"
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def valid_keys
|
|
57
|
+
%i[wait url ignore_query]
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Capybara
|
|
4
|
+
module Queries
|
|
5
|
+
class MatchQuery < Capybara::Queries::SelectorQuery
|
|
6
|
+
def visible
|
|
7
|
+
options.key?(:visible) ? super : :all
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
def assert_valid_keys
|
|
13
|
+
invalid_options = @options.keys & COUNT_KEYS
|
|
14
|
+
unless invalid_options.empty?
|
|
15
|
+
raise ArgumentError, "Match queries don't support quantity options. Invalid keys - #{invalid_options.join(', ')}"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
super
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def valid_keys
|
|
22
|
+
super - COUNT_KEYS
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|