capybara 3.3.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 -0
- data/History.md +803 -13
- data/License.txt +1 -1
- data/README.md +257 -84
- data/lib/capybara/config.rb +25 -9
- data/lib/capybara/cucumber.rb +1 -1
- data/lib/capybara/driver/base.rb +17 -3
- data/lib/capybara/driver/node.rb +31 -6
- data/lib/capybara/dsl.rb +9 -7
- data/lib/capybara/helpers.rb +31 -7
- data/lib/capybara/minitest/spec.rb +180 -88
- data/lib/capybara/minitest.rb +262 -149
- data/lib/capybara/node/actions.rb +202 -116
- data/lib/capybara/node/base.rb +34 -19
- data/lib/capybara/node/document.rb +14 -2
- data/lib/capybara/node/document_matchers.rb +10 -12
- data/lib/capybara/node/element.rb +269 -115
- data/lib/capybara/node/finders.rb +99 -77
- data/lib/capybara/node/matchers.rb +327 -151
- data/lib/capybara/node/simple.rb +48 -13
- 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 +8 -9
- data/lib/capybara/queries/base_query.rb +23 -16
- data/lib/capybara/queries/current_path_query.rb +16 -6
- data/lib/capybara/queries/match_query.rb +1 -0
- data/lib/capybara/queries/selector_query.rb +587 -130
- data/lib/capybara/queries/sibling_query.rb +8 -6
- data/lib/capybara/queries/style_query.rb +6 -2
- data/lib/capybara/queries/text_query.rb +28 -14
- data/lib/capybara/queries/title_query.rb +2 -2
- data/lib/capybara/rack_test/browser.rb +92 -25
- 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 +68 -41
- data/lib/capybara/rack_test/node.rb +106 -39
- 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 +75 -52
- data/lib/capybara/rspec/features.rb +7 -7
- 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 +141 -339
- data/lib/capybara/rspec.rb +2 -0
- 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 +27 -25
- 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 +73 -25
- data/lib/capybara/selector/filters/base.rb +24 -5
- data/lib/capybara/selector/filters/expression_filter.rb +3 -3
- data/lib/capybara/selector/filters/locator_filter.rb +29 -0
- data/lib/capybara/selector/filters/node_filter.rb +16 -2
- data/lib/capybara/selector/regexp_disassembler.rb +211 -0
- data/lib/capybara/selector/selector.rb +85 -348
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/lib/capybara/selector.rb +474 -447
- 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 +255 -143
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +93 -11
- 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 +436 -134
- 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 +56 -19
- data/lib/capybara/server/checker.rb +9 -3
- data/lib/capybara/server/middleware.rb +28 -12
- data/lib/capybara/server.rb +33 -10
- data/lib/capybara/session/config.rb +34 -10
- data/lib/capybara/session/matchers.rb +23 -16
- data/lib/capybara/session.rb +230 -170
- 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 +121 -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 +127 -40
- 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_spec.rb +21 -18
- data/lib/capybara/spec/session/assert_selector_spec.rb +52 -58
- data/lib/capybara/spec/session/assert_style_spec.rb +7 -7
- data/lib/capybara/spec/session/assert_text_spec.rb +74 -50
- data/lib/capybara/spec/session/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 +6 -6
- data/lib/capybara/spec/session/check_spec.rb +102 -47
- data/lib/capybara/spec/session/choose_spec.rb +58 -32
- data/lib/capybara/spec/session/click_button_spec.rb +219 -163
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +49 -23
- data/lib/capybara/spec/session/click_link_spec.rb +77 -54
- data/lib/capybara/spec/session/current_scope_spec.rb +8 -8
- data/lib/capybara/spec/session/current_url_spec.rb +38 -29
- 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_spec.rb +8 -8
- data/lib/capybara/spec/session/element/match_css_spec.rb +16 -10
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +6 -6
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +68 -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 +101 -46
- data/lib/capybara/spec/session/find_button_spec.rb +23 -23
- data/lib/capybara/spec/session/find_by_id_spec.rb +7 -7
- data/lib/capybara/spec/session/find_field_spec.rb +32 -30
- data/lib/capybara/spec/session/find_link_spec.rb +31 -21
- data/lib/capybara/spec/session/find_spec.rb +244 -141
- data/lib/capybara/spec/session/first_spec.rb +43 -43
- data/lib/capybara/spec/session/frame/frame_title_spec.rb +5 -5
- data/lib/capybara/spec/session/frame/frame_url_spec.rb +5 -5
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +30 -18
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +45 -18
- 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 +94 -13
- data/lib/capybara/spec/session/has_css_spec.rb +272 -132
- 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 +44 -4
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +31 -31
- data/lib/capybara/spec/session/has_select_spec.rb +84 -50
- data/lib/capybara/spec/session/has_selector_spec.rb +111 -71
- 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_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 +894 -142
- data/lib/capybara/spec/session/node_wrapper_spec.rb +10 -7
- data/lib/capybara/spec/session/refresh_spec.rb +9 -7
- data/lib/capybara/spec/session/reset_session_spec.rb +63 -35
- data/lib/capybara/spec/session/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 +2 -2
- data/lib/capybara/spec/session/save_page_spec.rb +37 -37
- data/lib/capybara/spec/session/save_screenshot_spec.rb +10 -10
- 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 +85 -85
- data/lib/capybara/spec/session/selectors_spec.rb +49 -18
- data/lib/capybara/spec/session/sibling_spec.rb +9 -9
- data/lib/capybara/spec/session/text_spec.rb +25 -24
- data/lib/capybara/spec/session/title_spec.rb +7 -6
- data/lib/capybara/spec/session/uncheck_spec.rb +33 -21
- data/lib/capybara/spec/session/unselect_spec.rb +37 -37
- data/lib/capybara/spec/session/visit_spec.rb +68 -49
- data/lib/capybara/spec/session/window/become_closed_spec.rb +20 -17
- data/lib/capybara/spec/session/window/current_window_spec.rb +1 -1
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +20 -16
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +6 -2
- data/lib/capybara/spec/session/window/window_spec.rb +62 -63
- data/lib/capybara/spec/session/window/windows_spec.rb +5 -1
- data/lib/capybara/spec/session/window/within_window_spec.rb +14 -14
- data/lib/capybara/spec/session/within_spec.rb +79 -42
- data/lib/capybara/spec/spec_helper.rb +41 -53
- data/lib/capybara/spec/test_app.rb +132 -43
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/form.erb +139 -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 +67 -0
- data/lib/capybara/spec/views/with_animation.erb +39 -4
- 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 +37 -9
- 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 +26 -5
- data/lib/capybara/spec/views/with_jstree.erb +26 -0
- data/lib/capybara/spec/views/with_namespace.erb +1 -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 +19 -25
- data/lib/capybara.rb +126 -111
- data/spec/basic_node_spec.rb +59 -34
- data/spec/capybara_spec.rb +56 -44
- data/spec/counter_spec.rb +35 -0
- data/spec/css_builder_spec.rb +101 -0
- data/spec/css_splitter_spec.rb +8 -8
- data/spec/dsl_spec.rb +79 -52
- data/spec/filter_set_spec.rb +9 -9
- 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 +45 -7
- data/spec/minitest_spec_spec.rb +87 -64
- data/spec/per_session_config_spec.rb +6 -6
- data/spec/rack_test_spec.rb +172 -116
- data/spec/regexp_dissassembler_spec.rb +250 -0
- data/spec/result_spec.rb +80 -72
- data/spec/rspec/features_spec.rb +21 -16
- data/spec/rspec/scenarios_spec.rb +10 -6
- data/spec/rspec/shared_spec_matchers.rb +407 -365
- data/spec/rspec/views_spec.rb +3 -3
- data/spec/rspec_matchers_spec.rb +35 -10
- data/spec/rspec_spec.rb +63 -41
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +334 -89
- data/spec/selenium_spec_chrome.rb +176 -62
- data/spec/selenium_spec_chrome_remote.rb +54 -14
- 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 +171 -97
- data/spec/session_spec.rb +34 -18
- data/spec/shared_selenium_node.rb +79 -0
- data/spec/shared_selenium_session.rb +344 -80
- data/spec/spec_helper.rb +124 -2
- data/spec/whitespace_normalizer_spec.rb +54 -0
- data/spec/xpath_builder_spec.rb +93 -0
- metadata +326 -28
- data/lib/capybara/rspec/compound.rb +0 -94
- data/lib/capybara/selenium/driver_specializations/marionette_driver.rb +0 -31
- data/lib/capybara/selenium/nodes/marionette_node.rb +0 -31
- data/lib/capybara/spec/session/has_style_spec.rb +0 -25
- 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 -167
data/spec/capybara_spec.rb
CHANGED
|
@@ -4,109 +4,121 @@ require 'spec_helper'
|
|
|
4
4
|
|
|
5
5
|
RSpec.describe Capybara do
|
|
6
6
|
describe 'default_max_wait_time' do
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
before { @previous_default_time = described_class.default_max_wait_time }
|
|
8
|
+
|
|
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)
|
|
9
15
|
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe 'default_retry_interval' do
|
|
19
|
+
before { @previous_default_interval = described_class.default_retry_interval }
|
|
20
|
+
|
|
21
|
+
after { described_class.default_retry_interval = @previous_default_interval } # rubocop:disable RSpec/InstanceVariable
|
|
10
22
|
|
|
11
|
-
it
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
expect(
|
|
23
|
+
it 'should be changeable' do
|
|
24
|
+
expect(described_class.default_retry_interval).not_to eq(0.1)
|
|
25
|
+
described_class.default_retry_interval = 0.1
|
|
26
|
+
expect(described_class.default_retry_interval).to eq(0.1)
|
|
15
27
|
end
|
|
16
28
|
end
|
|
17
29
|
|
|
18
30
|
describe '.register_driver' do
|
|
19
|
-
it
|
|
20
|
-
|
|
31
|
+
it 'should add a new driver' do
|
|
32
|
+
described_class.register_driver :schmoo do |app|
|
|
21
33
|
Capybara::RackTest::Driver.new(app)
|
|
22
34
|
end
|
|
23
35
|
session = Capybara::Session.new(:schmoo, TestApp)
|
|
24
36
|
session.visit('/')
|
|
25
|
-
expect(session.body).to include(
|
|
37
|
+
expect(session.body).to include('Hello world!')
|
|
26
38
|
end
|
|
27
39
|
end
|
|
28
40
|
|
|
29
41
|
describe '.register_server' do
|
|
30
|
-
it
|
|
31
|
-
|
|
42
|
+
it 'should add a new server' do
|
|
43
|
+
described_class.register_server :blob do |_app, _port, _host|
|
|
32
44
|
# do nothing
|
|
33
45
|
end
|
|
34
46
|
|
|
35
|
-
expect(
|
|
47
|
+
expect(described_class.servers[:blob]).to be_truthy
|
|
36
48
|
end
|
|
37
49
|
end
|
|
38
50
|
|
|
39
|
-
describe
|
|
51
|
+
describe '.server' do
|
|
40
52
|
after do
|
|
41
|
-
|
|
53
|
+
described_class.server = :default
|
|
42
54
|
end
|
|
43
55
|
|
|
44
|
-
it
|
|
56
|
+
it 'should default to a proc that calls run_default_server' do
|
|
45
57
|
mock_app = Object.new
|
|
46
|
-
allow(
|
|
47
|
-
|
|
48
|
-
expect(
|
|
58
|
+
allow(described_class).to receive(:run_default_server).and_return(true)
|
|
59
|
+
described_class.server.call(mock_app, 8000)
|
|
60
|
+
expect(described_class).to have_received(:run_default_server).with(mock_app, 8000)
|
|
49
61
|
end
|
|
50
62
|
|
|
51
|
-
it
|
|
63
|
+
it 'should return a custom server proc' do
|
|
52
64
|
server = ->(_app, _port) {}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
expect(
|
|
65
|
+
described_class.register_server :custom, &server
|
|
66
|
+
described_class.server = :custom
|
|
67
|
+
expect(described_class.server).to eq(server)
|
|
56
68
|
end
|
|
57
69
|
|
|
58
|
-
it
|
|
59
|
-
expect(
|
|
70
|
+
it 'should have :webrick registered' do
|
|
71
|
+
expect(described_class.servers[:webrick]).not_to be_nil
|
|
60
72
|
end
|
|
61
73
|
|
|
62
|
-
it
|
|
63
|
-
expect(
|
|
74
|
+
it 'should have :puma registered' do
|
|
75
|
+
expect(described_class.servers[:puma]).not_to be_nil
|
|
64
76
|
end
|
|
65
77
|
end
|
|
66
78
|
|
|
67
|
-
describe
|
|
79
|
+
describe 'server=' do
|
|
68
80
|
after do
|
|
69
|
-
|
|
81
|
+
described_class.server = :default
|
|
70
82
|
end
|
|
71
83
|
|
|
72
|
-
it
|
|
84
|
+
it 'accepts a proc' do
|
|
73
85
|
server = ->(_app, _port) {}
|
|
74
|
-
|
|
75
|
-
expect(
|
|
86
|
+
described_class.server = server
|
|
87
|
+
expect(described_class.server).to eq server
|
|
76
88
|
end
|
|
77
89
|
end
|
|
78
90
|
|
|
79
91
|
describe 'app_host' do
|
|
80
92
|
after do
|
|
81
|
-
|
|
93
|
+
described_class.app_host = nil
|
|
82
94
|
end
|
|
83
95
|
|
|
84
|
-
it
|
|
85
|
-
expect {
|
|
96
|
+
it 'should warn if not a valid URL' do
|
|
97
|
+
expect { described_class.app_host = 'www.example.com' }.to raise_error(ArgumentError, /Capybara\.app_host should be set to a url/)
|
|
86
98
|
end
|
|
87
99
|
|
|
88
|
-
it
|
|
89
|
-
expect {
|
|
100
|
+
it 'should not warn if a valid URL' do
|
|
101
|
+
expect { described_class.app_host = 'http://www.example.com' }.not_to raise_error
|
|
90
102
|
end
|
|
91
103
|
|
|
92
|
-
it
|
|
93
|
-
expect {
|
|
104
|
+
it 'should not warn if nil' do
|
|
105
|
+
expect { described_class.app_host = nil }.not_to raise_error
|
|
94
106
|
end
|
|
95
107
|
end
|
|
96
108
|
|
|
97
109
|
describe 'default_host' do
|
|
98
110
|
around do |test|
|
|
99
|
-
old_default =
|
|
111
|
+
old_default = described_class.default_host
|
|
100
112
|
test.run
|
|
101
|
-
|
|
113
|
+
described_class.default_host = old_default
|
|
102
114
|
end
|
|
103
115
|
|
|
104
|
-
it
|
|
105
|
-
expect {
|
|
116
|
+
it 'should raise if not a valid URL' do
|
|
117
|
+
expect { described_class.default_host = 'www.example.com' }.to raise_error(ArgumentError, /Capybara\.default_host should be set to a url/)
|
|
106
118
|
end
|
|
107
119
|
|
|
108
|
-
it
|
|
109
|
-
expect {
|
|
120
|
+
it 'should not warn if a valid URL' do
|
|
121
|
+
expect { described_class.default_host = 'http://www.example.com' }.not_to raise_error
|
|
110
122
|
end
|
|
111
123
|
end
|
|
112
124
|
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
RSpec.describe Capybara::Server::Middleware::Counter do
|
|
6
|
+
let(:counter) { described_class.new }
|
|
7
|
+
let(:uri) { '/example' }
|
|
8
|
+
|
|
9
|
+
describe '#increment' do
|
|
10
|
+
it 'successfully' do
|
|
11
|
+
counter.increment(uri)
|
|
12
|
+
expect(counter).to be_positive
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe '#decrement' do
|
|
17
|
+
before do
|
|
18
|
+
counter.increment(uri)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
context 'successfully' do
|
|
22
|
+
it 'with same uri' do
|
|
23
|
+
expect(counter).to be_positive
|
|
24
|
+
counter.decrement(uri)
|
|
25
|
+
expect(counter).not_to be_positive
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'with changed uri' do
|
|
29
|
+
expect(counter).to be_positive
|
|
30
|
+
counter.decrement('/')
|
|
31
|
+
expect(counter).not_to be_positive
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
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
|
+
described_class.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
|
data/spec/css_splitter_spec.rb
CHANGED
|
@@ -4,33 +4,33 @@ require 'spec_helper'
|
|
|
4
4
|
|
|
5
5
|
RSpec.describe Capybara::Selector::CSS::Splitter do
|
|
6
6
|
let :splitter do
|
|
7
|
-
|
|
7
|
+
described_class.new
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
context
|
|
11
|
-
it
|
|
10
|
+
context 'split not needed' do
|
|
11
|
+
it 'normal CSS selector' do
|
|
12
12
|
css = 'div[id="abc"]'
|
|
13
13
|
expect(splitter.split(css)).to eq [css]
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
it
|
|
16
|
+
it 'comma in strings' do
|
|
17
17
|
css = 'div[id="a,bc"]'
|
|
18
18
|
expect(splitter.split(css)).to eq [css]
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
it
|
|
21
|
+
it 'comma in pseudo-selector' do
|
|
22
22
|
css = 'div.class1:not(.class1, .class2)'
|
|
23
23
|
expect(splitter.split(css)).to eq [css]
|
|
24
24
|
end
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
context
|
|
28
|
-
it
|
|
27
|
+
context 'split needed' do
|
|
28
|
+
it 'root level comma' do
|
|
29
29
|
css = 'div.class1, span, p.class2'
|
|
30
30
|
expect(splitter.split(css)).to eq ['div.class1', 'span', 'p.class2']
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
-
it
|
|
33
|
+
it 'root level comma when quotes and pseudo selectors' do
|
|
34
34
|
css = 'div.class1[id="abc\\"def,ghi"]:not(.class3, .class4), span[id=\'a"c\\\'de\'], section, #abc\\,def'
|
|
35
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
36
|
end
|
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 download css
|
|
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)
|
|
@@ -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,40 +235,56 @@ 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
280
|
allow(Capybara).to receive(:using_session)
|
|
254
|
-
|
|
281
|
+
session.using_session(:name)
|
|
255
282
|
expect(Capybara).to have_received(:using_session).with(:name)
|
|
256
283
|
end
|
|
257
284
|
|
|
258
285
|
it "should provide a 'using_wait_time' shortcut" do
|
|
259
286
|
allow(Capybara).to receive(:using_wait_time)
|
|
260
|
-
|
|
287
|
+
session.using_wait_time(6)
|
|
261
288
|
expect(Capybara).to have_received(:using_wait_time).with(6)
|
|
262
289
|
end
|
|
263
290
|
end
|