capybara 3.0.0 → 3.36.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 +777 -10
- data/License.txt +1 -1
- data/README.md +75 -58
- 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 +34 -9
- data/lib/capybara/dsl.rb +14 -6
- data/lib/capybara/helpers.rb +52 -7
- data/lib/capybara/minitest/spec.rb +173 -84
- data/lib/capybara/minitest.rb +250 -144
- data/lib/capybara/node/actions.rb +248 -124
- data/lib/capybara/node/base.rb +34 -20
- data/lib/capybara/node/document.rb +14 -2
- data/lib/capybara/node/document_matchers.rb +13 -15
- data/lib/capybara/node/element.rb +339 -113
- data/lib/capybara/node/finders.rb +95 -82
- data/lib/capybara/node/matchers.rb +338 -157
- data/lib/capybara/node/simple.rb +54 -15
- 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 +600 -103
- 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 +47 -28
- data/lib/capybara/rack_test/driver.rb +12 -3
- data/lib/capybara/rack_test/errors.rb +6 -0
- data/lib/capybara/rack_test/form.rb +53 -50
- data/lib/capybara/rack_test/node.rb +114 -37
- data/lib/capybara/rails.rb +1 -1
- data/lib/capybara/registration_container.rb +44 -0
- data/lib/capybara/registrations/drivers.rb +42 -0
- data/lib/capybara/registrations/patches/puma_ssl.rb +29 -0
- data/lib/capybara/registrations/servers.rb +45 -0
- data/lib/capybara/result.rb +86 -52
- data/lib/capybara/rspec/features.rb +8 -10
- data/lib/capybara/rspec/matcher_proxies.rb +39 -18
- data/lib/capybara/rspec/matchers/base.rb +111 -0
- data/lib/capybara/rspec/matchers/become_closed.rb +33 -0
- data/lib/capybara/rspec/matchers/compound.rb +88 -0
- data/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
- data/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
- data/lib/capybara/rspec/matchers/have_current_path.rb +29 -0
- data/lib/capybara/rspec/matchers/have_selector.rb +77 -0
- data/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
- data/lib/capybara/rspec/matchers/have_text.rb +33 -0
- data/lib/capybara/rspec/matchers/have_title.rb +29 -0
- data/lib/capybara/rspec/matchers/match_selector.rb +27 -0
- data/lib/capybara/rspec/matchers/match_style.rb +43 -0
- data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
- data/lib/capybara/rspec/matchers.rb +138 -316
- 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 +89 -12
- 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 +54 -0
- data/lib/capybara/selector/definition/link_or_button.rb +16 -0
- data/lib/capybara/selector/definition/option.rb +27 -0
- data/lib/capybara/selector/definition/radio_button.rb +27 -0
- data/lib/capybara/selector/definition/select.rb +81 -0
- data/lib/capybara/selector/definition/table.rb +109 -0
- data/lib/capybara/selector/definition/table_row.rb +21 -0
- data/lib/capybara/selector/definition/xpath.rb +5 -0
- data/lib/capybara/selector/definition.rb +279 -0
- data/lib/capybara/selector/filter.rb +1 -0
- data/lib/capybara/selector/filter_set.rb +72 -27
- 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 +214 -0
- data/lib/capybara/selector/selector.rb +85 -200
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/lib/capybara/selector.rb +226 -537
- 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 +296 -238
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
- data/lib/capybara/selenium/driver_specializations/edge_driver.rb +124 -0
- data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +89 -0
- data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +26 -0
- data/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
- data/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
- data/lib/capybara/selenium/extensions/find.rb +110 -0
- data/lib/capybara/selenium/extensions/html5_drag.rb +228 -0
- data/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
- data/lib/capybara/selenium/extensions/scroll.rb +76 -0
- data/lib/capybara/selenium/logger_suppressor.rb +40 -0
- data/lib/capybara/selenium/node.rb +436 -166
- data/lib/capybara/selenium/nodes/chrome_node.rb +137 -0
- data/lib/capybara/selenium/nodes/edge_node.rb +104 -0
- data/lib/capybara/selenium/nodes/firefox_node.rb +136 -0
- data/lib/capybara/selenium/nodes/ie_node.rb +22 -0
- data/lib/capybara/selenium/nodes/safari_node.rb +118 -0
- data/lib/capybara/selenium/patches/action_pauser.rb +26 -0
- data/lib/capybara/selenium/patches/atoms.rb +18 -0
- data/lib/capybara/selenium/patches/is_displayed.rb +16 -0
- data/lib/capybara/selenium/patches/logs.rb +45 -0
- data/lib/capybara/selenium/patches/pause_duration_fix.rb +9 -0
- data/lib/capybara/selenium/patches/persistent_client.rb +20 -0
- data/lib/capybara/server/animation_disabler.rb +69 -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 +38 -6
- data/lib/capybara/session/matchers.rb +26 -19
- data/lib/capybara/session.rb +258 -190
- 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 +122 -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 -42
- 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} +62 -38
- data/lib/capybara/spec/session/{assert_title.rb → assert_title_spec.rb} +12 -12
- data/lib/capybara/spec/session/attach_file_spec.rb +120 -72
- data/lib/capybara/spec/session/body_spec.rb +11 -13
- data/lib/capybara/spec/session/check_spec.rb +111 -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 +78 -55
- data/lib/capybara/spec/session/current_scope_spec.rb +7 -7
- 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 +104 -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 +32 -14
- data/lib/capybara/spec/session/find_spec.rb +236 -141
- data/lib/capybara/spec/session/first_spec.rb +44 -43
- 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 +44 -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 +18 -18
- 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 +92 -12
- data/lib/capybara/spec/session/has_css_spec.rb +271 -137
- data/lib/capybara/spec/session/has_current_path_spec.rb +48 -33
- data/lib/capybara/spec/session/has_field_spec.rb +137 -58
- data/lib/capybara/spec/session/has_link_spec.rb +30 -6
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +26 -24
- data/lib/capybara/spec/session/has_select_spec.rb +75 -47
- data/lib/capybara/spec/session/has_selector_spec.rb +102 -69
- data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
- data/lib/capybara/spec/session/has_table_spec.rb +170 -4
- data/lib/capybara/spec/session/has_text_spec.rb +108 -52
- 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 +35 -0
- data/lib/capybara/spec/session/node_spec.rb +871 -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 +52 -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 +117 -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 +40 -21
- data/lib/capybara/spec/session/unselect_spec.rb +37 -37
- data/lib/capybara/spec/session/visit_spec.rb +59 -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 +10 -7
- data/lib/capybara/spec/session/window/within_window_spec.rb +17 -16
- data/lib/capybara/spec/session/within_spec.rb +69 -44
- data/lib/capybara/spec/spec_helper.rb +41 -53
- data/lib/capybara/spec/test_app.rb +79 -40
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/form.erb +134 -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 +43 -10
- 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_other.erb +6 -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 +31 -25
- data/lib/capybara.rb +120 -100
- data/spec/basic_node_spec.rb +59 -34
- data/spec/capybara_spec.rb +54 -52
- data/spec/css_builder_spec.rb +101 -0
- data/spec/css_splitter_spec.rb +38 -0
- data/spec/dsl_spec.rb +80 -53
- 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 +4 -4
- data/spec/fixtures/selenium_driver_rspec_success.rb +4 -4
- data/spec/minitest_spec.rb +38 -5
- data/spec/minitest_spec_spec.rb +88 -62
- data/spec/per_session_config_spec.rb +5 -5
- data/spec/rack_test_spec.rb +169 -115
- data/spec/regexp_dissassembler_spec.rb +250 -0
- data/spec/result_spec.rb +86 -33
- data/spec/rspec/features_spec.rb +26 -23
- data/spec/rspec/scenarios_spec.rb +8 -4
- data/spec/rspec/shared_spec_matchers.rb +393 -363
- data/spec/rspec/views_spec.rb +4 -3
- data/spec/rspec_matchers_spec.rb +10 -10
- data/spec/rspec_spec.rb +109 -85
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +391 -61
- data/spec/selenium_spec_chrome.rb +180 -41
- data/spec/selenium_spec_chrome_remote.rb +101 -0
- data/spec/selenium_spec_edge.rb +28 -8
- data/spec/selenium_spec_firefox.rb +211 -0
- data/spec/selenium_spec_firefox_remote.rb +80 -0
- data/spec/selenium_spec_ie.rb +127 -11
- data/spec/selenium_spec_safari.rb +156 -0
- data/spec/server_spec.rb +177 -78
- data/spec/session_spec.rb +52 -16
- data/spec/shared_selenium_node.rb +79 -0
- data/spec/shared_selenium_session.rb +455 -123
- data/spec/spec_helper.rb +91 -2
- data/spec/xpath_builder_spec.rb +93 -0
- metadata +343 -42
- 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/capybara_spec.rb
CHANGED
|
@@ -4,107 +4,109 @@ require 'spec_helper'
|
|
|
4
4
|
|
|
5
5
|
RSpec.describe Capybara do
|
|
6
6
|
describe 'default_max_wait_time' do
|
|
7
|
-
|
|
8
|
-
Capybara.default_max_wait_time = @previous_default_time
|
|
9
|
-
end
|
|
7
|
+
before { @previous_default_time = described_class.default_max_wait_time }
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
expect(
|
|
9
|
+
after { described_class.default_max_wait_time = @previous_default_time } # rubocop:disable RSpec/InstanceVariable
|
|
10
|
+
|
|
11
|
+
it 'should be changeable' do
|
|
12
|
+
expect(described_class.default_max_wait_time).not_to eq(5)
|
|
13
|
+
described_class.default_max_wait_time = 5
|
|
14
|
+
expect(described_class.default_max_wait_time).to eq(5)
|
|
15
15
|
end
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
describe '.register_driver' do
|
|
19
|
-
it
|
|
20
|
-
|
|
19
|
+
it 'should add a new driver' do
|
|
20
|
+
described_class.register_driver :schmoo do |app|
|
|
21
21
|
Capybara::RackTest::Driver.new(app)
|
|
22
22
|
end
|
|
23
23
|
session = Capybara::Session.new(:schmoo, TestApp)
|
|
24
24
|
session.visit('/')
|
|
25
|
-
expect(session.body).to include(
|
|
25
|
+
expect(session.body).to include('Hello world!')
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
describe '.register_server' do
|
|
30
|
-
it
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
handler.run
|
|
30
|
+
it 'should add a new server' do
|
|
31
|
+
described_class.register_server :blob do |_app, _port, _host|
|
|
32
|
+
# do nothing
|
|
34
33
|
end
|
|
35
34
|
|
|
36
|
-
expect(
|
|
35
|
+
expect(described_class.servers[:blob]).to be_truthy
|
|
37
36
|
end
|
|
38
37
|
end
|
|
39
38
|
|
|
40
|
-
describe
|
|
39
|
+
describe '.server' do
|
|
41
40
|
after do
|
|
42
|
-
|
|
41
|
+
described_class.server = :default
|
|
43
42
|
end
|
|
44
43
|
|
|
45
|
-
it
|
|
46
|
-
mock_app =
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
it 'should default to a proc that calls run_default_server' do
|
|
45
|
+
mock_app = Object.new
|
|
46
|
+
allow(described_class).to receive(:run_default_server).and_return(true)
|
|
47
|
+
described_class.server.call(mock_app, 8000)
|
|
48
|
+
expect(described_class).to have_received(:run_default_server).with(mock_app, 8000)
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
-
it
|
|
51
|
+
it 'should return a custom server proc' do
|
|
52
52
|
server = ->(_app, _port) {}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
expect(
|
|
53
|
+
described_class.register_server :custom, &server
|
|
54
|
+
described_class.server = :custom
|
|
55
|
+
expect(described_class.server).to eq(server)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it 'should have :webrick registered' do
|
|
59
|
+
expect(described_class.servers[:webrick]).not_to be_nil
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it 'should have :puma registered' do
|
|
63
|
+
expect(described_class.servers[:puma]).not_to be_nil
|
|
56
64
|
end
|
|
65
|
+
end
|
|
57
66
|
|
|
58
|
-
|
|
59
|
-
|
|
67
|
+
describe 'server=' do
|
|
68
|
+
after do
|
|
69
|
+
described_class.server = :default
|
|
60
70
|
end
|
|
61
71
|
|
|
62
|
-
it
|
|
63
|
-
|
|
72
|
+
it 'accepts a proc' do
|
|
73
|
+
server = ->(_app, _port) {}
|
|
74
|
+
described_class.server = server
|
|
75
|
+
expect(described_class.server).to eq server
|
|
64
76
|
end
|
|
65
77
|
end
|
|
66
78
|
|
|
67
79
|
describe 'app_host' do
|
|
68
80
|
after do
|
|
69
|
-
|
|
81
|
+
described_class.app_host = nil
|
|
70
82
|
end
|
|
71
83
|
|
|
72
|
-
it
|
|
73
|
-
expect {
|
|
84
|
+
it 'should warn if not a valid URL' do
|
|
85
|
+
expect { described_class.app_host = 'www.example.com' }.to raise_error(ArgumentError, /Capybara\.app_host should be set to a url/)
|
|
74
86
|
end
|
|
75
87
|
|
|
76
|
-
it
|
|
77
|
-
expect {
|
|
88
|
+
it 'should not warn if a valid URL' do
|
|
89
|
+
expect { described_class.app_host = 'http://www.example.com' }.not_to raise_error
|
|
78
90
|
end
|
|
79
91
|
|
|
80
|
-
it
|
|
81
|
-
expect {
|
|
92
|
+
it 'should not warn if nil' do
|
|
93
|
+
expect { described_class.app_host = nil }.not_to raise_error
|
|
82
94
|
end
|
|
83
95
|
end
|
|
84
96
|
|
|
85
97
|
describe 'default_host' do
|
|
86
98
|
around do |test|
|
|
87
|
-
old_default =
|
|
99
|
+
old_default = described_class.default_host
|
|
88
100
|
test.run
|
|
89
|
-
|
|
101
|
+
described_class.default_host = old_default
|
|
90
102
|
end
|
|
91
103
|
|
|
92
|
-
it
|
|
93
|
-
expect {
|
|
104
|
+
it 'should raise if not a valid URL' do
|
|
105
|
+
expect { described_class.default_host = 'www.example.com' }.to raise_error(ArgumentError, /Capybara\.default_host should be set to a url/)
|
|
94
106
|
end
|
|
95
107
|
|
|
96
|
-
it
|
|
97
|
-
expect {
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
RSpec.describe Capybara::Session do
|
|
103
|
-
context 'with nonexistent driver' do
|
|
104
|
-
it "should raise an error" do
|
|
105
|
-
expect do
|
|
106
|
-
Capybara::Session.new(:quox, TestApp).driver
|
|
107
|
-
end.to raise_error(Capybara::DriverNotFoundError)
|
|
108
|
+
it 'should not warn if a valid URL' do
|
|
109
|
+
expect { described_class.default_host = 'http://www.example.com' }.not_to raise_error
|
|
108
110
|
end
|
|
109
111
|
end
|
|
110
112
|
end
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
# rubocop:disable RSpec/InstanceVariable
|
|
6
|
+
RSpec.describe Capybara::Selector::CSSBuilder do
|
|
7
|
+
let :builder do
|
|
8
|
+
::Capybara::Selector::CSSBuilder.new(@css)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
context 'add_attribute_conditions' do
|
|
12
|
+
it 'adds a single string condition to a single selector' do
|
|
13
|
+
@css = 'div'
|
|
14
|
+
selector = builder.add_attribute_conditions(random: 'abc')
|
|
15
|
+
expect(selector).to eq %(div[random='abc'])
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'adds multiple string conditions to a single selector' do
|
|
19
|
+
@css = 'div'
|
|
20
|
+
selector = builder.add_attribute_conditions(random: 'abc', other: 'def')
|
|
21
|
+
expect(selector).to eq %(div[random='abc'][other='def'])
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'adds a single string condition to a multiple selector' do
|
|
25
|
+
@css = 'div, ul'
|
|
26
|
+
selector = builder.add_attribute_conditions(random: 'abc')
|
|
27
|
+
expect(selector).to eq %(div[random='abc'], ul[random='abc'])
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'adds multiple string conditions to a multiple selector' do
|
|
31
|
+
@css = 'div, ul'
|
|
32
|
+
selector = builder.add_attribute_conditions(random: 'abc', other: 'def')
|
|
33
|
+
expect(selector).to eq %(div[random='abc'][other='def'], ul[random='abc'][other='def'])
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'adds simple regexp conditions to a single selector' do
|
|
37
|
+
@css = 'div'
|
|
38
|
+
selector = builder.add_attribute_conditions(random: /abc/, other: /def/)
|
|
39
|
+
expect(selector).to eq %(div[random*='abc'][other*='def'])
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'adds wildcard regexp conditions to a single selector' do
|
|
43
|
+
@css = 'div'
|
|
44
|
+
selector = builder.add_attribute_conditions(random: /abc.*def/, other: /def.*ghi/)
|
|
45
|
+
expect(selector).to eq %(div[random*='abc'][random*='def'][other*='def'][other*='ghi'])
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'adds alternated regexp conditions to a single selector' do
|
|
49
|
+
@css = 'div'
|
|
50
|
+
selector = builder.add_attribute_conditions(random: /abc|def/, other: /def|ghi/)
|
|
51
|
+
expect(selector).to eq %(div[random*='abc'][other*='def'], div[random*='abc'][other*='ghi'], div[random*='def'][other*='def'], div[random*='def'][other*='ghi'])
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it 'adds alternated regexp conditions to a multiple selector' do
|
|
55
|
+
@css = 'div,ul'
|
|
56
|
+
selector = builder.add_attribute_conditions(other: /def.*ghi|jkl/)
|
|
57
|
+
expect(selector).to eq %(div[other*='def'][other*='ghi'], div[other*='jkl'], ul[other*='def'][other*='ghi'], ul[other*='jkl'])
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it "returns original selector when regexp can't be substringed" do
|
|
61
|
+
@css = 'div'
|
|
62
|
+
selector = builder.add_attribute_conditions(other: /.+/)
|
|
63
|
+
expect(selector).to eq 'div'
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
context ':class' do
|
|
67
|
+
it 'handles string with CSS .' do
|
|
68
|
+
@css = 'a'
|
|
69
|
+
selector = builder.add_attribute_conditions(class: 'my_class')
|
|
70
|
+
expect(selector).to eq 'a.my_class'
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'handles negated string with CSS .' do
|
|
74
|
+
@css = 'a'
|
|
75
|
+
selector = builder.add_attribute_conditions(class: '!my_class')
|
|
76
|
+
expect(selector).to eq 'a:not(.my_class)'
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it 'handles array of string with CSS .' do
|
|
80
|
+
@css = 'a'
|
|
81
|
+
selector = builder.add_attribute_conditions(class: %w[my_class my_other_class])
|
|
82
|
+
expect(selector).to eq 'a.my_class.my_other_class'
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it 'handles array of string with CSS . when negated included' do
|
|
86
|
+
@css = 'a'
|
|
87
|
+
selector = builder.add_attribute_conditions(class: %w[my_class !my_other_class])
|
|
88
|
+
expect(selector).to eq 'a.my_class:not(.my_other_class)'
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
context ':id' do
|
|
93
|
+
it 'handles string with CSS #' do
|
|
94
|
+
@css = 'ul'
|
|
95
|
+
selector = builder.add_attribute_conditions(id: 'my_id')
|
|
96
|
+
expect(selector).to eq 'ul#my_id'
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
# rubocop:enable RSpec/InstanceVariable
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
RSpec.describe Capybara::Selector::CSS::Splitter do
|
|
6
|
+
let :splitter do
|
|
7
|
+
::Capybara::Selector::CSS::Splitter.new
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
context 'split not needed' do
|
|
11
|
+
it 'normal CSS selector' do
|
|
12
|
+
css = 'div[id="abc"]'
|
|
13
|
+
expect(splitter.split(css)).to eq [css]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'comma in strings' do
|
|
17
|
+
css = 'div[id="a,bc"]'
|
|
18
|
+
expect(splitter.split(css)).to eq [css]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'comma in pseudo-selector' do
|
|
22
|
+
css = 'div.class1:not(.class1, .class2)'
|
|
23
|
+
expect(splitter.split(css)).to eq [css]
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
context 'split needed' do
|
|
28
|
+
it 'root level comma' do
|
|
29
|
+
css = 'div.class1, span, p.class2'
|
|
30
|
+
expect(splitter.split(css)).to eq ['div.class1', 'span', 'p.class2']
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'root level comma when quotes and pseudo selectors' do
|
|
34
|
+
css = 'div.class1[id="abc\\"def,ghi"]:not(.class3, .class4), span[id=\'a"c\\\'de\'], section, #abc\\,def'
|
|
35
|
+
expect(splitter.split(css)).to eq ['div.class1[id="abc\\"def,ghi"]:not(.class3, .class4)', 'span[id=\'a"c\\\'de\']', 'section', '#abc\\,def']
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
data/spec/dsl_spec.rb
CHANGED
|
@@ -7,11 +7,22 @@ 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
|
+
end
|
|
19
|
+
end
|
|
13
20
|
|
|
14
21
|
RSpec.describe Capybara::DSL do
|
|
22
|
+
before do
|
|
23
|
+
Capybara.use_default_driver
|
|
24
|
+
end
|
|
25
|
+
|
|
15
26
|
after do
|
|
16
27
|
Capybara.session_name = nil
|
|
17
28
|
Capybara.default_driver = nil
|
|
@@ -21,42 +32,42 @@ RSpec.describe Capybara::DSL do
|
|
|
21
32
|
end
|
|
22
33
|
|
|
23
34
|
describe '#default_driver' do
|
|
24
|
-
it
|
|
35
|
+
it 'should default to rack_test' do
|
|
25
36
|
expect(Capybara.default_driver).to eq(:rack_test)
|
|
26
37
|
end
|
|
27
38
|
|
|
28
|
-
it
|
|
39
|
+
it 'should be changeable' do
|
|
29
40
|
Capybara.default_driver = :culerity
|
|
30
41
|
expect(Capybara.default_driver).to eq(:culerity)
|
|
31
42
|
end
|
|
32
43
|
end
|
|
33
44
|
|
|
34
45
|
describe '#current_driver' do
|
|
35
|
-
it
|
|
46
|
+
it 'should default to the default driver' do
|
|
36
47
|
expect(Capybara.current_driver).to eq(:rack_test)
|
|
37
48
|
Capybara.default_driver = :culerity
|
|
38
49
|
expect(Capybara.current_driver).to eq(:culerity)
|
|
39
50
|
end
|
|
40
51
|
|
|
41
|
-
it
|
|
52
|
+
it 'should be changeable' do
|
|
42
53
|
Capybara.current_driver = :culerity
|
|
43
54
|
expect(Capybara.current_driver).to eq(:culerity)
|
|
44
55
|
end
|
|
45
56
|
end
|
|
46
57
|
|
|
47
58
|
describe '#javascript_driver' do
|
|
48
|
-
it
|
|
59
|
+
it 'should default to selenium' do
|
|
49
60
|
expect(Capybara.javascript_driver).to eq(:selenium)
|
|
50
61
|
end
|
|
51
62
|
|
|
52
|
-
it
|
|
63
|
+
it 'should be changeable' do
|
|
53
64
|
Capybara.javascript_driver = :culerity
|
|
54
65
|
expect(Capybara.javascript_driver).to eq(:culerity)
|
|
55
66
|
end
|
|
56
67
|
end
|
|
57
68
|
|
|
58
69
|
describe '#use_default_driver' do
|
|
59
|
-
it
|
|
70
|
+
it 'should restore the default driver' do
|
|
60
71
|
Capybara.current_driver = :culerity
|
|
61
72
|
Capybara.use_default_driver
|
|
62
73
|
expect(Capybara.current_driver).to eq(:rack_test)
|
|
@@ -65,7 +76,7 @@ RSpec.describe Capybara::DSL do
|
|
|
65
76
|
|
|
66
77
|
describe '#using_driver' do
|
|
67
78
|
before do
|
|
68
|
-
expect(Capybara.current_driver).not_to eq(:selenium)
|
|
79
|
+
expect(Capybara.current_driver).not_to eq(:selenium) # rubocop:disable RSpec/ExpectInHook
|
|
69
80
|
end
|
|
70
81
|
|
|
71
82
|
it 'should set the driver using Capybara.current_driver=' do
|
|
@@ -84,8 +95,8 @@ RSpec.describe Capybara::DSL do
|
|
|
84
95
|
it 'should reset the driver even if an exception occurs' do
|
|
85
96
|
driver_before_block = Capybara.current_driver
|
|
86
97
|
begin
|
|
87
|
-
Capybara.using_driver(:selenium) { raise
|
|
88
|
-
rescue Exception # rubocop:disable Lint/RescueException
|
|
98
|
+
Capybara.using_driver(:selenium) { raise 'ohnoes!' }
|
|
99
|
+
rescue Exception # rubocop:disable Lint/RescueException,Lint/SuppressedException
|
|
89
100
|
end
|
|
90
101
|
expect(Capybara.current_driver).to eq(driver_before_block)
|
|
91
102
|
end
|
|
@@ -108,16 +119,13 @@ RSpec.describe Capybara::DSL do
|
|
|
108
119
|
end
|
|
109
120
|
end
|
|
110
121
|
|
|
122
|
+
# rubocop:disable RSpec/InstanceVariable
|
|
111
123
|
describe '#using_wait_time' do
|
|
112
|
-
before
|
|
113
|
-
@previous_wait_time = Capybara.default_max_wait_time
|
|
114
|
-
end
|
|
124
|
+
before { @previous_wait_time = Capybara.default_max_wait_time }
|
|
115
125
|
|
|
116
|
-
after
|
|
117
|
-
Capybara.default_max_wait_time = @previous_wait_time
|
|
118
|
-
end
|
|
126
|
+
after { Capybara.default_max_wait_time = @previous_wait_time }
|
|
119
127
|
|
|
120
|
-
it
|
|
128
|
+
it 'should switch the wait time and switch it back' do
|
|
121
129
|
in_block = nil
|
|
122
130
|
Capybara.using_wait_time 6 do
|
|
123
131
|
in_block = Capybara.default_max_wait_time
|
|
@@ -126,40 +134,41 @@ RSpec.describe Capybara::DSL do
|
|
|
126
134
|
expect(Capybara.default_max_wait_time).to eq(@previous_wait_time)
|
|
127
135
|
end
|
|
128
136
|
|
|
129
|
-
it
|
|
137
|
+
it 'should ensure wait time is reset' do
|
|
130
138
|
expect do
|
|
131
139
|
Capybara.using_wait_time 6 do
|
|
132
|
-
raise
|
|
140
|
+
raise 'hell'
|
|
133
141
|
end
|
|
134
|
-
end.to raise_error(RuntimeError,
|
|
142
|
+
end.to raise_error(RuntimeError, 'hell')
|
|
135
143
|
expect(Capybara.default_max_wait_time).to eq(@previous_wait_time)
|
|
136
144
|
end
|
|
137
145
|
end
|
|
146
|
+
# rubocop:enable RSpec/InstanceVariable
|
|
138
147
|
|
|
139
148
|
describe '#app' do
|
|
140
|
-
it
|
|
141
|
-
Capybara.app =
|
|
149
|
+
it 'should be changeable' do
|
|
150
|
+
Capybara.app = 'foobar'
|
|
142
151
|
expect(Capybara.app).to eq('foobar')
|
|
143
152
|
end
|
|
144
153
|
end
|
|
145
154
|
|
|
146
155
|
describe '#current_session' do
|
|
147
|
-
it
|
|
156
|
+
it 'should choose a session object of the current driver type' do
|
|
148
157
|
expect(Capybara.current_session).to be_a(Capybara::Session)
|
|
149
158
|
end
|
|
150
159
|
|
|
151
|
-
it
|
|
160
|
+
it 'should use #app as the application' do
|
|
152
161
|
Capybara.app = proc {}
|
|
153
162
|
expect(Capybara.current_session.app).to eq(Capybara.app)
|
|
154
163
|
end
|
|
155
164
|
|
|
156
|
-
it
|
|
165
|
+
it 'should change with the current driver' do
|
|
157
166
|
expect(Capybara.current_session.mode).to eq(:rack_test)
|
|
158
167
|
Capybara.current_driver = :selenium
|
|
159
168
|
expect(Capybara.current_session.mode).to eq(:selenium)
|
|
160
169
|
end
|
|
161
170
|
|
|
162
|
-
it
|
|
171
|
+
it 'should be persistent even across driver changes' do
|
|
163
172
|
object_id = Capybara.current_session.object_id
|
|
164
173
|
expect(Capybara.current_session.object_id).to eq(object_id)
|
|
165
174
|
Capybara.current_driver = :selenium
|
|
@@ -170,7 +179,7 @@ RSpec.describe Capybara::DSL do
|
|
|
170
179
|
expect(Capybara.current_session.object_id).to eq(object_id)
|
|
171
180
|
end
|
|
172
181
|
|
|
173
|
-
it
|
|
182
|
+
it 'should change when changing application' do
|
|
174
183
|
object_id = Capybara.current_session.object_id
|
|
175
184
|
expect(Capybara.current_session.object_id).to eq(object_id)
|
|
176
185
|
Capybara.app = proc {}
|
|
@@ -178,7 +187,7 @@ RSpec.describe Capybara::DSL do
|
|
|
178
187
|
expect(Capybara.current_session.app).to eq(Capybara.app)
|
|
179
188
|
end
|
|
180
189
|
|
|
181
|
-
it
|
|
190
|
+
it 'should change when the session name changes' do
|
|
182
191
|
object_id = Capybara.current_session.object_id
|
|
183
192
|
Capybara.session_name = :administrator
|
|
184
193
|
expect(Capybara.session_name).to eq(:administrator)
|
|
@@ -189,8 +198,8 @@ RSpec.describe Capybara::DSL do
|
|
|
189
198
|
end
|
|
190
199
|
end
|
|
191
200
|
|
|
192
|
-
describe
|
|
193
|
-
it
|
|
201
|
+
describe '#using_session' do
|
|
202
|
+
it 'should change the session name for the duration of the block' do
|
|
194
203
|
expect(Capybara.session_name).to eq(:default)
|
|
195
204
|
Capybara.using_session(:administrator) do
|
|
196
205
|
expect(Capybara.session_name).to eq(:administrator)
|
|
@@ -198,23 +207,23 @@ RSpec.describe Capybara::DSL do
|
|
|
198
207
|
expect(Capybara.session_name).to eq(:default)
|
|
199
208
|
end
|
|
200
209
|
|
|
201
|
-
it
|
|
210
|
+
it 'should reset the session to the default, even if an exception occurs' do
|
|
202
211
|
begin
|
|
203
212
|
Capybara.using_session(:raise) do
|
|
204
213
|
raise
|
|
205
214
|
end
|
|
206
|
-
rescue Exception # rubocop:disable Lint/RescueException
|
|
215
|
+
rescue Exception # rubocop:disable Lint/RescueException,Lint/SuppressedException
|
|
207
216
|
end
|
|
208
217
|
expect(Capybara.session_name).to eq(:default)
|
|
209
218
|
end
|
|
210
219
|
|
|
211
|
-
it
|
|
220
|
+
it 'should yield the passed block' do
|
|
212
221
|
called = false
|
|
213
222
|
Capybara.using_session(:administrator) { called = true }
|
|
214
223
|
expect(called).to eq(true)
|
|
215
224
|
end
|
|
216
225
|
|
|
217
|
-
it
|
|
226
|
+
it 'should be nestable' do
|
|
218
227
|
Capybara.using_session(:outer) do
|
|
219
228
|
expect(Capybara.session_name).to eq(:outer)
|
|
220
229
|
Capybara.using_session(:inner) do
|
|
@@ -224,39 +233,57 @@ RSpec.describe Capybara::DSL do
|
|
|
224
233
|
end
|
|
225
234
|
expect(Capybara.session_name).to eq(:default)
|
|
226
235
|
end
|
|
236
|
+
|
|
237
|
+
it 'should allow a session object' do
|
|
238
|
+
original_session = Capybara.current_session
|
|
239
|
+
new_session = Capybara::Session.new(:rack_test, proc {})
|
|
240
|
+
Capybara.using_session(new_session) do
|
|
241
|
+
expect(Capybara.current_session).to eq(new_session)
|
|
242
|
+
end
|
|
243
|
+
expect(Capybara.current_session).to eq(original_session)
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
it 'should pass the new session if block accepts' do
|
|
247
|
+
original_session = Capybara.current_session
|
|
248
|
+
Capybara.using_session(:administrator) do |admin_session, prev_session|
|
|
249
|
+
expect(admin_session).to be(Capybara.current_session)
|
|
250
|
+
expect(prev_session).to be(original_session)
|
|
251
|
+
expect(prev_session).not_to be(admin_session)
|
|
252
|
+
end
|
|
253
|
+
end
|
|
227
254
|
end
|
|
228
255
|
|
|
229
|
-
describe
|
|
230
|
-
it
|
|
256
|
+
describe '#session_name' do
|
|
257
|
+
it 'should default to :default' do
|
|
231
258
|
expect(Capybara.session_name).to eq(:default)
|
|
232
259
|
end
|
|
233
260
|
end
|
|
234
261
|
|
|
235
262
|
describe 'the DSL' do
|
|
236
|
-
|
|
237
|
-
@session = Class.new { include Capybara::DSL }.new
|
|
238
|
-
end
|
|
263
|
+
let(:session) { Class.new { include Capybara::DSL }.new }
|
|
239
264
|
|
|
240
|
-
it
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
expect(
|
|
265
|
+
it 'should be possible to include it in another class' do
|
|
266
|
+
session.visit('/with_html')
|
|
267
|
+
session.click_link('ullamco')
|
|
268
|
+
expect(session.body).to include('Another World')
|
|
244
269
|
end
|
|
245
270
|
|
|
246
271
|
it "should provide a 'page' shortcut for more expressive tests" do
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
expect(
|
|
272
|
+
session.page.visit('/with_html')
|
|
273
|
+
session.page.click_link('ullamco')
|
|
274
|
+
expect(session.page.body).to include('Another World')
|
|
250
275
|
end
|
|
251
276
|
|
|
252
277
|
it "should provide an 'using_session' shortcut" do
|
|
253
|
-
|
|
254
|
-
|
|
278
|
+
allow(Capybara).to receive(:using_session)
|
|
279
|
+
session.using_session(:name)
|
|
280
|
+
expect(Capybara).to have_received(:using_session).with(:name)
|
|
255
281
|
end
|
|
256
282
|
|
|
257
283
|
it "should provide a 'using_wait_time' shortcut" do
|
|
258
|
-
|
|
259
|
-
|
|
284
|
+
allow(Capybara).to receive(:using_wait_time)
|
|
285
|
+
session.using_wait_time(6)
|
|
286
|
+
expect(Capybara).to have_received(:using_wait_time).with(6)
|
|
260
287
|
end
|
|
261
288
|
end
|
|
262
289
|
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-----
|