capybara 2.18.0 → 3.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.yardopts +1 -1
- data/History.md +945 -12
- data/License.txt +1 -1
- data/README.md +264 -90
- data/lib/capybara/config.rb +29 -57
- data/lib/capybara/cucumber.rb +2 -3
- data/lib/capybara/driver/base.rb +35 -18
- data/lib/capybara/driver/node.rb +40 -10
- data/lib/capybara/dsl.rb +10 -7
- data/lib/capybara/helpers.rb +70 -31
- data/lib/capybara/minitest/spec.rb +185 -83
- data/lib/capybara/minitest.rb +232 -112
- data/lib/capybara/node/actions.rb +274 -171
- data/lib/capybara/node/base.rb +42 -34
- data/lib/capybara/node/document.rb +15 -3
- data/lib/capybara/node/document_matchers.rb +19 -21
- data/lib/capybara/node/element.rb +362 -135
- data/lib/capybara/node/finders.rb +151 -137
- data/lib/capybara/node/matchers.rb +394 -209
- data/lib/capybara/node/simple.rb +59 -26
- data/lib/capybara/node/whitespace_normalizer.rb +81 -0
- data/lib/capybara/queries/active_element_query.rb +18 -0
- data/lib/capybara/queries/ancestor_query.rb +12 -9
- data/lib/capybara/queries/base_query.rb +39 -28
- data/lib/capybara/queries/current_path_query.rb +21 -27
- data/lib/capybara/queries/match_query.rb +14 -7
- data/lib/capybara/queries/selector_query.rb +659 -149
- data/lib/capybara/queries/sibling_query.rb +11 -9
- data/lib/capybara/queries/style_query.rb +45 -0
- data/lib/capybara/queries/text_query.rb +56 -38
- data/lib/capybara/queries/title_query.rb +8 -11
- data/lib/capybara/rack_test/browser.rb +114 -42
- data/lib/capybara/rack_test/css_handlers.rb +6 -4
- data/lib/capybara/rack_test/driver.rb +22 -17
- data/lib/capybara/rack_test/errors.rb +6 -0
- data/lib/capybara/rack_test/form.rb +93 -58
- data/lib/capybara/rack_test/node.rb +184 -81
- data/lib/capybara/rails.rb +3 -7
- data/lib/capybara/registration_container.rb +41 -0
- data/lib/capybara/registrations/drivers.rb +42 -0
- data/lib/capybara/registrations/patches/puma_ssl.rb +29 -0
- data/lib/capybara/registrations/servers.rb +66 -0
- data/lib/capybara/result.rb +97 -63
- data/lib/capybara/rspec/features.rb +17 -50
- data/lib/capybara/rspec/matcher_proxies.rb +52 -15
- data/lib/capybara/rspec/matchers/base.rb +113 -0
- data/lib/capybara/rspec/matchers/become_closed.rb +33 -0
- data/lib/capybara/rspec/matchers/compound.rb +88 -0
- data/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
- data/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
- data/lib/capybara/rspec/matchers/have_current_path.rb +29 -0
- data/lib/capybara/rspec/matchers/have_selector.rb +69 -0
- data/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
- data/lib/capybara/rspec/matchers/have_text.rb +33 -0
- data/lib/capybara/rspec/matchers/have_title.rb +29 -0
- data/lib/capybara/rspec/matchers/match_selector.rb +27 -0
- data/lib/capybara/rspec/matchers/match_style.rb +43 -0
- data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
- data/lib/capybara/rspec/matchers.rb +146 -310
- data/lib/capybara/rspec.rb +7 -11
- data/lib/capybara/selector/builders/css_builder.rb +84 -0
- data/lib/capybara/selector/builders/xpath_builder.rb +71 -0
- data/lib/capybara/selector/css.rb +85 -13
- data/lib/capybara/selector/definition/button.rb +68 -0
- data/lib/capybara/selector/definition/checkbox.rb +26 -0
- data/lib/capybara/selector/definition/css.rb +10 -0
- data/lib/capybara/selector/definition/datalist_input.rb +35 -0
- data/lib/capybara/selector/definition/datalist_option.rb +25 -0
- data/lib/capybara/selector/definition/element.rb +28 -0
- data/lib/capybara/selector/definition/field.rb +40 -0
- data/lib/capybara/selector/definition/fieldset.rb +14 -0
- data/lib/capybara/selector/definition/file_field.rb +13 -0
- data/lib/capybara/selector/definition/fillable_field.rb +33 -0
- data/lib/capybara/selector/definition/frame.rb +17 -0
- data/lib/capybara/selector/definition/id.rb +6 -0
- data/lib/capybara/selector/definition/label.rb +62 -0
- data/lib/capybara/selector/definition/link.rb +55 -0
- data/lib/capybara/selector/definition/link_or_button.rb +16 -0
- data/lib/capybara/selector/definition/option.rb +27 -0
- data/lib/capybara/selector/definition/radio_button.rb +27 -0
- data/lib/capybara/selector/definition/select.rb +81 -0
- data/lib/capybara/selector/definition/table.rb +109 -0
- data/lib/capybara/selector/definition/table_row.rb +21 -0
- data/lib/capybara/selector/definition/xpath.rb +5 -0
- data/lib/capybara/selector/definition.rb +280 -0
- data/lib/capybara/selector/filter.rb +2 -17
- data/lib/capybara/selector/filter_set.rb +80 -33
- data/lib/capybara/selector/filters/base.rb +50 -6
- data/lib/capybara/selector/filters/expression_filter.rb +8 -26
- data/lib/capybara/selector/filters/locator_filter.rb +29 -0
- data/lib/capybara/selector/filters/node_filter.rb +16 -12
- data/lib/capybara/selector/regexp_disassembler.rb +211 -0
- data/lib/capybara/selector/selector.rb +93 -210
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/lib/capybara/selector.rb +475 -523
- data/lib/capybara/selenium/atoms/getAttribute.min.js +1 -0
- data/lib/capybara/selenium/atoms/isDisplayed.min.js +1 -0
- data/lib/capybara/selenium/atoms/src/getAttribute.js +161 -0
- data/lib/capybara/selenium/atoms/src/isDisplayed.js +454 -0
- data/lib/capybara/selenium/driver.rb +298 -267
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
- data/lib/capybara/selenium/driver_specializations/edge_driver.rb +128 -0
- data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +84 -0
- data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +26 -0
- data/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
- data/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
- data/lib/capybara/selenium/extensions/find.rb +110 -0
- data/lib/capybara/selenium/extensions/html5_drag.rb +229 -0
- data/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
- data/lib/capybara/selenium/extensions/scroll.rb +76 -0
- data/lib/capybara/selenium/node.rb +517 -145
- data/lib/capybara/selenium/nodes/chrome_node.rb +125 -0
- data/lib/capybara/selenium/nodes/edge_node.rb +110 -0
- data/lib/capybara/selenium/nodes/firefox_node.rb +136 -0
- data/lib/capybara/selenium/nodes/ie_node.rb +22 -0
- data/lib/capybara/selenium/nodes/safari_node.rb +118 -0
- data/lib/capybara/selenium/patches/atoms.rb +18 -0
- data/lib/capybara/selenium/patches/is_displayed.rb +16 -0
- data/lib/capybara/selenium/patches/logs.rb +45 -0
- data/lib/capybara/selenium/patches/pause_duration_fix.rb +9 -0
- data/lib/capybara/selenium/patches/persistent_client.rb +20 -0
- data/lib/capybara/server/animation_disabler.rb +80 -0
- data/lib/capybara/server/checker.rb +44 -0
- data/lib/capybara/server/middleware.rb +71 -0
- data/lib/capybara/server.rb +59 -67
- data/lib/capybara/session/config.rb +81 -67
- data/lib/capybara/session/matchers.rb +28 -20
- data/lib/capybara/session.rb +337 -365
- data/lib/capybara/spec/public/jquery.js +5 -5
- data/lib/capybara/spec/public/offset.js +6 -0
- data/lib/capybara/spec/public/test.js +151 -12
- data/lib/capybara/spec/session/accept_alert_spec.rb +12 -11
- data/lib/capybara/spec/session/accept_confirm_spec.rb +6 -5
- data/lib/capybara/spec/session/accept_prompt_spec.rb +10 -10
- data/lib/capybara/spec/session/active_element_spec.rb +31 -0
- data/lib/capybara/spec/session/all_spec.rb +161 -57
- data/lib/capybara/spec/session/ancestor_spec.rb +27 -24
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +68 -38
- data/lib/capybara/spec/session/assert_current_path_spec.rb +75 -0
- data/lib/capybara/spec/session/assert_selector_spec.rb +143 -0
- data/lib/capybara/spec/session/assert_style_spec.rb +26 -0
- data/lib/capybara/spec/session/assert_text_spec.rb +258 -0
- data/lib/capybara/spec/session/{assert_title.rb → assert_title_spec.rb} +22 -12
- data/lib/capybara/spec/session/attach_file_spec.rb +144 -69
- data/lib/capybara/spec/session/body_spec.rb +12 -13
- data/lib/capybara/spec/session/check_spec.rb +117 -55
- data/lib/capybara/spec/session/choose_spec.rb +64 -31
- data/lib/capybara/spec/session/click_button_spec.rb +231 -173
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +55 -35
- data/lib/capybara/spec/session/click_link_spec.rb +93 -58
- data/lib/capybara/spec/session/current_scope_spec.rb +12 -11
- data/lib/capybara/spec/session/current_url_spec.rb +57 -39
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +4 -4
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +3 -2
- data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb} +11 -9
- data/lib/capybara/spec/session/element/match_css_spec.rb +18 -10
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +9 -7
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +71 -57
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +8 -7
- data/lib/capybara/spec/session/evaluate_script_spec.rb +29 -8
- data/lib/capybara/spec/session/execute_script_spec.rb +10 -8
- data/lib/capybara/spec/session/fill_in_spec.rb +134 -43
- data/lib/capybara/spec/session/find_button_spec.rb +25 -24
- data/lib/capybara/spec/session/find_by_id_spec.rb +10 -9
- data/lib/capybara/spec/session/find_field_spec.rb +37 -41
- data/lib/capybara/spec/session/find_link_spec.rb +46 -17
- data/lib/capybara/spec/session/find_spec.rb +260 -145
- data/lib/capybara/spec/session/first_spec.rb +80 -52
- data/lib/capybara/spec/session/frame/frame_title_spec.rb +23 -0
- data/lib/capybara/spec/session/frame/frame_url_spec.rb +23 -0
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +33 -20
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +52 -32
- data/lib/capybara/spec/session/go_back_spec.rb +2 -1
- data/lib/capybara/spec/session/go_forward_spec.rb +2 -1
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +31 -31
- data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
- data/lib/capybara/spec/session/has_any_selectors_spec.rb +29 -0
- data/lib/capybara/spec/session/has_button_spec.rb +100 -13
- data/lib/capybara/spec/session/has_css_spec.rb +272 -137
- data/lib/capybara/spec/session/has_current_path_spec.rb +60 -61
- data/lib/capybara/spec/session/has_element_spec.rb +47 -0
- data/lib/capybara/spec/session/has_field_spec.rb +139 -59
- data/lib/capybara/spec/session/has_link_spec.rb +47 -6
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +42 -40
- data/lib/capybara/spec/session/has_select_spec.rb +107 -72
- data/lib/capybara/spec/session/has_selector_spec.rb +120 -71
- data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
- data/lib/capybara/spec/session/has_table_spec.rb +183 -5
- data/lib/capybara/spec/session/has_text_spec.rb +106 -62
- data/lib/capybara/spec/session/has_title_spec.rb +20 -14
- data/lib/capybara/spec/session/has_xpath_spec.rb +57 -38
- data/lib/capybara/spec/session/{headers.rb → headers_spec.rb} +3 -2
- data/lib/capybara/spec/session/html_spec.rb +14 -6
- data/lib/capybara/spec/session/matches_style_spec.rb +37 -0
- data/lib/capybara/spec/session/node_spec.rb +1024 -153
- data/lib/capybara/spec/session/node_wrapper_spec.rb +39 -0
- data/lib/capybara/spec/session/refresh_spec.rb +12 -6
- data/lib/capybara/spec/session/reset_session_spec.rb +82 -35
- data/lib/capybara/spec/session/{response_code.rb → response_code_spec.rb} +2 -1
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +3 -2
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +8 -12
- data/lib/capybara/spec/session/save_page_spec.rb +42 -55
- data/lib/capybara/spec/session/save_screenshot_spec.rb +16 -14
- data/lib/capybara/spec/session/screenshot_spec.rb +2 -2
- data/lib/capybara/spec/session/scroll_spec.rb +119 -0
- data/lib/capybara/spec/session/select_spec.rb +107 -81
- data/lib/capybara/spec/session/selectors_spec.rb +52 -19
- data/lib/capybara/spec/session/sibling_spec.rb +10 -10
- data/lib/capybara/spec/session/text_spec.rb +37 -21
- data/lib/capybara/spec/session/title_spec.rb +17 -5
- data/lib/capybara/spec/session/uncheck_spec.rb +43 -23
- data/lib/capybara/spec/session/unselect_spec.rb +39 -38
- data/lib/capybara/spec/session/visit_spec.rb +85 -53
- data/lib/capybara/spec/session/window/become_closed_spec.rb +24 -20
- data/lib/capybara/spec/session/window/current_window_spec.rb +5 -3
- data/lib/capybara/spec/session/window/open_new_window_spec.rb +5 -3
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +27 -22
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +12 -6
- data/lib/capybara/spec/session/window/window_spec.rb +97 -63
- data/lib/capybara/spec/session/window/windows_spec.rb +12 -10
- data/lib/capybara/spec/session/window/within_window_spec.rb +31 -86
- data/lib/capybara/spec/session/within_spec.rb +83 -44
- data/lib/capybara/spec/spec_helper.rb +54 -44
- data/lib/capybara/spec/test_app.rb +158 -43
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/form.erb +163 -42
- data/lib/capybara/spec/views/frame_child.erb +4 -3
- data/lib/capybara/spec/views/frame_one.erb +2 -1
- data/lib/capybara/spec/views/frame_parent.erb +1 -1
- data/lib/capybara/spec/views/frame_two.erb +1 -1
- data/lib/capybara/spec/views/initial_alert.erb +2 -1
- data/lib/capybara/spec/views/layout.erb +10 -0
- data/lib/capybara/spec/views/obscured.erb +47 -0
- data/lib/capybara/spec/views/offset.erb +33 -0
- data/lib/capybara/spec/views/path.erb +2 -2
- data/lib/capybara/spec/views/popup_one.erb +1 -1
- data/lib/capybara/spec/views/popup_two.erb +1 -1
- data/lib/capybara/spec/views/react.erb +45 -0
- data/lib/capybara/spec/views/scroll.erb +21 -0
- data/lib/capybara/spec/views/spatial.erb +31 -0
- data/lib/capybara/spec/views/tables.erb +68 -1
- data/lib/capybara/spec/views/with_animation.erb +81 -0
- data/lib/capybara/spec/views/with_base_tag.erb +2 -2
- data/lib/capybara/spec/views/with_dragula.erb +24 -0
- data/lib/capybara/spec/views/with_fixed_header_footer.erb +2 -1
- data/lib/capybara/spec/views/with_hover.erb +3 -2
- data/lib/capybara/spec/views/with_hover1.erb +10 -0
- data/lib/capybara/spec/views/with_html.erb +69 -12
- data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
- data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
- data/lib/capybara/spec/views/with_js.erb +30 -5
- data/lib/capybara/spec/views/with_jstree.erb +26 -0
- data/lib/capybara/spec/views/with_namespace.erb +21 -0
- data/lib/capybara/spec/views/with_scope.erb +2 -2
- data/lib/capybara/spec/views/with_scope_other.erb +6 -0
- data/lib/capybara/spec/views/with_shadow.erb +31 -0
- data/lib/capybara/spec/views/with_slow_unload.erb +2 -1
- data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
- data/lib/capybara/spec/views/with_unload_alert.erb +1 -0
- data/lib/capybara/spec/views/with_windows.erb +1 -1
- data/lib/capybara/spec/views/within_frames.erb +5 -2
- data/lib/capybara/version.rb +2 -1
- data/lib/capybara/window.rb +36 -34
- data/lib/capybara.rb +134 -107
- data/spec/basic_node_spec.rb +60 -34
- data/spec/capybara_spec.rb +63 -88
- data/spec/counter_spec.rb +35 -0
- data/spec/css_builder_spec.rb +101 -0
- data/spec/css_splitter_spec.rb +38 -0
- data/spec/dsl_spec.rb +85 -64
- data/spec/filter_set_spec.rb +27 -9
- data/spec/fixtures/certificate.pem +25 -0
- data/spec/fixtures/key.pem +27 -0
- data/spec/fixtures/selenium_driver_rspec_failure.rb +6 -5
- data/spec/fixtures/selenium_driver_rspec_success.rb +6 -5
- data/spec/minitest_spec.rb +52 -7
- data/spec/minitest_spec_spec.rb +94 -63
- data/spec/per_session_config_spec.rb +14 -13
- data/spec/rack_test_spec.rb +194 -125
- data/spec/regexp_dissassembler_spec.rb +250 -0
- data/spec/result_spec.rb +111 -50
- data/spec/rspec/features_spec.rb +37 -31
- data/spec/rspec/scenarios_spec.rb +10 -8
- data/spec/rspec/shared_spec_matchers.rb +473 -422
- data/spec/rspec/views_spec.rb +5 -3
- data/spec/rspec_matchers_spec.rb +52 -11
- data/spec/rspec_spec.rb +109 -89
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +397 -68
- data/spec/selenium_spec_chrome.rb +187 -40
- data/spec/selenium_spec_chrome_remote.rb +96 -0
- data/spec/selenium_spec_edge.rb +60 -0
- data/spec/selenium_spec_firefox.rb +201 -41
- data/spec/selenium_spec_firefox_remote.rb +94 -0
- data/spec/selenium_spec_ie.rb +149 -0
- data/spec/selenium_spec_safari.rb +162 -0
- data/spec/server_spec.rb +213 -102
- data/spec/session_spec.rb +53 -16
- data/spec/shared_selenium_node.rb +79 -0
- data/spec/shared_selenium_session.rb +473 -122
- data/spec/spec_helper.rb +126 -7
- data/spec/whitespace_normalizer_spec.rb +54 -0
- data/spec/xpath_builder_spec.rb +93 -0
- metadata +355 -73
- data/.yard/templates_custom/default/class/html/selectors.erb +0 -38
- data/.yard/templates_custom/default/class/html/setup.rb +0 -17
- data/.yard/yard_extensions.rb +0 -78
- data/lib/capybara/query.rb +0 -7
- data/lib/capybara/rspec/compound.rb +0 -95
- data/lib/capybara/spec/session/assert_current_path.rb +0 -72
- data/lib/capybara/spec/session/assert_selector.rb +0 -148
- data/lib/capybara/spec/session/assert_text.rb +0 -234
- data/lib/capybara/spec/session/source_spec.rb +0 -0
- data/lib/capybara/spec/views/with_title.erb +0 -5
- data/spec/selenium_spec_marionette.rb +0 -127
data/spec/dsl_spec.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
require 'spec_helper'
|
|
3
4
|
require 'capybara/dsl'
|
|
4
5
|
|
|
@@ -6,20 +7,24 @@ class TestClass
|
|
|
6
7
|
include Capybara::DSL
|
|
7
8
|
end
|
|
8
9
|
|
|
9
|
-
Capybara::SpecHelper.run_specs TestClass.new,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
:
|
|
13
|
-
:
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
10
|
+
Capybara::SpecHelper.run_specs TestClass.new, 'DSL', capybara_skip: %i[
|
|
11
|
+
js modals screenshot frames windows send_keys server hover about_scheme psc download css driver scroll spatial html_validation shadow_dom active_element
|
|
12
|
+
] do |example|
|
|
13
|
+
case example.metadata[:full_description]
|
|
14
|
+
when /has_css\? should support case insensitive :class and :id options/
|
|
15
|
+
pending "Nokogiri doesn't support case insensitive CSS attribute matchers"
|
|
16
|
+
when /#click_button should follow permanent redirects that maintain method/
|
|
17
|
+
pending "Rack < 2 doesn't support 308" if Gem.loaded_specs['rack'].version < Gem::Version.new('2.0.0')
|
|
18
|
+
when /#attach_file with multipart form should send prior hidden field if no file submitted/
|
|
19
|
+
skip 'Rack-test < 2 needs an empty file to detect multipart form' if Gem.loaded_specs['rack-test'].version < Gem::Version.new('2.0.0')
|
|
20
|
+
end
|
|
21
|
+
end
|
|
21
22
|
|
|
22
23
|
RSpec.describe Capybara::DSL do
|
|
24
|
+
before do
|
|
25
|
+
Capybara.use_default_driver
|
|
26
|
+
end
|
|
27
|
+
|
|
23
28
|
after do
|
|
24
29
|
Capybara.session_name = nil
|
|
25
30
|
Capybara.default_driver = nil
|
|
@@ -29,42 +34,42 @@ RSpec.describe Capybara::DSL do
|
|
|
29
34
|
end
|
|
30
35
|
|
|
31
36
|
describe '#default_driver' do
|
|
32
|
-
it
|
|
37
|
+
it 'should default to rack_test' do
|
|
33
38
|
expect(Capybara.default_driver).to eq(:rack_test)
|
|
34
39
|
end
|
|
35
40
|
|
|
36
|
-
it
|
|
41
|
+
it 'should be changeable' do
|
|
37
42
|
Capybara.default_driver = :culerity
|
|
38
43
|
expect(Capybara.default_driver).to eq(:culerity)
|
|
39
44
|
end
|
|
40
45
|
end
|
|
41
46
|
|
|
42
47
|
describe '#current_driver' do
|
|
43
|
-
it
|
|
48
|
+
it 'should default to the default driver' do
|
|
44
49
|
expect(Capybara.current_driver).to eq(:rack_test)
|
|
45
50
|
Capybara.default_driver = :culerity
|
|
46
51
|
expect(Capybara.current_driver).to eq(:culerity)
|
|
47
52
|
end
|
|
48
53
|
|
|
49
|
-
it
|
|
54
|
+
it 'should be changeable' do
|
|
50
55
|
Capybara.current_driver = :culerity
|
|
51
56
|
expect(Capybara.current_driver).to eq(:culerity)
|
|
52
57
|
end
|
|
53
58
|
end
|
|
54
59
|
|
|
55
60
|
describe '#javascript_driver' do
|
|
56
|
-
it
|
|
61
|
+
it 'should default to selenium' do
|
|
57
62
|
expect(Capybara.javascript_driver).to eq(:selenium)
|
|
58
63
|
end
|
|
59
64
|
|
|
60
|
-
it
|
|
65
|
+
it 'should be changeable' do
|
|
61
66
|
Capybara.javascript_driver = :culerity
|
|
62
67
|
expect(Capybara.javascript_driver).to eq(:culerity)
|
|
63
68
|
end
|
|
64
69
|
end
|
|
65
70
|
|
|
66
71
|
describe '#use_default_driver' do
|
|
67
|
-
it
|
|
72
|
+
it 'should restore the default driver' do
|
|
68
73
|
Capybara.current_driver = :culerity
|
|
69
74
|
Capybara.use_default_driver
|
|
70
75
|
expect(Capybara.current_driver).to eq(:rack_test)
|
|
@@ -73,7 +78,7 @@ RSpec.describe Capybara::DSL do
|
|
|
73
78
|
|
|
74
79
|
describe '#using_driver' do
|
|
75
80
|
before do
|
|
76
|
-
expect(Capybara.current_driver).not_to eq(:selenium)
|
|
81
|
+
expect(Capybara.current_driver).not_to eq(:selenium) # rubocop:disable RSpec/ExpectInHook
|
|
77
82
|
end
|
|
78
83
|
|
|
79
84
|
it 'should set the driver using Capybara.current_driver=' do
|
|
@@ -92,8 +97,8 @@ RSpec.describe Capybara::DSL do
|
|
|
92
97
|
it 'should reset the driver even if an exception occurs' do
|
|
93
98
|
driver_before_block = Capybara.current_driver
|
|
94
99
|
begin
|
|
95
|
-
Capybara.using_driver(:selenium) { raise
|
|
96
|
-
rescue Exception
|
|
100
|
+
Capybara.using_driver(:selenium) { raise 'ohnoes!' }
|
|
101
|
+
rescue Exception # rubocop:disable Lint/RescueException,Lint/SuppressedException
|
|
97
102
|
end
|
|
98
103
|
expect(Capybara.current_driver).to eq(driver_before_block)
|
|
99
104
|
end
|
|
@@ -112,20 +117,17 @@ RSpec.describe Capybara::DSL do
|
|
|
112
117
|
it 'should yield the passed block' do
|
|
113
118
|
called = false
|
|
114
119
|
Capybara.using_driver(:selenium) { called = true }
|
|
115
|
-
expect(called).to
|
|
120
|
+
expect(called).to be(true)
|
|
116
121
|
end
|
|
117
122
|
end
|
|
118
123
|
|
|
124
|
+
# rubocop:disable RSpec/InstanceVariable
|
|
119
125
|
describe '#using_wait_time' do
|
|
120
|
-
before
|
|
121
|
-
@previous_wait_time = Capybara.default_max_wait_time
|
|
122
|
-
end
|
|
126
|
+
before { @previous_wait_time = Capybara.default_max_wait_time }
|
|
123
127
|
|
|
124
|
-
after
|
|
125
|
-
Capybara.default_max_wait_time = @previous_wait_time
|
|
126
|
-
end
|
|
128
|
+
after { Capybara.default_max_wait_time = @previous_wait_time }
|
|
127
129
|
|
|
128
|
-
it
|
|
130
|
+
it 'should switch the wait time and switch it back' do
|
|
129
131
|
in_block = nil
|
|
130
132
|
Capybara.using_wait_time 6 do
|
|
131
133
|
in_block = Capybara.default_max_wait_time
|
|
@@ -134,40 +136,41 @@ RSpec.describe Capybara::DSL do
|
|
|
134
136
|
expect(Capybara.default_max_wait_time).to eq(@previous_wait_time)
|
|
135
137
|
end
|
|
136
138
|
|
|
137
|
-
it
|
|
139
|
+
it 'should ensure wait time is reset' do
|
|
138
140
|
expect do
|
|
139
141
|
Capybara.using_wait_time 6 do
|
|
140
|
-
raise
|
|
142
|
+
raise 'hell'
|
|
141
143
|
end
|
|
142
|
-
end.to raise_error(RuntimeError,
|
|
144
|
+
end.to raise_error(RuntimeError, 'hell')
|
|
143
145
|
expect(Capybara.default_max_wait_time).to eq(@previous_wait_time)
|
|
144
146
|
end
|
|
145
147
|
end
|
|
148
|
+
# rubocop:enable RSpec/InstanceVariable
|
|
146
149
|
|
|
147
150
|
describe '#app' do
|
|
148
|
-
it
|
|
149
|
-
Capybara.app =
|
|
151
|
+
it 'should be changeable' do
|
|
152
|
+
Capybara.app = 'foobar'
|
|
150
153
|
expect(Capybara.app).to eq('foobar')
|
|
151
154
|
end
|
|
152
155
|
end
|
|
153
156
|
|
|
154
157
|
describe '#current_session' do
|
|
155
|
-
it
|
|
158
|
+
it 'should choose a session object of the current driver type' do
|
|
156
159
|
expect(Capybara.current_session).to be_a(Capybara::Session)
|
|
157
160
|
end
|
|
158
161
|
|
|
159
|
-
it
|
|
162
|
+
it 'should use #app as the application' do
|
|
160
163
|
Capybara.app = proc {}
|
|
161
164
|
expect(Capybara.current_session.app).to eq(Capybara.app)
|
|
162
165
|
end
|
|
163
166
|
|
|
164
|
-
it
|
|
167
|
+
it 'should change with the current driver' do
|
|
165
168
|
expect(Capybara.current_session.mode).to eq(:rack_test)
|
|
166
169
|
Capybara.current_driver = :selenium
|
|
167
170
|
expect(Capybara.current_session.mode).to eq(:selenium)
|
|
168
171
|
end
|
|
169
172
|
|
|
170
|
-
it
|
|
173
|
+
it 'should be persistent even across driver changes' do
|
|
171
174
|
object_id = Capybara.current_session.object_id
|
|
172
175
|
expect(Capybara.current_session.object_id).to eq(object_id)
|
|
173
176
|
Capybara.current_driver = :selenium
|
|
@@ -178,7 +181,7 @@ RSpec.describe Capybara::DSL do
|
|
|
178
181
|
expect(Capybara.current_session.object_id).to eq(object_id)
|
|
179
182
|
end
|
|
180
183
|
|
|
181
|
-
it
|
|
184
|
+
it 'should change when changing application' do
|
|
182
185
|
object_id = Capybara.current_session.object_id
|
|
183
186
|
expect(Capybara.current_session.object_id).to eq(object_id)
|
|
184
187
|
Capybara.app = proc {}
|
|
@@ -186,7 +189,7 @@ RSpec.describe Capybara::DSL do
|
|
|
186
189
|
expect(Capybara.current_session.app).to eq(Capybara.app)
|
|
187
190
|
end
|
|
188
191
|
|
|
189
|
-
it
|
|
192
|
+
it 'should change when the session name changes' do
|
|
190
193
|
object_id = Capybara.current_session.object_id
|
|
191
194
|
Capybara.session_name = :administrator
|
|
192
195
|
expect(Capybara.session_name).to eq(:administrator)
|
|
@@ -197,8 +200,8 @@ RSpec.describe Capybara::DSL do
|
|
|
197
200
|
end
|
|
198
201
|
end
|
|
199
202
|
|
|
200
|
-
describe
|
|
201
|
-
it
|
|
203
|
+
describe '#using_session' do
|
|
204
|
+
it 'should change the session name for the duration of the block' do
|
|
202
205
|
expect(Capybara.session_name).to eq(:default)
|
|
203
206
|
Capybara.using_session(:administrator) do
|
|
204
207
|
expect(Capybara.session_name).to eq(:administrator)
|
|
@@ -206,23 +209,23 @@ RSpec.describe Capybara::DSL do
|
|
|
206
209
|
expect(Capybara.session_name).to eq(:default)
|
|
207
210
|
end
|
|
208
211
|
|
|
209
|
-
it
|
|
212
|
+
it 'should reset the session to the default, even if an exception occurs' do
|
|
210
213
|
begin
|
|
211
214
|
Capybara.using_session(:raise) do
|
|
212
215
|
raise
|
|
213
216
|
end
|
|
214
|
-
rescue Exception
|
|
217
|
+
rescue Exception # rubocop:disable Lint/RescueException,Lint/SuppressedException
|
|
215
218
|
end
|
|
216
219
|
expect(Capybara.session_name).to eq(:default)
|
|
217
220
|
end
|
|
218
221
|
|
|
219
|
-
it
|
|
222
|
+
it 'should yield the passed block' do
|
|
220
223
|
called = false
|
|
221
224
|
Capybara.using_session(:administrator) { called = true }
|
|
222
|
-
expect(called).to
|
|
225
|
+
expect(called).to be(true)
|
|
223
226
|
end
|
|
224
227
|
|
|
225
|
-
it
|
|
228
|
+
it 'should be nestable' do
|
|
226
229
|
Capybara.using_session(:outer) do
|
|
227
230
|
expect(Capybara.session_name).to eq(:outer)
|
|
228
231
|
Capybara.using_session(:inner) do
|
|
@@ -232,39 +235,57 @@ RSpec.describe Capybara::DSL do
|
|
|
232
235
|
end
|
|
233
236
|
expect(Capybara.session_name).to eq(:default)
|
|
234
237
|
end
|
|
238
|
+
|
|
239
|
+
it 'should allow a session object' do
|
|
240
|
+
original_session = Capybara.current_session
|
|
241
|
+
new_session = Capybara::Session.new(:rack_test, proc {})
|
|
242
|
+
Capybara.using_session(new_session) do
|
|
243
|
+
expect(Capybara.current_session).to eq(new_session)
|
|
244
|
+
end
|
|
245
|
+
expect(Capybara.current_session).to eq(original_session)
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
it 'should pass the new session if block accepts' do
|
|
249
|
+
original_session = Capybara.current_session
|
|
250
|
+
Capybara.using_session(:administrator) do |admin_session, prev_session|
|
|
251
|
+
expect(admin_session).to be(Capybara.current_session)
|
|
252
|
+
expect(prev_session).to be(original_session)
|
|
253
|
+
expect(prev_session).not_to be(admin_session)
|
|
254
|
+
end
|
|
255
|
+
end
|
|
235
256
|
end
|
|
236
257
|
|
|
237
|
-
describe
|
|
238
|
-
it
|
|
258
|
+
describe '#session_name' do
|
|
259
|
+
it 'should default to :default' do
|
|
239
260
|
expect(Capybara.session_name).to eq(:default)
|
|
240
261
|
end
|
|
241
262
|
end
|
|
242
263
|
|
|
243
264
|
describe 'the DSL' do
|
|
244
|
-
|
|
245
|
-
@session = Class.new { include Capybara::DSL }.new
|
|
246
|
-
end
|
|
265
|
+
let(:session) { Class.new { include Capybara::DSL }.new }
|
|
247
266
|
|
|
248
|
-
it
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
expect(
|
|
267
|
+
it 'should be possible to include it in another class' do
|
|
268
|
+
session.visit('/with_html')
|
|
269
|
+
session.click_link('ullamco')
|
|
270
|
+
expect(session.body).to include('Another World')
|
|
252
271
|
end
|
|
253
272
|
|
|
254
273
|
it "should provide a 'page' shortcut for more expressive tests" do
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
expect(
|
|
274
|
+
session.page.visit('/with_html')
|
|
275
|
+
session.page.click_link('ullamco')
|
|
276
|
+
expect(session.page.body).to include('Another World')
|
|
258
277
|
end
|
|
259
278
|
|
|
260
279
|
it "should provide an 'using_session' shortcut" do
|
|
261
|
-
|
|
262
|
-
|
|
280
|
+
allow(Capybara).to receive(:using_session)
|
|
281
|
+
session.using_session(:name)
|
|
282
|
+
expect(Capybara).to have_received(:using_session).with(:name)
|
|
263
283
|
end
|
|
264
284
|
|
|
265
285
|
it "should provide a 'using_wait_time' shortcut" do
|
|
266
|
-
|
|
267
|
-
|
|
286
|
+
allow(Capybara).to receive(:using_wait_time)
|
|
287
|
+
session.using_wait_time(6)
|
|
288
|
+
expect(Capybara).to have_received(:using_wait_time).with(6)
|
|
268
289
|
end
|
|
269
290
|
end
|
|
270
291
|
end
|
data/spec/filter_set_spec.rb
CHANGED
|
@@ -1,28 +1,46 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
require 'spec_helper'
|
|
3
4
|
|
|
4
5
|
RSpec.describe Capybara::Selector::FilterSet do
|
|
5
6
|
after do
|
|
6
|
-
|
|
7
|
+
described_class.remove(:test)
|
|
7
8
|
end
|
|
8
9
|
|
|
9
|
-
it
|
|
10
|
-
fs =
|
|
11
|
-
|
|
12
|
-
expression_filter(:expression_test, :boolean) { |
|
|
10
|
+
it 'allows node filters' do
|
|
11
|
+
fs = described_class.add(:test) do
|
|
12
|
+
node_filter(:node_test, :boolean) { |_node, _value| true }
|
|
13
|
+
expression_filter(:expression_test, :boolean) { |_expr, _value| true }
|
|
13
14
|
end
|
|
14
15
|
|
|
15
16
|
expect(fs.node_filters.keys).to include(:node_test)
|
|
16
17
|
expect(fs.node_filters.keys).not_to include(:expression_test)
|
|
17
18
|
end
|
|
18
19
|
|
|
19
|
-
it
|
|
20
|
-
fs =
|
|
21
|
-
|
|
22
|
-
expression_filter(:expression_test, :boolean) { |
|
|
20
|
+
it 'allows expression filters' do
|
|
21
|
+
fs = described_class.add(:test) do
|
|
22
|
+
node_filter(:node_test, :boolean) { |_node, _value| true }
|
|
23
|
+
expression_filter(:expression_test, :boolean) { |_expr, _value| true }
|
|
23
24
|
end
|
|
24
25
|
|
|
25
26
|
expect(fs.expression_filters.keys).to include(:expression_test)
|
|
26
27
|
expect(fs.expression_filters.keys).not_to include(:node_test)
|
|
27
28
|
end
|
|
29
|
+
|
|
30
|
+
it 'allows node filter and expression filter with the same name' do
|
|
31
|
+
fs = described_class.add(:test) do
|
|
32
|
+
node_filter(:test, :boolean) { |_node, _value| true }
|
|
33
|
+
expression_filter(:test, :boolean) { |_expr, _value| true }
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
expect(fs.expression_filters[:test]).not_to eq fs.node_filters[:test]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'allows `filter` as an alias of `node_filter`' do
|
|
40
|
+
fs = described_class.add(:test) do
|
|
41
|
+
filter(:node_test, :boolean) { |_node, _value| true }
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
expect(fs.node_filters.keys).to include(:node_test)
|
|
45
|
+
end
|
|
28
46
|
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIEITCCAwmgAwIBAgIJALROkwd1gZHQMA0GCSqGSIb3DQEBBQUAMGgxCzAJBgNV
|
|
3
|
+
BAYTAlVTMQswCQYDVQQIEwJDQTERMA8GA1UEChMIQ2FweWJhcmExFjAUBgNVBAMT
|
|
4
|
+
DWNhcHliYXJhLnRlc3QxITAfBgkqhkiG9w0BCQEWEnR3YWxwb2xlQGdtYWlsLmNv
|
|
5
|
+
bTAeFw0xODA1MDEyMDI5NDVaFw0yODA0MjgyMDI5NDVaMGgxCzAJBgNVBAYTAlVT
|
|
6
|
+
MQswCQYDVQQIEwJDQTERMA8GA1UEChMIQ2FweWJhcmExFjAUBgNVBAMTDWNhcHli
|
|
7
|
+
YXJhLnRlc3QxITAfBgkqhkiG9w0BCQEWEnR3YWxwb2xlQGdtYWlsLmNvbTCCASIw
|
|
8
|
+
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7icqMv9uApxRXlcIQ3hSEfmULk
|
|
9
|
+
7CLT1aUAjEmTiqy8TkFqOeSuA3elnbVBhOW+emrb1uUyje20LvEOHbqYYw90ezlV
|
|
10
|
+
jqNWUapawqjxb+q7KVNpA5uDCtOHIC/1Z1kxQ+yZP/8St4SvnLGUMsUhu0h+ywJa
|
|
11
|
+
iGZ2xy8wdfjABUiUImRESdNkT7Xs0wxQGY0/FZ4K5Sec4kroOuvdxKKhyf5Js5xS
|
|
12
|
+
NRv2tXSMWlKHbYEvYzsVtFgv/4GjqN4wVvbfJmsS8thcyrSYSMN7eE0R6dcbJaLM
|
|
13
|
+
P/GTiw669zPJP164K84QoabLClgwyG+7mqjm7jutq9qXipwyrGsf/WR5fkUCAwEA
|
|
14
|
+
AaOBzTCByjAdBgNVHQ4EFgQU4ut9c0oB2OGMlN/nvn0Y7twBzJowgZoGA1UdIwSB
|
|
15
|
+
kjCBj4AU4ut9c0oB2OGMlN/nvn0Y7twBzJqhbKRqMGgxCzAJBgNVBAYTAlVTMQsw
|
|
16
|
+
CQYDVQQIEwJDQTERMA8GA1UEChMIQ2FweWJhcmExFjAUBgNVBAMTDWNhcHliYXJh
|
|
17
|
+
LnRlc3QxITAfBgkqhkiG9w0BCQEWEnR3YWxwb2xlQGdtYWlsLmNvbYIJALROkwd1
|
|
18
|
+
gZHQMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAANtqdDrdehBt20s
|
|
19
|
+
IVOsVzOp+tJI8pn6G62WJcZWGsvLLfx6Y6eJSP24r5NW4v39cqCgE76J2znzKxeo
|
|
20
|
+
VIShAJ1SLodR0GwzFGsl3TVKVoce6gBWZNXgkZyJTNqKGWeme8CH1EG3TqYlcybt
|
|
21
|
+
EXWLQ6wKndD+uHJIfqUy7HfaUv+TghJGLkv8QYqcAWILQko4xqZ1NULDQ2uhjxei
|
|
22
|
+
oaQlK9teHlVaH87dONesAg3f5rh9j6nvzGiC/T8ycdEhn/DxJMxRS2+mVZqKkk7U
|
|
23
|
+
60+e9Foc6qTW8UaMShIFYMspoRnr9baBxzxh9V9LZznwqVTf3vuEIck2l2j2KL/R
|
|
24
|
+
SOBenCM=
|
|
25
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
|
2
|
+
MIIEogIBAAKCAQEAvuJyoy/24CnFFeVwhDeFIR+ZQuTsItPVpQCMSZOKrLxOQWo5
|
|
3
|
+
5K4Dd6WdtUGE5b56atvW5TKN7bQu8Q4duphjD3R7OVWOo1ZRqlrCqPFv6rspU2kD
|
|
4
|
+
m4MK04cgL/VnWTFD7Jk//xK3hK+csZQyxSG7SH7LAlqIZnbHLzB1+MAFSJQiZERJ
|
|
5
|
+
02RPtezTDFAZjT8VngrlJ5ziSug6693EoqHJ/kmznFI1G/a1dIxaUodtgS9jOxW0
|
|
6
|
+
WC//gaOo3jBW9t8maxLy2FzKtJhIw3t4TRHp1xslosw/8ZOLDrr3M8k/XrgrzhCh
|
|
7
|
+
pssKWDDIb7uaqObuO62r2peKnDKsax/9ZHl+RQIDAQABAoIBABhZepYmgC+IJIPu
|
|
8
|
+
iLPVAT6AcWR/H0AyFYa+0yZvk7kFLFZb3pa1O+v/TGbavMEx0xvef0Mtd71ixrop
|
|
9
|
+
OtGarshB65Ycu91KHZDFkx9J7STcSyFAvB0SUkc5bXmwrEZMaoW75tX65T4fyLU+
|
|
10
|
+
WlubOfC9e9gJBG1NqYrze5kHpaTkR8pBaSxECns5y2HLaMvs1t1kK7snqtGHFRAb
|
|
11
|
+
deAUl0ONENaO6PF797yM3bsIEgnljdKvaVP3kYq/eAzH4jyw+qG/xq0bZ+nalJzM
|
|
12
|
+
IL7xRSR/Yak7WZ3QUh99t3dng/z3De4yvhBLq/mc2mIVvt7aERPo/aDG4SrmQ9Jw
|
|
13
|
+
f1GUT+ECgYEA+i96w2zPHkq0djuuhNaa/R0vybD9hVCdB7enQ8skBzQAQyhp9X9W
|
|
14
|
+
by38VAbFRVIMrzdfbvwSFrE3Nd9BvyLWl16G+MVu+hq0jhM9p44a62vXvfgQmfFh
|
|
15
|
+
iXyGkzCTufeLEzOFnP8S+ezacodK1hbQTjllUndn6NUhXcbfozTPfx8CgYEAw1Il
|
|
16
|
+
xqfU7NkVX6UP/FvTx9aBKqwrD8YOPn9nj26Q45zVbmHJZZIvywlsMDCiJ6JJawEa
|
|
17
|
+
GSkiZTDpypEvS/2UtLEY0zfbSbQGkBTnagHIFAuVh0AD1EP+kCcnrxA5Vjr8v0WE
|
|
18
|
+
B0HBfMgoZxa8rmHMpPhrlCCo1ectRgu+dgzEKhsCgYAQ17lwBpc69tSHUSVClCAD
|
|
19
|
+
AkABWAT5QKARsO91xOs8AOgznTjk6hmrinD+RyZosEliUlv+YMHm/S82VT1b3MCN
|
|
20
|
+
mDOF8+SwubOGDQ2NhieRycTQaS7U7kcetl9o8VBAqMWYGVPZaeKhKKzcIPeMyiRj
|
|
21
|
+
38FOd/Nq3U5NveG4XwnJCQKBgGrzmnfTAsbGf+uliMFYzviIPqZNLC8w9i/Gt8BU
|
|
22
|
+
fMYF5ODSbuNNTxpQiItCtigZtzX+nnnUil76j6o6IbnsmvbuWneeCFetWkKfD7B+
|
|
23
|
+
VT6UsUYkCXS73rK0nghATAUpu6hIumj22qonN+hrDNo390UGOnIcCBdIxQOr/pjJ
|
|
24
|
+
mMitAoGAB3tFzlzZHpCE38IqdHL7CKIML9cYJSOm07nFIEUAKN2bUHGsvMH/tMS1
|
|
25
|
+
I3hyeHxMmYCrOLn7xLqiOVgRjbYS9JiQVdDojqeSvvnLCtY9/lHWi50pqbPfwyfK
|
|
26
|
+
Og6QoFyxjBEsoSilc6dai58VTO6ufhoJXbXX9PcIl7le4dVPnzE=
|
|
27
|
+
-----END RSA PRIVATE KEY-----
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
require 'spec_helper'
|
|
3
4
|
require 'selenium-webdriver'
|
|
4
5
|
|
|
5
6
|
RSpec.describe Capybara::Selenium::Driver do
|
|
6
|
-
it
|
|
7
|
-
options = { browser: (
|
|
8
|
-
|
|
9
|
-
browser
|
|
10
|
-
expect(true).to
|
|
7
|
+
it 'should exit with a non-zero exit status' do
|
|
8
|
+
options = { browser: ENV.fetch('SELENIUM_BROWSER', :firefox).to_sym }
|
|
9
|
+
browser = described_class.new(TestApp, options).browser
|
|
10
|
+
expect(browser).to be_truthy
|
|
11
|
+
expect(true).to be(false) # rubocop:disable RSpec/ExpectActual
|
|
11
12
|
end
|
|
12
13
|
end
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
require 'spec_helper'
|
|
3
4
|
require 'selenium-webdriver'
|
|
4
5
|
|
|
5
6
|
RSpec.describe Capybara::Selenium::Driver do
|
|
6
|
-
it
|
|
7
|
-
options = { browser: (
|
|
8
|
-
|
|
9
|
-
browser
|
|
10
|
-
expect(true).to
|
|
7
|
+
it 'should exit with a zero exit status' do
|
|
8
|
+
options = { browser: ENV.fetch('SELENIUM_BROWSER', :firefox).to_sym }
|
|
9
|
+
browser = described_class.new(TestApp, **options).browser
|
|
10
|
+
expect(browser).to be_truthy
|
|
11
|
+
expect(true).to be(true) # rubocop:disable RSpec/ExpectActual,RSpec/IdenticalEqualityAssertion
|
|
11
12
|
end
|
|
12
13
|
end
|
data/spec/minitest_spec.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
require 'spec_helper'
|
|
3
4
|
require 'capybara/minitest'
|
|
4
5
|
|
|
@@ -14,8 +15,12 @@ class MinitestTest < Minitest::Test
|
|
|
14
15
|
Capybara.reset_sessions!
|
|
15
16
|
end
|
|
16
17
|
|
|
18
|
+
def self.test_order
|
|
19
|
+
:sorted
|
|
20
|
+
end
|
|
21
|
+
|
|
17
22
|
def test_assert_text
|
|
18
|
-
assert_text('Form')
|
|
23
|
+
assert_text('Form', normalize_ws: false)
|
|
19
24
|
assert_no_text('Not on the page')
|
|
20
25
|
refute_text('Also Not on the page')
|
|
21
26
|
end
|
|
@@ -29,15 +34,16 @@ class MinitestTest < Minitest::Test
|
|
|
29
34
|
|
|
30
35
|
def test_assert_current_path
|
|
31
36
|
assert_current_path('/form')
|
|
37
|
+
assert_current_path('/form') { |url| url.query.nil? }
|
|
32
38
|
assert_no_current_path('/not_form')
|
|
33
39
|
refute_current_path('/not_form')
|
|
34
40
|
end
|
|
35
41
|
|
|
36
42
|
def test_assert_xpath
|
|
37
43
|
assert_xpath('.//select[@id="form_title"]')
|
|
38
|
-
assert_xpath('.//select', count: 1) { |el| el[:id] ==
|
|
44
|
+
assert_xpath('.//select', count: 1) { |el| el[:id] == 'form_title' }
|
|
39
45
|
assert_no_xpath('.//select[@id="not_form_title"]')
|
|
40
|
-
assert_no_xpath('.//select') { |el| el[:id] ==
|
|
46
|
+
assert_no_xpath('.//select') { |el| el[:id] == 'not_form_title' }
|
|
41
47
|
refute_xpath('.//select[@id="not_form_title"]')
|
|
42
48
|
end
|
|
43
49
|
|
|
@@ -46,16 +52,31 @@ class MinitestTest < Minitest::Test
|
|
|
46
52
|
assert_no_css('select#not_form_title')
|
|
47
53
|
end
|
|
48
54
|
|
|
55
|
+
def test_assert_selector
|
|
56
|
+
assert_selector(:css, 'select#form_title')
|
|
57
|
+
assert_selector(:xpath, './/select[@id="form_title"]')
|
|
58
|
+
assert_no_selector(:css, 'select#not_form_title')
|
|
59
|
+
assert_no_selector(:xpath, './/select[@id="not_form_title"]')
|
|
60
|
+
refute_selector(:css, 'select#not_form_title')
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_assert_element
|
|
64
|
+
visit('/with_html')
|
|
65
|
+
assert_element('a', text: 'A link')
|
|
66
|
+
assert_element(count: 1) { |el| el.text == 'A link' }
|
|
67
|
+
assert_no_element(text: 'Not on page')
|
|
68
|
+
end
|
|
69
|
+
|
|
49
70
|
def test_assert_link
|
|
50
71
|
visit('/with_html')
|
|
51
72
|
assert_link('A link')
|
|
52
|
-
assert_link(count: 1){ |el| el.text == 'A link'}
|
|
73
|
+
assert_link(count: 1) { |el| el.text == 'A link' }
|
|
53
74
|
assert_no_link('Not on page')
|
|
54
75
|
end
|
|
55
76
|
|
|
56
77
|
def test_assert_button
|
|
57
78
|
assert_button('fresh_btn')
|
|
58
|
-
assert_button(count: 1){ |el| el[:id] == 'fresh_btn' }
|
|
79
|
+
assert_button(count: 1) { |el| el[:id] == 'fresh_btn' }
|
|
59
80
|
assert_no_button('not_btn')
|
|
60
81
|
end
|
|
61
82
|
|
|
@@ -96,6 +117,10 @@ class MinitestTest < Minitest::Test
|
|
|
96
117
|
assert_none_of_selectors(:css, 'input#not_on_page', 'input#also_not_on_page')
|
|
97
118
|
end
|
|
98
119
|
|
|
120
|
+
def test_assert_any_of_selectors
|
|
121
|
+
assert_any_of_selectors(:css, 'input#not_on_page', 'select#form_other_title')
|
|
122
|
+
end
|
|
123
|
+
|
|
99
124
|
def test_assert_matches_selector
|
|
100
125
|
assert_matches_selector(find(:field, 'customer_email'), :field, 'customer_email')
|
|
101
126
|
assert_not_matches_selector(find(:select, 'form_title'), :field, 'customer_email')
|
|
@@ -111,6 +136,22 @@ class MinitestTest < Minitest::Test
|
|
|
111
136
|
assert_matches_xpath(find(:select, 'form_title'), './/select[@id="form_title"]')
|
|
112
137
|
refute_matches_xpath(find(:select, 'form_title'), './/select[@id="form_other_title"]')
|
|
113
138
|
end
|
|
139
|
+
|
|
140
|
+
def test_assert_matches_style
|
|
141
|
+
skip "Rack test doesn't support style" if Capybara.current_driver == :rack_test
|
|
142
|
+
visit('/with_html')
|
|
143
|
+
assert_matches_style(find(:css, '#second'), display: 'inline')
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def test_assert_ancestor
|
|
147
|
+
option = find(:option, 'Finnish')
|
|
148
|
+
assert_ancestor(option, :css, '#form_locale')
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def test_assert_sibling
|
|
152
|
+
option = find(:css, '#form_title').find(:option, 'Mrs')
|
|
153
|
+
assert_sibling(option, :option, 'Mr')
|
|
154
|
+
end
|
|
114
155
|
end
|
|
115
156
|
|
|
116
157
|
RSpec.describe 'capybara/minitest' do
|
|
@@ -119,12 +160,16 @@ RSpec.describe 'capybara/minitest' do
|
|
|
119
160
|
Capybara.app = TestApp
|
|
120
161
|
end
|
|
121
162
|
|
|
122
|
-
|
|
163
|
+
after do
|
|
164
|
+
Capybara.use_default_driver
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
it 'should support minitest' do
|
|
123
168
|
output = StringIO.new
|
|
124
169
|
reporter = Minitest::SummaryReporter.new(output)
|
|
125
170
|
reporter.start
|
|
126
171
|
MinitestTest.run reporter, {}
|
|
127
172
|
reporter.report
|
|
128
|
-
expect(output.string).to include(
|
|
173
|
+
expect(output.string).to include('23 runs, 56 assertions, 0 failures, 0 errors, 1 skips')
|
|
129
174
|
end
|
|
130
175
|
end
|