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,80 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Capybara
|
|
4
|
+
class Server
|
|
5
|
+
class AnimationDisabler
|
|
6
|
+
def self.selector_for(css_or_bool)
|
|
7
|
+
case css_or_bool
|
|
8
|
+
when String
|
|
9
|
+
css_or_bool
|
|
10
|
+
when true
|
|
11
|
+
'*'
|
|
12
|
+
else
|
|
13
|
+
raise CapybaraError, 'Capybara.disable_animation supports either a String (the css selector to disable) or a boolean'
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def initialize(app)
|
|
18
|
+
@app = app
|
|
19
|
+
@disable_css_markup = format(DISABLE_CSS_MARKUP_TEMPLATE,
|
|
20
|
+
selector: self.class.selector_for(Capybara.disable_animation))
|
|
21
|
+
@disable_js_markup = +DISABLE_JS_MARKUP_TEMPLATE
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def call(env)
|
|
25
|
+
status, headers, body = @app.call(env)
|
|
26
|
+
return [status, headers, body] unless html_content?(headers)
|
|
27
|
+
|
|
28
|
+
nonces = directive_nonces(headers).transform_values { |nonce| "nonce=\"#{nonce}\"" if nonce && !nonce.empty? }
|
|
29
|
+
response = Rack::Response.new([], status, headers)
|
|
30
|
+
|
|
31
|
+
body.each { |html| response.write insert_disable(html, nonces) }
|
|
32
|
+
body.close if body.respond_to?(:close)
|
|
33
|
+
|
|
34
|
+
response.finish
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
attr_reader :disable_css_markup, :disable_js_markup
|
|
40
|
+
|
|
41
|
+
def html_content?(headers)
|
|
42
|
+
/html/.match?(headers['Content-Type']) # rubocop:todo Performance/StringInclude
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def insert_disable(html, nonces)
|
|
46
|
+
html.sub(%r{(</head>)}, "<style #{nonces['style-src']}>#{disable_css_markup}</style>\\1")
|
|
47
|
+
.sub(%r{(</body>)}, "<script #{nonces['script-src']}>#{disable_js_markup}</script>\\1")
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def directive_nonces(headers)
|
|
51
|
+
headers.fetch('Content-Security-Policy', '')
|
|
52
|
+
.split(';')
|
|
53
|
+
.map(&:split) # rubocop:disable Style/MapToHash
|
|
54
|
+
.to_h do |s|
|
|
55
|
+
[
|
|
56
|
+
s[0], s[1..].filter_map do |value|
|
|
57
|
+
/^'nonce-(?<nonce>.+)'/ =~ value
|
|
58
|
+
nonce
|
|
59
|
+
end[0]
|
|
60
|
+
]
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
DISABLE_CSS_MARKUP_TEMPLATE = <<~CSS
|
|
65
|
+
%<selector>s, %<selector>s::before, %<selector>s::after {
|
|
66
|
+
transition: none !important;
|
|
67
|
+
animation-duration: 0s !important;
|
|
68
|
+
animation-delay: 0s !important;
|
|
69
|
+
scroll-behavior: auto !important;
|
|
70
|
+
}
|
|
71
|
+
CSS
|
|
72
|
+
|
|
73
|
+
DISABLE_JS_MARKUP_TEMPLATE = <<~SCRIPT
|
|
74
|
+
//<![CDATA[
|
|
75
|
+
(typeof jQuery !== 'undefined') && (jQuery.fx.off = true);
|
|
76
|
+
//]]>
|
|
77
|
+
SCRIPT
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Capybara
|
|
4
|
+
class Server
|
|
5
|
+
class Checker
|
|
6
|
+
TRY_HTTPS_ERRORS = [EOFError, Net::ReadTimeout, Errno::ECONNRESET].freeze
|
|
7
|
+
|
|
8
|
+
def initialize(host, port)
|
|
9
|
+
@host, @port = host, port
|
|
10
|
+
@ssl = false
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def request(&block)
|
|
14
|
+
ssl? ? https_request(&block) : http_request(&block)
|
|
15
|
+
rescue *TRY_HTTPS_ERRORS
|
|
16
|
+
res = https_request(&block)
|
|
17
|
+
@ssl = true
|
|
18
|
+
res
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def ssl?
|
|
22
|
+
@ssl
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def http_request(&block)
|
|
28
|
+
make_request(read_timeout: 2, &block)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def https_request(&block)
|
|
32
|
+
make_request(**ssl_options, &block)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def make_request(**options, &block)
|
|
36
|
+
Net::HTTP.start(@host, @port, options.merge(max_retries: 0), &block)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def ssl_options
|
|
40
|
+
{ use_ssl: true, verify_mode: OpenSSL::SSL::VERIFY_NONE }
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Capybara
|
|
4
|
+
class Server
|
|
5
|
+
class Middleware
|
|
6
|
+
class Counter
|
|
7
|
+
def initialize
|
|
8
|
+
@value = []
|
|
9
|
+
@mutex = Mutex.new
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def increment(uri)
|
|
13
|
+
@mutex.synchronize { @value.push(uri) }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def decrement(uri)
|
|
17
|
+
@mutex.synchronize { @value.delete_at(@value.index(uri) || - 1) }
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def positive?
|
|
21
|
+
@mutex.synchronize { @value.length.positive? }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def value
|
|
25
|
+
@mutex.synchronize { @value.dup }
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
attr_reader :error
|
|
30
|
+
|
|
31
|
+
def initialize(app, server_errors, extra_middleware = [])
|
|
32
|
+
@app = app
|
|
33
|
+
@extended_app = extra_middleware.inject(@app) do |ex_app, klass|
|
|
34
|
+
klass.new(ex_app)
|
|
35
|
+
end
|
|
36
|
+
@counter = Counter.new
|
|
37
|
+
@server_errors = server_errors
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def pending_requests
|
|
41
|
+
@counter.value
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def pending_requests?
|
|
45
|
+
@counter.positive?
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def clear_error
|
|
49
|
+
@error = nil
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def call(env)
|
|
53
|
+
if env['PATH_INFO'] == '/__identify__'
|
|
54
|
+
[200, {}, [@app.object_id.to_s]]
|
|
55
|
+
else
|
|
56
|
+
request_uri = env['REQUEST_URI']
|
|
57
|
+
@counter.increment(request_uri)
|
|
58
|
+
|
|
59
|
+
begin
|
|
60
|
+
@extended_app.call(env)
|
|
61
|
+
rescue *@server_errors => e
|
|
62
|
+
@error ||= e
|
|
63
|
+
raise e
|
|
64
|
+
ensure
|
|
65
|
+
@counter.decrement(request_uri)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'uri'
|
|
4
|
+
require 'net/http'
|
|
5
|
+
require 'rack'
|
|
6
|
+
require 'capybara/server/middleware'
|
|
7
|
+
require 'capybara/server/animation_disabler'
|
|
8
|
+
require 'capybara/server/checker'
|
|
9
|
+
|
|
10
|
+
module Capybara
|
|
11
|
+
# @api private
|
|
12
|
+
class Server
|
|
13
|
+
class << self
|
|
14
|
+
def ports
|
|
15
|
+
@ports ||= {}
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
attr_reader :app, :port, :host
|
|
20
|
+
|
|
21
|
+
def initialize(app,
|
|
22
|
+
*deprecated_options,
|
|
23
|
+
port: Capybara.server_port,
|
|
24
|
+
host: Capybara.server_host,
|
|
25
|
+
reportable_errors: Capybara.server_errors,
|
|
26
|
+
extra_middleware: [])
|
|
27
|
+
unless deprecated_options.empty?
|
|
28
|
+
warn 'Positional arguments, other than the application, to Server#new are deprecated, please use keyword arguments'
|
|
29
|
+
end
|
|
30
|
+
@app = app
|
|
31
|
+
@extra_middleware = extra_middleware
|
|
32
|
+
@server_thread = nil # suppress warnings
|
|
33
|
+
@host = deprecated_options[1] || host
|
|
34
|
+
@reportable_errors = deprecated_options[2] || reportable_errors
|
|
35
|
+
@port = deprecated_options[0] || port
|
|
36
|
+
@port ||= Capybara::Server.ports[port_key]
|
|
37
|
+
@port ||= find_available_port(host)
|
|
38
|
+
@checker = Checker.new(@host, @port)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def reset_error!
|
|
42
|
+
middleware.clear_error
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def error
|
|
46
|
+
middleware.error
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def using_ssl?
|
|
50
|
+
@checker.ssl?
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def responsive?
|
|
54
|
+
return false if @server_thread&.join(0)
|
|
55
|
+
|
|
56
|
+
res = @checker.request { |http| http.get('/__identify__') }
|
|
57
|
+
|
|
58
|
+
res.body == app.object_id.to_s if res.is_a?(Net::HTTPSuccess) || res.is_a?(Net::HTTPRedirection)
|
|
59
|
+
rescue SystemCallError, Net::ReadTimeout, OpenSSL::SSL::SSLError
|
|
60
|
+
false
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def wait_for_pending_requests
|
|
64
|
+
timer = Capybara::Helpers.timer(expire_in: 60)
|
|
65
|
+
while pending_requests?
|
|
66
|
+
raise "Requests did not finish in 60 seconds: #{middleware.pending_requests}" if timer.expired?
|
|
67
|
+
|
|
68
|
+
sleep 0.01
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def boot
|
|
73
|
+
unless responsive?
|
|
74
|
+
Capybara::Server.ports[port_key] = port
|
|
75
|
+
|
|
76
|
+
@server_thread = Thread.new do
|
|
77
|
+
Capybara.server.call(middleware, port, host)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
timer = Capybara::Helpers.timer(expire_in: 60)
|
|
81
|
+
until responsive?
|
|
82
|
+
raise 'Rack application timed out during boot' if timer.expired?
|
|
83
|
+
|
|
84
|
+
@server_thread.join(0.1)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
self
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def base_url
|
|
92
|
+
"http#{'s' if using_ssl?}://#{host}:#{port}"
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
private
|
|
96
|
+
|
|
97
|
+
def middleware
|
|
98
|
+
@middleware ||= Middleware.new(app, @reportable_errors, @extra_middleware)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def port_key
|
|
102
|
+
Capybara.reuse_server ? app.object_id : middleware.object_id
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def pending_requests?
|
|
106
|
+
middleware.pending_requests?
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def find_available_port(host)
|
|
110
|
+
server = TCPServer.new(host, 0)
|
|
111
|
+
port = server.addr[1]
|
|
112
|
+
server.close
|
|
113
|
+
|
|
114
|
+
# Workaround issue where some platforms (mac, ???) when passed a host
|
|
115
|
+
# of '0.0.0.0' will return a port that is only available on one of the
|
|
116
|
+
# ip addresses that resolves to, but the next binding to that port requires
|
|
117
|
+
# that port to be available on all ips
|
|
118
|
+
server = TCPServer.new(host, port)
|
|
119
|
+
port
|
|
120
|
+
rescue Errno::EADDRINUSE
|
|
121
|
+
retry
|
|
122
|
+
ensure
|
|
123
|
+
server&.close
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'delegate'
|
|
4
|
+
|
|
5
|
+
module Capybara
|
|
6
|
+
class SessionConfig
|
|
7
|
+
OPTIONS = %i[always_include_port run_server default_selector default_max_wait_time ignore_hidden_elements
|
|
8
|
+
automatic_reload match exact exact_text raise_server_errors visible_text_only
|
|
9
|
+
automatic_label_click enable_aria_label save_path asset_host default_host app_host
|
|
10
|
+
server_host server_port server_errors default_set_options disable_animation test_id
|
|
11
|
+
predicates_wait default_normalize_ws w3c_click_offset enable_aria_role default_retry_interval].freeze
|
|
12
|
+
|
|
13
|
+
attr_accessor(*OPTIONS)
|
|
14
|
+
|
|
15
|
+
##
|
|
16
|
+
# @!method always_include_port
|
|
17
|
+
# See {Capybara.configure}
|
|
18
|
+
# @!method run_server
|
|
19
|
+
# See {Capybara.configure}
|
|
20
|
+
# @!method default_selector
|
|
21
|
+
# See {Capybara.configure}
|
|
22
|
+
# @!method default_max_wait_time
|
|
23
|
+
# See {Capybara.configure}
|
|
24
|
+
# @!method default_retry_interval
|
|
25
|
+
# See {Capybara.configure}
|
|
26
|
+
# @!method ignore_hidden_elements
|
|
27
|
+
# See {Capybara.configure}
|
|
28
|
+
# @!method automatic_reload
|
|
29
|
+
# See {Capybara.configure}
|
|
30
|
+
# @!method match
|
|
31
|
+
# See {Capybara.configure}
|
|
32
|
+
# @!method exact
|
|
33
|
+
# See {Capybara.configure}
|
|
34
|
+
# @!method raise_server_errors
|
|
35
|
+
# See {Capybara.configure}
|
|
36
|
+
# @!method visible_text_only
|
|
37
|
+
# See {Capybara.configure}
|
|
38
|
+
# @!method automatic_label_click
|
|
39
|
+
# See {Capybara.configure}
|
|
40
|
+
# @!method enable_aria_label
|
|
41
|
+
# See {Capybara.configure}
|
|
42
|
+
# @!method enable_aria_role
|
|
43
|
+
# See {Capybara.configure}
|
|
44
|
+
# @!method save_path
|
|
45
|
+
# See {Capybara.configure}
|
|
46
|
+
# @!method asset_host
|
|
47
|
+
# See {Capybara.configure}
|
|
48
|
+
# @!method default_host
|
|
49
|
+
# See {Capybara.configure}
|
|
50
|
+
# @!method app_host
|
|
51
|
+
# See {Capybara.configure}
|
|
52
|
+
# @!method server_host
|
|
53
|
+
# See {Capybara.configure}
|
|
54
|
+
# @!method server_port
|
|
55
|
+
# See {Capybara.configure}
|
|
56
|
+
# @!method server_errors
|
|
57
|
+
# See {Capybara.configure}
|
|
58
|
+
# @!method default_set_options
|
|
59
|
+
# See {Capybara.configure}
|
|
60
|
+
# @!method disable_animation
|
|
61
|
+
# See {Capybara.configure}
|
|
62
|
+
# @!method test_id
|
|
63
|
+
# See {Capybara.configure}
|
|
64
|
+
# @!method default_normalize_ws
|
|
65
|
+
# See {Capybara.configure}
|
|
66
|
+
# @!method w3c_click_offset
|
|
67
|
+
# See {Capybara.configure}
|
|
68
|
+
|
|
69
|
+
remove_method :server_host
|
|
70
|
+
|
|
71
|
+
##
|
|
72
|
+
#
|
|
73
|
+
# @return [String] The IP address bound by default server
|
|
74
|
+
#
|
|
75
|
+
def server_host
|
|
76
|
+
@server_host || '127.0.0.1'
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
remove_method :server_errors=
|
|
80
|
+
def server_errors=(errors)
|
|
81
|
+
(@server_errors ||= []).replace(errors.dup)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
remove_method :app_host=
|
|
85
|
+
def app_host=(url)
|
|
86
|
+
unless url.nil? || url.match?(URI::DEFAULT_PARSER.make_regexp)
|
|
87
|
+
raise ArgumentError, "Capybara.app_host should be set to a url (http://www.example.com). Attempted to set #{url.inspect}."
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
@app_host = url
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
remove_method :default_host=
|
|
94
|
+
def default_host=(url)
|
|
95
|
+
unless url.nil? || url.match?(URI::DEFAULT_PARSER.make_regexp)
|
|
96
|
+
raise ArgumentError, "Capybara.default_host should be set to a url (http://www.example.com). Attempted to set #{url.inspect}."
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
@default_host = url
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
remove_method :test_id=
|
|
103
|
+
##
|
|
104
|
+
#
|
|
105
|
+
# Set an attribute to be optionally matched against the locator for builtin selector types.
|
|
106
|
+
# This attribute will be checked by builtin selector types whenever id would normally be checked.
|
|
107
|
+
# If `nil` then it will be ignored.
|
|
108
|
+
#
|
|
109
|
+
# @param [String, Symbol, nil] id Name of the attribute to use as the test id
|
|
110
|
+
#
|
|
111
|
+
def test_id=(id)
|
|
112
|
+
@test_id = id&.to_sym
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def initialize_copy(other)
|
|
116
|
+
super
|
|
117
|
+
@server_errors = @server_errors.dup
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
class ReadOnlySessionConfig < SimpleDelegator
|
|
122
|
+
SessionConfig::OPTIONS.each do |option|
|
|
123
|
+
define_method "#{option}=" do |_|
|
|
124
|
+
raise 'Per session settings are only supported when Capybara.threadsafe == true'
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Capybara
|
|
4
|
+
module SessionMatchers
|
|
5
|
+
##
|
|
6
|
+
# Asserts that the page has the given path.
|
|
7
|
+
# By default, if passed a full url this will compare against the full url,
|
|
8
|
+
# if passed a path only the path+query portion will be compared, if passed a regexp
|
|
9
|
+
# the comparison will depend on the :url option (path+query by default)
|
|
10
|
+
#
|
|
11
|
+
# @!macro current_path_query_params
|
|
12
|
+
# @overload $0(string, **options)
|
|
13
|
+
# @param string [String] The string that the current 'path' should equal
|
|
14
|
+
# @overload $0(regexp, **options)
|
|
15
|
+
# @param regexp [Regexp] The regexp that the current 'path' should match to
|
|
16
|
+
# @option options [Boolean] :url (true if `string` is a full url, otherwise false) Whether the comparison should be done against the full current url or just the path
|
|
17
|
+
# @option options [Boolean] :ignore_query (false) Whether the query portion of the current url/path should be ignored
|
|
18
|
+
# @option options [Numeric] :wait (Capybara.default_max_wait_time) Maximum time that Capybara will wait for the current url/path to eq/match given string/regexp argument
|
|
19
|
+
# @raise [Capybara::ExpectationNotMet] if the assertion hasn't succeeded during wait time
|
|
20
|
+
# @return [true]
|
|
21
|
+
#
|
|
22
|
+
def assert_current_path(path, **options, &optional_filter_block)
|
|
23
|
+
_verify_current_path(path, optional_filter_block, **options) do |query|
|
|
24
|
+
raise Capybara::ExpectationNotMet, query.failure_message unless query.resolves_for?(self)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
##
|
|
29
|
+
# Asserts that the page doesn't have the given path.
|
|
30
|
+
# By default, if passed a full url this will compare against the full url,
|
|
31
|
+
# if passed a path only the path+query portion will be compared, if passed a regexp
|
|
32
|
+
# the comparison will depend on the :url option
|
|
33
|
+
#
|
|
34
|
+
# @macro current_path_query_params
|
|
35
|
+
# @raise [Capybara::ExpectationNotMet] if the assertion hasn't succeeded during wait time
|
|
36
|
+
# @return [true]
|
|
37
|
+
#
|
|
38
|
+
def assert_no_current_path(path, **options, &optional_filter_block)
|
|
39
|
+
_verify_current_path(path, optional_filter_block, **options) do |query|
|
|
40
|
+
raise Capybara::ExpectationNotMet, query.negative_failure_message if query.resolves_for?(self)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
##
|
|
45
|
+
# Checks if the page has the given path.
|
|
46
|
+
# By default, if passed a full url this will compare against the full url,
|
|
47
|
+
# if passed a path only the path+query portion will be compared, if passed a regexp
|
|
48
|
+
# the comparison will depend on the :url option
|
|
49
|
+
#
|
|
50
|
+
# @macro current_path_query_params
|
|
51
|
+
# @return [Boolean]
|
|
52
|
+
#
|
|
53
|
+
def has_current_path?(path, **options, &optional_filter_block)
|
|
54
|
+
make_predicate(options) { assert_current_path(path, **options, &optional_filter_block) }
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
##
|
|
58
|
+
# Checks if the page doesn't have the given path.
|
|
59
|
+
# By default, if passed a full url this will compare against the full url,
|
|
60
|
+
# if passed a path only the path+query portion will be compared, if passed a regexp
|
|
61
|
+
# the comparison will depend on the :url option
|
|
62
|
+
#
|
|
63
|
+
# @macro current_path_query_params
|
|
64
|
+
# @return [Boolean]
|
|
65
|
+
#
|
|
66
|
+
def has_no_current_path?(path, **options, &optional_filter_block)
|
|
67
|
+
make_predicate(options) { assert_no_current_path(path, **options, &optional_filter_block) }
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
private
|
|
71
|
+
|
|
72
|
+
def _verify_current_path(path, filter_block, **options)
|
|
73
|
+
query = Capybara::Queries::CurrentPathQuery.new(path, **options, &filter_block)
|
|
74
|
+
document.synchronize(query.wait) do
|
|
75
|
+
yield(query)
|
|
76
|
+
end
|
|
77
|
+
true
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def make_predicate(options)
|
|
81
|
+
options[:wait] = 0 unless options.key?(:wait) || config.predicates_wait
|
|
82
|
+
yield
|
|
83
|
+
rescue Capybara::ExpectationNotMet
|
|
84
|
+
false
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|