capybara 3.0.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 +891 -12
- data/License.txt +1 -1
- data/README.md +257 -84
- data/lib/capybara/config.rb +29 -10
- data/lib/capybara/cucumber.rb +1 -1
- data/lib/capybara/driver/base.rb +22 -4
- data/lib/capybara/driver/node.rb +38 -9
- data/lib/capybara/dsl.rb +9 -7
- data/lib/capybara/helpers.rb +57 -8
- data/lib/capybara/minitest/spec.rb +185 -84
- data/lib/capybara/minitest.rb +264 -145
- data/lib/capybara/node/actions.rb +248 -124
- data/lib/capybara/node/base.rb +35 -20
- data/lib/capybara/node/document.rb +14 -2
- data/lib/capybara/node/document_matchers.rb +13 -15
- data/lib/capybara/node/element.rb +350 -113
- data/lib/capybara/node/finders.rb +104 -82
- data/lib/capybara/node/matchers.rb +363 -157
- data/lib/capybara/node/simple.rb +54 -15
- 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 +9 -10
- data/lib/capybara/queries/base_query.rb +25 -18
- data/lib/capybara/queries/current_path_query.rb +16 -6
- data/lib/capybara/queries/match_query.rb +11 -0
- data/lib/capybara/queries/selector_query.rb +617 -104
- data/lib/capybara/queries/sibling_query.rb +9 -7
- data/lib/capybara/queries/style_query.rb +45 -0
- data/lib/capybara/queries/text_query.rb +40 -22
- data/lib/capybara/queries/title_query.rb +2 -2
- data/lib/capybara/rack_test/browser.rb +106 -31
- data/lib/capybara/rack_test/driver.rb +16 -7
- data/lib/capybara/rack_test/errors.rb +6 -0
- data/lib/capybara/rack_test/form.rb +74 -49
- data/lib/capybara/rack_test/node.rb +120 -47
- data/lib/capybara/rails.rb +1 -1
- 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 +87 -53
- data/lib/capybara/rspec/features.rb +8 -10
- data/lib/capybara/rspec/matcher_proxies.rb +39 -18
- 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 +142 -315
- data/lib/capybara/rspec.rb +3 -2
- 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 -8
- 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 +1 -0
- data/lib/capybara/selector/filter_set.rb +72 -28
- data/lib/capybara/selector/filters/base.rb +45 -2
- data/lib/capybara/selector/filters/expression_filter.rb +5 -6
- data/lib/capybara/selector/filters/locator_filter.rb +29 -0
- data/lib/capybara/selector/filters/node_filter.rb +18 -4
- data/lib/capybara/selector/regexp_disassembler.rb +211 -0
- data/lib/capybara/selector/selector.rb +89 -200
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/lib/capybara/selector.rb +474 -534
- 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 +270 -245
- 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 +460 -170
- 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 +58 -67
- data/lib/capybara/session/config.rb +40 -6
- data/lib/capybara/session/matchers.rb +26 -19
- data/lib/capybara/session.rb +252 -194
- 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 +126 -8
- data/lib/capybara/spec/session/accept_alert_spec.rb +11 -11
- data/lib/capybara/spec/session/accept_confirm_spec.rb +3 -3
- data/lib/capybara/spec/session/accept_prompt_spec.rb +9 -10
- data/lib/capybara/spec/session/active_element_spec.rb +31 -0
- data/lib/capybara/spec/session/all_spec.rb +135 -44
- data/lib/capybara/spec/session/ancestor_spec.rb +24 -19
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +67 -38
- data/lib/capybara/spec/session/{assert_current_path.rb → assert_current_path_spec.rb} +20 -18
- 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.rb → assert_text_spec.rb} +76 -52
- data/lib/capybara/spec/session/{assert_title.rb → assert_title_spec.rb} +12 -12
- data/lib/capybara/spec/session/attach_file_spec.rb +126 -72
- data/lib/capybara/spec/session/body_spec.rb +11 -13
- data/lib/capybara/spec/session/check_spec.rb +112 -51
- data/lib/capybara/spec/session/choose_spec.rb +62 -30
- data/lib/capybara/spec/session/click_button_spec.rb +227 -161
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +49 -30
- data/lib/capybara/spec/session/click_link_spec.rb +89 -55
- data/lib/capybara/spec/session/current_scope_spec.rb +8 -8
- data/lib/capybara/spec/session/current_url_spec.rb +44 -37
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +3 -3
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +2 -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 +8 -6
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +70 -56
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +7 -7
- data/lib/capybara/spec/session/evaluate_script_spec.rb +28 -8
- data/lib/capybara/spec/session/execute_script_spec.rb +8 -7
- data/lib/capybara/spec/session/fill_in_spec.rb +110 -44
- data/lib/capybara/spec/session/find_button_spec.rb +23 -23
- data/lib/capybara/spec/session/find_by_id_spec.rb +8 -8
- data/lib/capybara/spec/session/find_field_spec.rb +33 -31
- data/lib/capybara/spec/session/find_link_spec.rb +42 -14
- data/lib/capybara/spec/session/find_spec.rb +251 -142
- data/lib/capybara/spec/session/first_spec.rb +45 -44
- data/lib/capybara/spec/session/frame/frame_title_spec.rb +6 -6
- data/lib/capybara/spec/session/frame/frame_url_spec.rb +6 -6
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +32 -20
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +46 -19
- data/lib/capybara/spec/session/go_back_spec.rb +1 -1
- data/lib/capybara/spec/session/go_forward_spec.rb +1 -1
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +23 -23
- 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 +98 -12
- data/lib/capybara/spec/session/has_css_spec.rb +271 -137
- data/lib/capybara/spec/session/has_current_path_spec.rb +50 -35
- data/lib/capybara/spec/session/has_element_spec.rb +47 -0
- data/lib/capybara/spec/session/has_field_spec.rb +137 -58
- data/lib/capybara/spec/session/has_link_spec.rb +46 -6
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +33 -31
- data/lib/capybara/spec/session/has_select_spec.rb +84 -50
- data/lib/capybara/spec/session/has_selector_spec.rb +117 -69
- data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
- data/lib/capybara/spec/session/has_table_spec.rb +181 -4
- data/lib/capybara/spec/session/has_text_spec.rb +101 -53
- data/lib/capybara/spec/session/has_title_spec.rb +19 -14
- data/lib/capybara/spec/session/has_xpath_spec.rb +56 -38
- data/lib/capybara/spec/session/{headers.rb → headers_spec.rb} +1 -1
- data/lib/capybara/spec/session/html_spec.rb +13 -6
- data/lib/capybara/spec/session/matches_style_spec.rb +37 -0
- data/lib/capybara/spec/session/node_spec.rb +958 -122
- data/lib/capybara/spec/session/node_wrapper_spec.rb +15 -12
- data/lib/capybara/spec/session/refresh_spec.rb +9 -7
- data/lib/capybara/spec/session/reset_session_spec.rb +65 -37
- data/lib/capybara/spec/session/{response_code.rb → response_code_spec.rb} +1 -1
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +2 -2
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +5 -4
- data/lib/capybara/spec/session/save_page_spec.rb +41 -38
- data/lib/capybara/spec/session/save_screenshot_spec.rb +13 -11
- 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 +102 -76
- data/lib/capybara/spec/session/selectors_spec.rb +51 -18
- data/lib/capybara/spec/session/sibling_spec.rb +9 -9
- data/lib/capybara/spec/session/text_spec.rb +26 -24
- data/lib/capybara/spec/session/title_spec.rb +8 -6
- data/lib/capybara/spec/session/uncheck_spec.rb +41 -22
- data/lib/capybara/spec/session/unselect_spec.rb +37 -37
- data/lib/capybara/spec/session/visit_spec.rb +79 -53
- data/lib/capybara/spec/session/window/become_closed_spec.rb +22 -19
- data/lib/capybara/spec/session/window/current_window_spec.rb +4 -3
- data/lib/capybara/spec/session/window/open_new_window_spec.rb +4 -3
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +25 -21
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +10 -5
- data/lib/capybara/spec/session/window/window_spec.rb +88 -54
- data/lib/capybara/spec/session/window/windows_spec.rb +11 -8
- data/lib/capybara/spec/session/window/within_window_spec.rb +17 -16
- data/lib/capybara/spec/session/within_spec.rb +82 -44
- data/lib/capybara/spec/spec_helper.rb +46 -52
- data/lib/capybara/spec/test_app.rb +148 -41
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/form.erb +156 -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 +46 -11
- 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 +1 -1
- data/lib/capybara/version.rb +1 -1
- data/lib/capybara/window.rb +32 -26
- data/lib/capybara.rb +128 -104
- data/spec/basic_node_spec.rb +59 -34
- data/spec/capybara_spec.rb +65 -51
- 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 +84 -55
- data/spec/filter_set_spec.rb +24 -7
- data/spec/fixtures/certificate.pem +25 -0
- data/spec/fixtures/key.pem +27 -0
- data/spec/fixtures/selenium_driver_rspec_failure.rb +5 -5
- data/spec/fixtures/selenium_driver_rspec_success.rb +5 -5
- data/spec/minitest_spec.rb +49 -5
- data/spec/minitest_spec_spec.rb +92 -62
- data/spec/per_session_config_spec.rb +6 -6
- data/spec/rack_test_spec.rb +183 -115
- data/spec/regexp_dissassembler_spec.rb +250 -0
- data/spec/result_spec.rb +99 -39
- data/spec/rspec/features_spec.rb +28 -25
- data/spec/rspec/scenarios_spec.rb +10 -6
- data/spec/rspec/shared_spec_matchers.rb +418 -364
- data/spec/rspec/views_spec.rb +4 -3
- data/spec/rspec_matchers_spec.rb +35 -10
- data/spec/rspec_spec.rb +109 -85
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +392 -62
- data/spec/selenium_spec_chrome.rb +183 -41
- data/spec/selenium_spec_chrome_remote.rb +96 -0
- data/spec/selenium_spec_edge.rb +41 -8
- data/spec/selenium_spec_firefox.rb +228 -0
- data/spec/selenium_spec_firefox_remote.rb +94 -0
- data/spec/selenium_spec_ie.rb +129 -11
- data/spec/selenium_spec_safari.rb +162 -0
- data/spec/server_spec.rb +192 -81
- data/spec/session_spec.rb +52 -16
- data/spec/shared_selenium_node.rb +79 -0
- data/spec/shared_selenium_session.rb +460 -123
- data/spec/spec_helper.rb +124 -2
- data/spec/whitespace_normalizer_spec.rb +54 -0
- data/spec/xpath_builder_spec.rb +93 -0
- metadata +344 -45
- 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/rspec/compound.rb +0 -90
- data/lib/capybara/spec/session/assert_selector.rb +0 -149
- 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 -143
data/spec/dsl_spec.rb
CHANGED
@@ -7,11 +7,24 @@ class TestClass
|
|
7
7
|
include Capybara::DSL
|
8
8
|
end
|
9
9
|
|
10
|
-
Capybara::SpecHelper.run_specs TestClass.new,
|
11
|
-
js modals screenshot frames windows send_keys server hover about_scheme psc
|
12
|
-
]
|
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
|
13
22
|
|
14
23
|
RSpec.describe Capybara::DSL do
|
24
|
+
before do
|
25
|
+
Capybara.use_default_driver
|
26
|
+
end
|
27
|
+
|
15
28
|
after do
|
16
29
|
Capybara.session_name = nil
|
17
30
|
Capybara.default_driver = nil
|
@@ -21,42 +34,42 @@ RSpec.describe Capybara::DSL do
|
|
21
34
|
end
|
22
35
|
|
23
36
|
describe '#default_driver' do
|
24
|
-
it
|
37
|
+
it 'should default to rack_test' do
|
25
38
|
expect(Capybara.default_driver).to eq(:rack_test)
|
26
39
|
end
|
27
40
|
|
28
|
-
it
|
41
|
+
it 'should be changeable' do
|
29
42
|
Capybara.default_driver = :culerity
|
30
43
|
expect(Capybara.default_driver).to eq(:culerity)
|
31
44
|
end
|
32
45
|
end
|
33
46
|
|
34
47
|
describe '#current_driver' do
|
35
|
-
it
|
48
|
+
it 'should default to the default driver' do
|
36
49
|
expect(Capybara.current_driver).to eq(:rack_test)
|
37
50
|
Capybara.default_driver = :culerity
|
38
51
|
expect(Capybara.current_driver).to eq(:culerity)
|
39
52
|
end
|
40
53
|
|
41
|
-
it
|
54
|
+
it 'should be changeable' do
|
42
55
|
Capybara.current_driver = :culerity
|
43
56
|
expect(Capybara.current_driver).to eq(:culerity)
|
44
57
|
end
|
45
58
|
end
|
46
59
|
|
47
60
|
describe '#javascript_driver' do
|
48
|
-
it
|
61
|
+
it 'should default to selenium' do
|
49
62
|
expect(Capybara.javascript_driver).to eq(:selenium)
|
50
63
|
end
|
51
64
|
|
52
|
-
it
|
65
|
+
it 'should be changeable' do
|
53
66
|
Capybara.javascript_driver = :culerity
|
54
67
|
expect(Capybara.javascript_driver).to eq(:culerity)
|
55
68
|
end
|
56
69
|
end
|
57
70
|
|
58
71
|
describe '#use_default_driver' do
|
59
|
-
it
|
72
|
+
it 'should restore the default driver' do
|
60
73
|
Capybara.current_driver = :culerity
|
61
74
|
Capybara.use_default_driver
|
62
75
|
expect(Capybara.current_driver).to eq(:rack_test)
|
@@ -65,7 +78,7 @@ RSpec.describe Capybara::DSL do
|
|
65
78
|
|
66
79
|
describe '#using_driver' do
|
67
80
|
before do
|
68
|
-
expect(Capybara.current_driver).not_to eq(:selenium)
|
81
|
+
expect(Capybara.current_driver).not_to eq(:selenium) # rubocop:disable RSpec/ExpectInHook
|
69
82
|
end
|
70
83
|
|
71
84
|
it 'should set the driver using Capybara.current_driver=' do
|
@@ -84,8 +97,8 @@ RSpec.describe Capybara::DSL do
|
|
84
97
|
it 'should reset the driver even if an exception occurs' do
|
85
98
|
driver_before_block = Capybara.current_driver
|
86
99
|
begin
|
87
|
-
Capybara.using_driver(:selenium) { raise
|
88
|
-
rescue Exception # rubocop:disable Lint/RescueException
|
100
|
+
Capybara.using_driver(:selenium) { raise 'ohnoes!' }
|
101
|
+
rescue Exception # rubocop:disable Lint/RescueException,Lint/SuppressedException
|
89
102
|
end
|
90
103
|
expect(Capybara.current_driver).to eq(driver_before_block)
|
91
104
|
end
|
@@ -104,20 +117,17 @@ RSpec.describe Capybara::DSL do
|
|
104
117
|
it 'should yield the passed block' do
|
105
118
|
called = false
|
106
119
|
Capybara.using_driver(:selenium) { called = true }
|
107
|
-
expect(called).to
|
120
|
+
expect(called).to be(true)
|
108
121
|
end
|
109
122
|
end
|
110
123
|
|
124
|
+
# rubocop:disable RSpec/InstanceVariable
|
111
125
|
describe '#using_wait_time' do
|
112
|
-
before
|
113
|
-
@previous_wait_time = Capybara.default_max_wait_time
|
114
|
-
end
|
126
|
+
before { @previous_wait_time = Capybara.default_max_wait_time }
|
115
127
|
|
116
|
-
after
|
117
|
-
Capybara.default_max_wait_time = @previous_wait_time
|
118
|
-
end
|
128
|
+
after { Capybara.default_max_wait_time = @previous_wait_time }
|
119
129
|
|
120
|
-
it
|
130
|
+
it 'should switch the wait time and switch it back' do
|
121
131
|
in_block = nil
|
122
132
|
Capybara.using_wait_time 6 do
|
123
133
|
in_block = Capybara.default_max_wait_time
|
@@ -126,40 +136,41 @@ RSpec.describe Capybara::DSL do
|
|
126
136
|
expect(Capybara.default_max_wait_time).to eq(@previous_wait_time)
|
127
137
|
end
|
128
138
|
|
129
|
-
it
|
139
|
+
it 'should ensure wait time is reset' do
|
130
140
|
expect do
|
131
141
|
Capybara.using_wait_time 6 do
|
132
|
-
raise
|
142
|
+
raise 'hell'
|
133
143
|
end
|
134
|
-
end.to raise_error(RuntimeError,
|
144
|
+
end.to raise_error(RuntimeError, 'hell')
|
135
145
|
expect(Capybara.default_max_wait_time).to eq(@previous_wait_time)
|
136
146
|
end
|
137
147
|
end
|
148
|
+
# rubocop:enable RSpec/InstanceVariable
|
138
149
|
|
139
150
|
describe '#app' do
|
140
|
-
it
|
141
|
-
Capybara.app =
|
151
|
+
it 'should be changeable' do
|
152
|
+
Capybara.app = 'foobar'
|
142
153
|
expect(Capybara.app).to eq('foobar')
|
143
154
|
end
|
144
155
|
end
|
145
156
|
|
146
157
|
describe '#current_session' do
|
147
|
-
it
|
158
|
+
it 'should choose a session object of the current driver type' do
|
148
159
|
expect(Capybara.current_session).to be_a(Capybara::Session)
|
149
160
|
end
|
150
161
|
|
151
|
-
it
|
162
|
+
it 'should use #app as the application' do
|
152
163
|
Capybara.app = proc {}
|
153
164
|
expect(Capybara.current_session.app).to eq(Capybara.app)
|
154
165
|
end
|
155
166
|
|
156
|
-
it
|
167
|
+
it 'should change with the current driver' do
|
157
168
|
expect(Capybara.current_session.mode).to eq(:rack_test)
|
158
169
|
Capybara.current_driver = :selenium
|
159
170
|
expect(Capybara.current_session.mode).to eq(:selenium)
|
160
171
|
end
|
161
172
|
|
162
|
-
it
|
173
|
+
it 'should be persistent even across driver changes' do
|
163
174
|
object_id = Capybara.current_session.object_id
|
164
175
|
expect(Capybara.current_session.object_id).to eq(object_id)
|
165
176
|
Capybara.current_driver = :selenium
|
@@ -170,7 +181,7 @@ RSpec.describe Capybara::DSL do
|
|
170
181
|
expect(Capybara.current_session.object_id).to eq(object_id)
|
171
182
|
end
|
172
183
|
|
173
|
-
it
|
184
|
+
it 'should change when changing application' do
|
174
185
|
object_id = Capybara.current_session.object_id
|
175
186
|
expect(Capybara.current_session.object_id).to eq(object_id)
|
176
187
|
Capybara.app = proc {}
|
@@ -178,7 +189,7 @@ RSpec.describe Capybara::DSL do
|
|
178
189
|
expect(Capybara.current_session.app).to eq(Capybara.app)
|
179
190
|
end
|
180
191
|
|
181
|
-
it
|
192
|
+
it 'should change when the session name changes' do
|
182
193
|
object_id = Capybara.current_session.object_id
|
183
194
|
Capybara.session_name = :administrator
|
184
195
|
expect(Capybara.session_name).to eq(:administrator)
|
@@ -189,8 +200,8 @@ RSpec.describe Capybara::DSL do
|
|
189
200
|
end
|
190
201
|
end
|
191
202
|
|
192
|
-
describe
|
193
|
-
it
|
203
|
+
describe '#using_session' do
|
204
|
+
it 'should change the session name for the duration of the block' do
|
194
205
|
expect(Capybara.session_name).to eq(:default)
|
195
206
|
Capybara.using_session(:administrator) do
|
196
207
|
expect(Capybara.session_name).to eq(:administrator)
|
@@ -198,23 +209,23 @@ RSpec.describe Capybara::DSL do
|
|
198
209
|
expect(Capybara.session_name).to eq(:default)
|
199
210
|
end
|
200
211
|
|
201
|
-
it
|
212
|
+
it 'should reset the session to the default, even if an exception occurs' do
|
202
213
|
begin
|
203
214
|
Capybara.using_session(:raise) do
|
204
215
|
raise
|
205
216
|
end
|
206
|
-
rescue Exception # rubocop:disable Lint/RescueException
|
217
|
+
rescue Exception # rubocop:disable Lint/RescueException,Lint/SuppressedException
|
207
218
|
end
|
208
219
|
expect(Capybara.session_name).to eq(:default)
|
209
220
|
end
|
210
221
|
|
211
|
-
it
|
222
|
+
it 'should yield the passed block' do
|
212
223
|
called = false
|
213
224
|
Capybara.using_session(:administrator) { called = true }
|
214
|
-
expect(called).to
|
225
|
+
expect(called).to be(true)
|
215
226
|
end
|
216
227
|
|
217
|
-
it
|
228
|
+
it 'should be nestable' do
|
218
229
|
Capybara.using_session(:outer) do
|
219
230
|
expect(Capybara.session_name).to eq(:outer)
|
220
231
|
Capybara.using_session(:inner) do
|
@@ -224,39 +235,57 @@ RSpec.describe Capybara::DSL do
|
|
224
235
|
end
|
225
236
|
expect(Capybara.session_name).to eq(:default)
|
226
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
|
227
256
|
end
|
228
257
|
|
229
|
-
describe
|
230
|
-
it
|
258
|
+
describe '#session_name' do
|
259
|
+
it 'should default to :default' do
|
231
260
|
expect(Capybara.session_name).to eq(:default)
|
232
261
|
end
|
233
262
|
end
|
234
263
|
|
235
264
|
describe 'the DSL' do
|
236
|
-
|
237
|
-
@session = Class.new { include Capybara::DSL }.new
|
238
|
-
end
|
265
|
+
let(:session) { Class.new { include Capybara::DSL }.new }
|
239
266
|
|
240
|
-
it
|
241
|
-
|
242
|
-
|
243
|
-
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')
|
244
271
|
end
|
245
272
|
|
246
273
|
it "should provide a 'page' shortcut for more expressive tests" do
|
247
|
-
|
248
|
-
|
249
|
-
expect(
|
274
|
+
session.page.visit('/with_html')
|
275
|
+
session.page.click_link('ullamco')
|
276
|
+
expect(session.page.body).to include('Another World')
|
250
277
|
end
|
251
278
|
|
252
279
|
it "should provide an 'using_session' shortcut" do
|
253
|
-
|
254
|
-
|
280
|
+
allow(Capybara).to receive(:using_session)
|
281
|
+
session.using_session(:name)
|
282
|
+
expect(Capybara).to have_received(:using_session).with(:name)
|
255
283
|
end
|
256
284
|
|
257
285
|
it "should provide a 'using_wait_time' shortcut" do
|
258
|
-
|
259
|
-
|
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)
|
260
289
|
end
|
261
290
|
end
|
262
291
|
end
|
data/spec/filter_set_spec.rb
CHANGED
@@ -4,12 +4,12 @@ require 'spec_helper'
|
|
4
4
|
|
5
5
|
RSpec.describe Capybara::Selector::FilterSet do
|
6
6
|
after do
|
7
|
-
|
7
|
+
described_class.remove(:test)
|
8
8
|
end
|
9
9
|
|
10
|
-
it
|
11
|
-
fs =
|
12
|
-
|
10
|
+
it 'allows node filters' do
|
11
|
+
fs = described_class.add(:test) do
|
12
|
+
node_filter(:node_test, :boolean) { |_node, _value| true }
|
13
13
|
expression_filter(:expression_test, :boolean) { |_expr, _value| true }
|
14
14
|
end
|
15
15
|
|
@@ -17,13 +17,30 @@ RSpec.describe Capybara::Selector::FilterSet do
|
|
17
17
|
expect(fs.node_filters.keys).not_to include(:expression_test)
|
18
18
|
end
|
19
19
|
|
20
|
-
it
|
21
|
-
fs =
|
22
|
-
|
20
|
+
it 'allows expression filters' do
|
21
|
+
fs = described_class.add(:test) do
|
22
|
+
node_filter(:node_test, :boolean) { |_node, _value| true }
|
23
23
|
expression_filter(:expression_test, :boolean) { |_expr, _value| true }
|
24
24
|
end
|
25
25
|
|
26
26
|
expect(fs.expression_filters.keys).to include(:expression_test)
|
27
27
|
expect(fs.expression_filters.keys).not_to include(:node_test)
|
28
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
|
29
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-----
|
@@ -4,10 +4,10 @@ require 'spec_helper'
|
|
4
4
|
require 'selenium-webdriver'
|
5
5
|
|
6
6
|
RSpec.describe Capybara::Selenium::Driver do
|
7
|
-
it
|
8
|
-
options = { browser: (
|
9
|
-
browser =
|
10
|
-
expect(browser).to
|
11
|
-
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
|
12
12
|
end
|
13
13
|
end
|
@@ -4,10 +4,10 @@ require 'spec_helper'
|
|
4
4
|
require 'selenium-webdriver'
|
5
5
|
|
6
6
|
RSpec.describe Capybara::Selenium::Driver do
|
7
|
-
it
|
8
|
-
options = { browser: (
|
9
|
-
browser =
|
10
|
-
expect(browser).to
|
11
|
-
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
|
12
12
|
end
|
13
13
|
end
|
data/spec/minitest_spec.rb
CHANGED
@@ -15,8 +15,12 @@ class MinitestTest < Minitest::Test
|
|
15
15
|
Capybara.reset_sessions!
|
16
16
|
end
|
17
17
|
|
18
|
+
def self.test_order
|
19
|
+
:sorted
|
20
|
+
end
|
21
|
+
|
18
22
|
def test_assert_text
|
19
|
-
assert_text('Form')
|
23
|
+
assert_text('Form', normalize_ws: false)
|
20
24
|
assert_no_text('Not on the page')
|
21
25
|
refute_text('Also Not on the page')
|
22
26
|
end
|
@@ -30,15 +34,16 @@ class MinitestTest < Minitest::Test
|
|
30
34
|
|
31
35
|
def test_assert_current_path
|
32
36
|
assert_current_path('/form')
|
37
|
+
assert_current_path('/form') { |url| url.query.nil? }
|
33
38
|
assert_no_current_path('/not_form')
|
34
39
|
refute_current_path('/not_form')
|
35
40
|
end
|
36
41
|
|
37
42
|
def test_assert_xpath
|
38
43
|
assert_xpath('.//select[@id="form_title"]')
|
39
|
-
assert_xpath('.//select', count: 1) { |el| el[:id] ==
|
44
|
+
assert_xpath('.//select', count: 1) { |el| el[:id] == 'form_title' }
|
40
45
|
assert_no_xpath('.//select[@id="not_form_title"]')
|
41
|
-
assert_no_xpath('.//select') { |el| el[:id] ==
|
46
|
+
assert_no_xpath('.//select') { |el| el[:id] == 'not_form_title' }
|
42
47
|
refute_xpath('.//select[@id="not_form_title"]')
|
43
48
|
end
|
44
49
|
|
@@ -47,6 +52,21 @@ class MinitestTest < Minitest::Test
|
|
47
52
|
assert_no_css('select#not_form_title')
|
48
53
|
end
|
49
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
|
+
|
50
70
|
def test_assert_link
|
51
71
|
visit('/with_html')
|
52
72
|
assert_link('A link')
|
@@ -97,6 +117,10 @@ class MinitestTest < Minitest::Test
|
|
97
117
|
assert_none_of_selectors(:css, 'input#not_on_page', 'input#also_not_on_page')
|
98
118
|
end
|
99
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
|
+
|
100
124
|
def test_assert_matches_selector
|
101
125
|
assert_matches_selector(find(:field, 'customer_email'), :field, 'customer_email')
|
102
126
|
assert_not_matches_selector(find(:select, 'form_title'), :field, 'customer_email')
|
@@ -112,6 +136,22 @@ class MinitestTest < Minitest::Test
|
|
112
136
|
assert_matches_xpath(find(:select, 'form_title'), './/select[@id="form_title"]')
|
113
137
|
refute_matches_xpath(find(:select, 'form_title'), './/select[@id="form_other_title"]')
|
114
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
|
115
155
|
end
|
116
156
|
|
117
157
|
RSpec.describe 'capybara/minitest' do
|
@@ -120,12 +160,16 @@ RSpec.describe 'capybara/minitest' do
|
|
120
160
|
Capybara.app = TestApp
|
121
161
|
end
|
122
162
|
|
123
|
-
|
163
|
+
after do
|
164
|
+
Capybara.use_default_driver
|
165
|
+
end
|
166
|
+
|
167
|
+
it 'should support minitest' do
|
124
168
|
output = StringIO.new
|
125
169
|
reporter = Minitest::SummaryReporter.new(output)
|
126
170
|
reporter.start
|
127
171
|
MinitestTest.run reporter, {}
|
128
172
|
reporter.report
|
129
|
-
expect(output.string).to include(
|
173
|
+
expect(output.string).to include('23 runs, 56 assertions, 0 failures, 0 errors, 1 skips')
|
130
174
|
end
|
131
175
|
end
|