capybara 2.18.0 → 3.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.yardopts +1 -1
- data/History.md +945 -12
- data/License.txt +1 -1
- data/README.md +264 -90
- data/lib/capybara/config.rb +29 -57
- data/lib/capybara/cucumber.rb +2 -3
- data/lib/capybara/driver/base.rb +35 -18
- data/lib/capybara/driver/node.rb +40 -10
- data/lib/capybara/dsl.rb +10 -7
- data/lib/capybara/helpers.rb +70 -31
- data/lib/capybara/minitest/spec.rb +185 -83
- data/lib/capybara/minitest.rb +232 -112
- data/lib/capybara/node/actions.rb +274 -171
- data/lib/capybara/node/base.rb +42 -34
- data/lib/capybara/node/document.rb +15 -3
- data/lib/capybara/node/document_matchers.rb +19 -21
- data/lib/capybara/node/element.rb +362 -135
- data/lib/capybara/node/finders.rb +151 -137
- data/lib/capybara/node/matchers.rb +394 -209
- data/lib/capybara/node/simple.rb +59 -26
- data/lib/capybara/node/whitespace_normalizer.rb +81 -0
- data/lib/capybara/queries/active_element_query.rb +18 -0
- data/lib/capybara/queries/ancestor_query.rb +12 -9
- data/lib/capybara/queries/base_query.rb +39 -28
- data/lib/capybara/queries/current_path_query.rb +21 -27
- data/lib/capybara/queries/match_query.rb +14 -7
- data/lib/capybara/queries/selector_query.rb +659 -149
- data/lib/capybara/queries/sibling_query.rb +11 -9
- data/lib/capybara/queries/style_query.rb +45 -0
- data/lib/capybara/queries/text_query.rb +56 -38
- data/lib/capybara/queries/title_query.rb +8 -11
- data/lib/capybara/rack_test/browser.rb +114 -42
- data/lib/capybara/rack_test/css_handlers.rb +6 -4
- data/lib/capybara/rack_test/driver.rb +22 -17
- data/lib/capybara/rack_test/errors.rb +6 -0
- data/lib/capybara/rack_test/form.rb +93 -58
- data/lib/capybara/rack_test/node.rb +184 -81
- data/lib/capybara/rails.rb +3 -7
- data/lib/capybara/registration_container.rb +41 -0
- data/lib/capybara/registrations/drivers.rb +42 -0
- data/lib/capybara/registrations/patches/puma_ssl.rb +29 -0
- data/lib/capybara/registrations/servers.rb +66 -0
- data/lib/capybara/result.rb +97 -63
- data/lib/capybara/rspec/features.rb +17 -50
- data/lib/capybara/rspec/matcher_proxies.rb +52 -15
- data/lib/capybara/rspec/matchers/base.rb +113 -0
- data/lib/capybara/rspec/matchers/become_closed.rb +33 -0
- data/lib/capybara/rspec/matchers/compound.rb +88 -0
- data/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
- data/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
- data/lib/capybara/rspec/matchers/have_current_path.rb +29 -0
- data/lib/capybara/rspec/matchers/have_selector.rb +69 -0
- data/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
- data/lib/capybara/rspec/matchers/have_text.rb +33 -0
- data/lib/capybara/rspec/matchers/have_title.rb +29 -0
- data/lib/capybara/rspec/matchers/match_selector.rb +27 -0
- data/lib/capybara/rspec/matchers/match_style.rb +43 -0
- data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
- data/lib/capybara/rspec/matchers.rb +146 -310
- data/lib/capybara/rspec.rb +7 -11
- data/lib/capybara/selector/builders/css_builder.rb +84 -0
- data/lib/capybara/selector/builders/xpath_builder.rb +71 -0
- data/lib/capybara/selector/css.rb +85 -13
- data/lib/capybara/selector/definition/button.rb +68 -0
- data/lib/capybara/selector/definition/checkbox.rb +26 -0
- data/lib/capybara/selector/definition/css.rb +10 -0
- data/lib/capybara/selector/definition/datalist_input.rb +35 -0
- data/lib/capybara/selector/definition/datalist_option.rb +25 -0
- data/lib/capybara/selector/definition/element.rb +28 -0
- data/lib/capybara/selector/definition/field.rb +40 -0
- data/lib/capybara/selector/definition/fieldset.rb +14 -0
- data/lib/capybara/selector/definition/file_field.rb +13 -0
- data/lib/capybara/selector/definition/fillable_field.rb +33 -0
- data/lib/capybara/selector/definition/frame.rb +17 -0
- data/lib/capybara/selector/definition/id.rb +6 -0
- data/lib/capybara/selector/definition/label.rb +62 -0
- data/lib/capybara/selector/definition/link.rb +55 -0
- data/lib/capybara/selector/definition/link_or_button.rb +16 -0
- data/lib/capybara/selector/definition/option.rb +27 -0
- data/lib/capybara/selector/definition/radio_button.rb +27 -0
- data/lib/capybara/selector/definition/select.rb +81 -0
- data/lib/capybara/selector/definition/table.rb +109 -0
- data/lib/capybara/selector/definition/table_row.rb +21 -0
- data/lib/capybara/selector/definition/xpath.rb +5 -0
- data/lib/capybara/selector/definition.rb +280 -0
- data/lib/capybara/selector/filter.rb +2 -17
- data/lib/capybara/selector/filter_set.rb +80 -33
- data/lib/capybara/selector/filters/base.rb +50 -6
- data/lib/capybara/selector/filters/expression_filter.rb +8 -26
- data/lib/capybara/selector/filters/locator_filter.rb +29 -0
- data/lib/capybara/selector/filters/node_filter.rb +16 -12
- data/lib/capybara/selector/regexp_disassembler.rb +211 -0
- data/lib/capybara/selector/selector.rb +93 -210
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/lib/capybara/selector.rb +475 -523
- data/lib/capybara/selenium/atoms/getAttribute.min.js +1 -0
- data/lib/capybara/selenium/atoms/isDisplayed.min.js +1 -0
- data/lib/capybara/selenium/atoms/src/getAttribute.js +161 -0
- data/lib/capybara/selenium/atoms/src/isDisplayed.js +454 -0
- data/lib/capybara/selenium/driver.rb +298 -267
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
- data/lib/capybara/selenium/driver_specializations/edge_driver.rb +128 -0
- data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +84 -0
- data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +26 -0
- data/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
- data/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
- data/lib/capybara/selenium/extensions/find.rb +110 -0
- data/lib/capybara/selenium/extensions/html5_drag.rb +229 -0
- data/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
- data/lib/capybara/selenium/extensions/scroll.rb +76 -0
- data/lib/capybara/selenium/node.rb +517 -145
- data/lib/capybara/selenium/nodes/chrome_node.rb +125 -0
- data/lib/capybara/selenium/nodes/edge_node.rb +110 -0
- data/lib/capybara/selenium/nodes/firefox_node.rb +136 -0
- data/lib/capybara/selenium/nodes/ie_node.rb +22 -0
- data/lib/capybara/selenium/nodes/safari_node.rb +118 -0
- data/lib/capybara/selenium/patches/atoms.rb +18 -0
- data/lib/capybara/selenium/patches/is_displayed.rb +16 -0
- data/lib/capybara/selenium/patches/logs.rb +45 -0
- data/lib/capybara/selenium/patches/pause_duration_fix.rb +9 -0
- data/lib/capybara/selenium/patches/persistent_client.rb +20 -0
- data/lib/capybara/server/animation_disabler.rb +80 -0
- data/lib/capybara/server/checker.rb +44 -0
- data/lib/capybara/server/middleware.rb +71 -0
- data/lib/capybara/server.rb +59 -67
- data/lib/capybara/session/config.rb +81 -67
- data/lib/capybara/session/matchers.rb +28 -20
- data/lib/capybara/session.rb +337 -365
- data/lib/capybara/spec/public/jquery.js +5 -5
- data/lib/capybara/spec/public/offset.js +6 -0
- data/lib/capybara/spec/public/test.js +151 -12
- data/lib/capybara/spec/session/accept_alert_spec.rb +12 -11
- data/lib/capybara/spec/session/accept_confirm_spec.rb +6 -5
- data/lib/capybara/spec/session/accept_prompt_spec.rb +10 -10
- data/lib/capybara/spec/session/active_element_spec.rb +31 -0
- data/lib/capybara/spec/session/all_spec.rb +161 -57
- data/lib/capybara/spec/session/ancestor_spec.rb +27 -24
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +68 -38
- data/lib/capybara/spec/session/assert_current_path_spec.rb +75 -0
- data/lib/capybara/spec/session/assert_selector_spec.rb +143 -0
- data/lib/capybara/spec/session/assert_style_spec.rb +26 -0
- data/lib/capybara/spec/session/assert_text_spec.rb +258 -0
- data/lib/capybara/spec/session/{assert_title.rb → assert_title_spec.rb} +22 -12
- data/lib/capybara/spec/session/attach_file_spec.rb +144 -69
- data/lib/capybara/spec/session/body_spec.rb +12 -13
- data/lib/capybara/spec/session/check_spec.rb +117 -55
- data/lib/capybara/spec/session/choose_spec.rb +64 -31
- data/lib/capybara/spec/session/click_button_spec.rb +231 -173
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +55 -35
- data/lib/capybara/spec/session/click_link_spec.rb +93 -58
- data/lib/capybara/spec/session/current_scope_spec.rb +12 -11
- data/lib/capybara/spec/session/current_url_spec.rb +57 -39
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +4 -4
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +3 -2
- data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb} +11 -9
- data/lib/capybara/spec/session/element/match_css_spec.rb +18 -10
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +9 -7
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +71 -57
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +8 -7
- data/lib/capybara/spec/session/evaluate_script_spec.rb +29 -8
- data/lib/capybara/spec/session/execute_script_spec.rb +10 -8
- data/lib/capybara/spec/session/fill_in_spec.rb +134 -43
- data/lib/capybara/spec/session/find_button_spec.rb +25 -24
- data/lib/capybara/spec/session/find_by_id_spec.rb +10 -9
- data/lib/capybara/spec/session/find_field_spec.rb +37 -41
- data/lib/capybara/spec/session/find_link_spec.rb +46 -17
- data/lib/capybara/spec/session/find_spec.rb +260 -145
- data/lib/capybara/spec/session/first_spec.rb +80 -52
- data/lib/capybara/spec/session/frame/frame_title_spec.rb +23 -0
- data/lib/capybara/spec/session/frame/frame_url_spec.rb +23 -0
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +33 -20
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +52 -32
- data/lib/capybara/spec/session/go_back_spec.rb +2 -1
- data/lib/capybara/spec/session/go_forward_spec.rb +2 -1
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +31 -31
- data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
- data/lib/capybara/spec/session/has_any_selectors_spec.rb +29 -0
- data/lib/capybara/spec/session/has_button_spec.rb +100 -13
- data/lib/capybara/spec/session/has_css_spec.rb +272 -137
- data/lib/capybara/spec/session/has_current_path_spec.rb +60 -61
- data/lib/capybara/spec/session/has_element_spec.rb +47 -0
- data/lib/capybara/spec/session/has_field_spec.rb +139 -59
- data/lib/capybara/spec/session/has_link_spec.rb +47 -6
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +42 -40
- data/lib/capybara/spec/session/has_select_spec.rb +107 -72
- data/lib/capybara/spec/session/has_selector_spec.rb +120 -71
- data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
- data/lib/capybara/spec/session/has_table_spec.rb +183 -5
- data/lib/capybara/spec/session/has_text_spec.rb +106 -62
- data/lib/capybara/spec/session/has_title_spec.rb +20 -14
- data/lib/capybara/spec/session/has_xpath_spec.rb +57 -38
- data/lib/capybara/spec/session/{headers.rb → headers_spec.rb} +3 -2
- data/lib/capybara/spec/session/html_spec.rb +14 -6
- data/lib/capybara/spec/session/matches_style_spec.rb +37 -0
- data/lib/capybara/spec/session/node_spec.rb +1024 -153
- data/lib/capybara/spec/session/node_wrapper_spec.rb +39 -0
- data/lib/capybara/spec/session/refresh_spec.rb +12 -6
- data/lib/capybara/spec/session/reset_session_spec.rb +82 -35
- data/lib/capybara/spec/session/{response_code.rb → response_code_spec.rb} +2 -1
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +3 -2
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +8 -12
- data/lib/capybara/spec/session/save_page_spec.rb +42 -55
- data/lib/capybara/spec/session/save_screenshot_spec.rb +16 -14
- data/lib/capybara/spec/session/screenshot_spec.rb +2 -2
- data/lib/capybara/spec/session/scroll_spec.rb +119 -0
- data/lib/capybara/spec/session/select_spec.rb +107 -81
- data/lib/capybara/spec/session/selectors_spec.rb +52 -19
- data/lib/capybara/spec/session/sibling_spec.rb +10 -10
- data/lib/capybara/spec/session/text_spec.rb +37 -21
- data/lib/capybara/spec/session/title_spec.rb +17 -5
- data/lib/capybara/spec/session/uncheck_spec.rb +43 -23
- data/lib/capybara/spec/session/unselect_spec.rb +39 -38
- data/lib/capybara/spec/session/visit_spec.rb +85 -53
- data/lib/capybara/spec/session/window/become_closed_spec.rb +24 -20
- data/lib/capybara/spec/session/window/current_window_spec.rb +5 -3
- data/lib/capybara/spec/session/window/open_new_window_spec.rb +5 -3
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +27 -22
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +12 -6
- data/lib/capybara/spec/session/window/window_spec.rb +97 -63
- data/lib/capybara/spec/session/window/windows_spec.rb +12 -10
- data/lib/capybara/spec/session/window/within_window_spec.rb +31 -86
- data/lib/capybara/spec/session/within_spec.rb +83 -44
- data/lib/capybara/spec/spec_helper.rb +54 -44
- data/lib/capybara/spec/test_app.rb +158 -43
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/form.erb +163 -42
- data/lib/capybara/spec/views/frame_child.erb +4 -3
- data/lib/capybara/spec/views/frame_one.erb +2 -1
- data/lib/capybara/spec/views/frame_parent.erb +1 -1
- data/lib/capybara/spec/views/frame_two.erb +1 -1
- data/lib/capybara/spec/views/initial_alert.erb +2 -1
- data/lib/capybara/spec/views/layout.erb +10 -0
- data/lib/capybara/spec/views/obscured.erb +47 -0
- data/lib/capybara/spec/views/offset.erb +33 -0
- data/lib/capybara/spec/views/path.erb +2 -2
- data/lib/capybara/spec/views/popup_one.erb +1 -1
- data/lib/capybara/spec/views/popup_two.erb +1 -1
- data/lib/capybara/spec/views/react.erb +45 -0
- data/lib/capybara/spec/views/scroll.erb +21 -0
- data/lib/capybara/spec/views/spatial.erb +31 -0
- data/lib/capybara/spec/views/tables.erb +68 -1
- data/lib/capybara/spec/views/with_animation.erb +81 -0
- data/lib/capybara/spec/views/with_base_tag.erb +2 -2
- data/lib/capybara/spec/views/with_dragula.erb +24 -0
- data/lib/capybara/spec/views/with_fixed_header_footer.erb +2 -1
- data/lib/capybara/spec/views/with_hover.erb +3 -2
- data/lib/capybara/spec/views/with_hover1.erb +10 -0
- data/lib/capybara/spec/views/with_html.erb +69 -12
- data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
- data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
- data/lib/capybara/spec/views/with_js.erb +30 -5
- data/lib/capybara/spec/views/with_jstree.erb +26 -0
- data/lib/capybara/spec/views/with_namespace.erb +21 -0
- data/lib/capybara/spec/views/with_scope.erb +2 -2
- data/lib/capybara/spec/views/with_scope_other.erb +6 -0
- data/lib/capybara/spec/views/with_shadow.erb +31 -0
- data/lib/capybara/spec/views/with_slow_unload.erb +2 -1
- data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
- data/lib/capybara/spec/views/with_unload_alert.erb +1 -0
- data/lib/capybara/spec/views/with_windows.erb +1 -1
- data/lib/capybara/spec/views/within_frames.erb +5 -2
- data/lib/capybara/version.rb +2 -1
- data/lib/capybara/window.rb +36 -34
- data/lib/capybara.rb +134 -107
- data/spec/basic_node_spec.rb +60 -34
- data/spec/capybara_spec.rb +63 -88
- data/spec/counter_spec.rb +35 -0
- data/spec/css_builder_spec.rb +101 -0
- data/spec/css_splitter_spec.rb +38 -0
- data/spec/dsl_spec.rb +85 -64
- data/spec/filter_set_spec.rb +27 -9
- data/spec/fixtures/certificate.pem +25 -0
- data/spec/fixtures/key.pem +27 -0
- data/spec/fixtures/selenium_driver_rspec_failure.rb +6 -5
- data/spec/fixtures/selenium_driver_rspec_success.rb +6 -5
- data/spec/minitest_spec.rb +52 -7
- data/spec/minitest_spec_spec.rb +94 -63
- data/spec/per_session_config_spec.rb +14 -13
- data/spec/rack_test_spec.rb +194 -125
- data/spec/regexp_dissassembler_spec.rb +250 -0
- data/spec/result_spec.rb +111 -50
- data/spec/rspec/features_spec.rb +37 -31
- data/spec/rspec/scenarios_spec.rb +10 -8
- data/spec/rspec/shared_spec_matchers.rb +473 -422
- data/spec/rspec/views_spec.rb +5 -3
- data/spec/rspec_matchers_spec.rb +52 -11
- data/spec/rspec_spec.rb +109 -89
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +397 -68
- data/spec/selenium_spec_chrome.rb +187 -40
- data/spec/selenium_spec_chrome_remote.rb +96 -0
- data/spec/selenium_spec_edge.rb +60 -0
- data/spec/selenium_spec_firefox.rb +201 -41
- data/spec/selenium_spec_firefox_remote.rb +94 -0
- data/spec/selenium_spec_ie.rb +149 -0
- data/spec/selenium_spec_safari.rb +162 -0
- data/spec/server_spec.rb +213 -102
- data/spec/session_spec.rb +53 -16
- data/spec/shared_selenium_node.rb +79 -0
- data/spec/shared_selenium_session.rb +473 -122
- data/spec/spec_helper.rb +126 -7
- data/spec/whitespace_normalizer_spec.rb +54 -0
- data/spec/xpath_builder_spec.rb +93 -0
- metadata +355 -73
- data/.yard/templates_custom/default/class/html/selectors.erb +0 -38
- data/.yard/templates_custom/default/class/html/setup.rb +0 -17
- data/.yard/yard_extensions.rb +0 -78
- data/lib/capybara/query.rb +0 -7
- data/lib/capybara/rspec/compound.rb +0 -95
- data/lib/capybara/spec/session/assert_current_path.rb +0 -72
- data/lib/capybara/spec/session/assert_selector.rb +0 -148
- data/lib/capybara/spec/session/assert_text.rb +0 -234
- data/lib/capybara/spec/session/source_spec.rb +0 -0
- data/lib/capybara/spec/views/with_title.erb +0 -5
- data/spec/selenium_spec_marionette.rb +0 -127
|
@@ -1,43 +1,42 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
require 'capybara/spec/test_app'
|
|
3
4
|
|
|
4
5
|
Capybara::SpecHelper.spec '#current_url, #current_path, #current_host' do
|
|
5
|
-
before :all do
|
|
6
|
-
@servers = 2
|
|
6
|
+
before :all do # rubocop:disable RSpec/BeforeAfterAll
|
|
7
|
+
@servers = Array.new(2) { Capybara::Server.new(TestApp.new).boot }
|
|
7
8
|
# sanity check
|
|
8
|
-
expect(@servers[0].port).not_to eq(@servers[1].port)
|
|
9
|
-
expect(@servers.map
|
|
9
|
+
expect(@servers[0].port).not_to eq(@servers[1].port) # rubocop:disable RSpec/ExpectInHook
|
|
10
|
+
expect(@servers.map(&:port)).not_to include 80 # rubocop:disable RSpec/ExpectInHook
|
|
10
11
|
end
|
|
11
12
|
|
|
12
13
|
def bases
|
|
13
14
|
@servers.map { |s| "http://#{s.host}:#{s.port}" }
|
|
14
15
|
end
|
|
15
16
|
|
|
16
|
-
def should_be_on
|
|
17
|
-
#This delay is to give fully async drivers (selenium w/chromedriver) time for the browser
|
|
18
|
-
#to get to its destination - should be removed when we have a waiting current_url matcher
|
|
19
|
-
sleep 0.1 # remove and adjust tests when a waiting current_url/path matcher is implemented
|
|
17
|
+
def should_be_on(server_index, path = '/host', scheme = 'http')
|
|
20
18
|
# Check that we are on /host on the given server
|
|
21
19
|
s = @servers[server_index]
|
|
20
|
+
|
|
21
|
+
expect(@session).to have_current_path("#{scheme}://#{s.host}:#{s.port}#{path}", url: true)
|
|
22
|
+
|
|
22
23
|
expect(@session.current_url.chomp('?')).to eq("#{scheme}://#{s.host}:#{s.port}#{path}")
|
|
23
24
|
expect(@session.current_host).to eq("#{scheme}://#{s.host}") # no port
|
|
24
|
-
expect(@session.current_path).to eq(path)
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
expect(@session).to have_content("Current host is #{scheme}://#{s.host}:#{s.port}")
|
|
28
|
-
end
|
|
25
|
+
expect(@session.current_path).to eq(path.split('#')[0])
|
|
26
|
+
# Server should agree with us
|
|
27
|
+
expect(@session).to have_content("Current host is #{scheme}://#{s.host}:#{s.port}") if path == '/host'
|
|
29
28
|
end
|
|
30
29
|
|
|
31
30
|
def visit_host_links
|
|
32
31
|
@session.visit("#{bases[0]}/host_links?absolute_host=#{bases[1]}")
|
|
33
32
|
end
|
|
34
33
|
|
|
35
|
-
it
|
|
34
|
+
it 'is affected by visiting a page directly' do
|
|
36
35
|
@session.visit("#{bases[0]}/host")
|
|
37
36
|
should_be_on 0
|
|
38
37
|
end
|
|
39
38
|
|
|
40
|
-
it
|
|
39
|
+
it 'returns to the app host when visiting a relative url' do
|
|
41
40
|
Capybara.app_host = bases[1]
|
|
42
41
|
@session.visit("#{bases[0]}/host")
|
|
43
42
|
should_be_on 0
|
|
@@ -46,62 +45,81 @@ Capybara::SpecHelper.spec '#current_url, #current_path, #current_host' do
|
|
|
46
45
|
Capybara.app_host = nil
|
|
47
46
|
end
|
|
48
47
|
|
|
49
|
-
it
|
|
48
|
+
it 'is affected by setting Capybara.app_host' do
|
|
50
49
|
Capybara.app_host = bases[0]
|
|
51
|
-
@session.visit(
|
|
50
|
+
@session.visit('/host')
|
|
52
51
|
should_be_on 0
|
|
53
52
|
Capybara.app_host = bases[1]
|
|
54
|
-
@session.visit(
|
|
53
|
+
@session.visit('/host')
|
|
55
54
|
should_be_on 1
|
|
56
55
|
Capybara.app_host = nil
|
|
57
56
|
end
|
|
58
57
|
|
|
59
|
-
it
|
|
58
|
+
it 'is unaffected by following a relative link' do
|
|
60
59
|
visit_host_links
|
|
61
|
-
@session.click_link(
|
|
60
|
+
@session.click_link('Relative Host')
|
|
62
61
|
should_be_on 0
|
|
63
62
|
end
|
|
64
63
|
|
|
65
|
-
it
|
|
64
|
+
it 'is affected by following an absolute link' do
|
|
66
65
|
visit_host_links
|
|
67
|
-
@session.click_link(
|
|
66
|
+
@session.click_link('Absolute Host')
|
|
68
67
|
should_be_on 1
|
|
69
68
|
end
|
|
70
69
|
|
|
71
|
-
it
|
|
70
|
+
it 'is unaffected by posting through a relative form' do
|
|
72
71
|
visit_host_links
|
|
73
|
-
@session.click_button(
|
|
72
|
+
@session.click_button('Relative Host')
|
|
74
73
|
should_be_on 0
|
|
75
74
|
end
|
|
76
75
|
|
|
77
|
-
it
|
|
76
|
+
it 'is affected by posting through an absolute form' do
|
|
78
77
|
visit_host_links
|
|
79
|
-
@session.click_button(
|
|
78
|
+
@session.click_button('Absolute Host')
|
|
80
79
|
should_be_on 1
|
|
81
80
|
end
|
|
82
81
|
|
|
83
|
-
it
|
|
82
|
+
it 'is affected by following a redirect' do
|
|
84
83
|
@session.visit("#{bases[0]}/redirect")
|
|
85
|
-
should_be_on 0,
|
|
84
|
+
should_be_on 0, '/landed'
|
|
86
85
|
end
|
|
87
86
|
|
|
88
|
-
it
|
|
89
|
-
@session.visit("/
|
|
87
|
+
it 'maintains fragment' do
|
|
88
|
+
@session.visit("#{bases[0]}/redirect#fragment")
|
|
89
|
+
should_be_on 0, '/landed#fragment'
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it 'redirects to a fragment' do
|
|
93
|
+
@session.visit("#{bases[0]}/redirect_with_fragment")
|
|
94
|
+
should_be_on 0, '/landed#with_fragment'
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it 'is affected by pushState', requires: [:js] do
|
|
98
|
+
@session.visit('/with_js')
|
|
90
99
|
@session.execute_script("window.history.pushState({}, '', '/pushed')")
|
|
91
|
-
expect(@session.current_path).to eq(
|
|
100
|
+
expect(@session.current_path).to eq('/pushed')
|
|
92
101
|
end
|
|
93
102
|
|
|
94
|
-
it
|
|
95
|
-
@session.visit(
|
|
103
|
+
it 'is affected by replaceState', requires: [:js] do
|
|
104
|
+
@session.visit('/with_js')
|
|
96
105
|
@session.execute_script("window.history.replaceState({}, '', '/replaced')")
|
|
97
|
-
expect(@session.current_path).to eq(
|
|
106
|
+
expect(@session.current_path).to eq('/replaced')
|
|
98
107
|
end
|
|
99
108
|
|
|
100
|
-
it "doesn't raise exception on a nil current_url" do
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
@session.visit("/")
|
|
109
|
+
it "doesn't raise exception on a nil current_url", requires: [:driver] do
|
|
110
|
+
allow(@session.driver).to receive(:current_url).and_return(nil)
|
|
111
|
+
@session.visit('/')
|
|
104
112
|
expect { @session.current_url }.not_to raise_exception
|
|
105
113
|
expect { @session.current_path }.not_to raise_exception
|
|
106
114
|
end
|
|
115
|
+
|
|
116
|
+
context 'within iframe', requires: [:frames] do
|
|
117
|
+
it 'should get the url of the top level browsing context' do
|
|
118
|
+
@session.visit('/within_frames')
|
|
119
|
+
expect(@session.current_url).to match(/within_frames\z/)
|
|
120
|
+
@session.within_frame('frameOne') do
|
|
121
|
+
expect(@session.current_url).to match(/within_frames\z/)
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
107
125
|
end
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
Capybara::SpecHelper.spec '#dismiss_confirm', requires: [:modals] do
|
|
3
4
|
before do
|
|
4
5
|
@session.visit('/with_js')
|
|
5
6
|
end
|
|
6
7
|
|
|
7
|
-
it
|
|
8
|
+
it 'should dismiss the confirm' do
|
|
8
9
|
@session.dismiss_confirm do
|
|
9
10
|
@session.click_link('Open confirm')
|
|
10
11
|
end
|
|
11
12
|
expect(@session).to have_xpath("//a[@id='open-confirm' and @confirmed='false']")
|
|
12
13
|
end
|
|
13
14
|
|
|
14
|
-
it
|
|
15
|
+
it 'should dismiss the confirm if the message matches' do
|
|
15
16
|
@session.dismiss_confirm 'Confirm opened' do
|
|
16
17
|
@session.click_link('Open confirm')
|
|
17
18
|
end
|
|
@@ -26,8 +27,7 @@ Capybara::SpecHelper.spec '#dismiss_confirm', requires: [:modals] do
|
|
|
26
27
|
end.to raise_error(Capybara::ModalNotFound)
|
|
27
28
|
end
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
it "should return the message presented" do
|
|
30
|
+
it 'should return the message presented' do
|
|
31
31
|
message = @session.dismiss_confirm do
|
|
32
32
|
@session.click_link('Open confirm')
|
|
33
33
|
end
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
Capybara::SpecHelper.spec '#dismiss_prompt', requires: [:modals] do
|
|
3
4
|
before do
|
|
4
5
|
@session.visit('/with_js')
|
|
5
6
|
end
|
|
6
7
|
|
|
7
|
-
it
|
|
8
|
+
it 'should dismiss the prompt' do
|
|
8
9
|
@session.dismiss_prompt do
|
|
9
10
|
@session.click_link('Open prompt')
|
|
10
11
|
end
|
|
11
12
|
expect(@session).to have_xpath("//a[@id='open-prompt' and @response='dismissed']")
|
|
12
13
|
end
|
|
13
14
|
|
|
14
|
-
it
|
|
15
|
+
it 'should return the message presented' do
|
|
15
16
|
message = @session.dismiss_prompt do
|
|
16
17
|
@session.click_link('Open prompt')
|
|
17
18
|
end
|
data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb}
RENAMED
|
@@ -1,22 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
Capybara::SpecHelper.spec '#assert_matches_selector' do
|
|
2
4
|
before do
|
|
3
5
|
@session.visit('/with_html')
|
|
4
6
|
@element = @session.find(:css, 'span', text: '42')
|
|
5
7
|
end
|
|
6
8
|
|
|
7
|
-
it
|
|
9
|
+
it 'should be true if the given selector matches the element' do
|
|
8
10
|
expect(@element.assert_matches_selector(:css, '.number')).to be true
|
|
9
11
|
end
|
|
10
12
|
|
|
11
|
-
it
|
|
13
|
+
it 'should be false if the given selector does not match the element' do
|
|
12
14
|
expect { @element.assert_matches_selector(:css, '.not_number') }.to raise_error(Capybara::ElementNotFound)
|
|
13
15
|
end
|
|
14
16
|
|
|
15
|
-
it
|
|
17
|
+
it 'should not be callable on the session' do
|
|
16
18
|
expect { @session.assert_matches_selector(:css, '.number') }.to raise_error(NoMethodError)
|
|
17
19
|
end
|
|
18
20
|
|
|
19
|
-
it
|
|
21
|
+
it 'should wait for match to occur', requires: [:js] do
|
|
20
22
|
@session.visit('/with_js')
|
|
21
23
|
input = @session.find(:css, '#disable-on-click')
|
|
22
24
|
|
|
@@ -25,12 +27,12 @@ Capybara::SpecHelper.spec '#assert_matches_selector' do
|
|
|
25
27
|
expect(input.assert_matches_selector(:css, 'input:disabled')).to be true
|
|
26
28
|
end
|
|
27
29
|
|
|
28
|
-
it
|
|
29
|
-
expect { @element.assert_matches_selector(:css, '.number', count: 1) }.to raise_error(ArgumentError)
|
|
30
|
+
it 'should not accept count options' do
|
|
31
|
+
expect { @element.assert_matches_selector(:css, '.number', count: 1) }.to raise_error(ArgumentError, /count/)
|
|
30
32
|
end
|
|
31
33
|
|
|
32
|
-
it
|
|
33
|
-
@element.assert_matches_selector(:css, 'span') { |el| el[:class] ==
|
|
34
|
-
@element.assert_not_matches_selector(:css,'span') { |el| el[:class] ==
|
|
34
|
+
it 'should accept a filter block' do
|
|
35
|
+
@element.assert_matches_selector(:css, 'span') { |el| el[:class] == 'number' }
|
|
36
|
+
@element.assert_not_matches_selector(:css, 'span') { |el| el[:class] == 'not_number' }
|
|
35
37
|
end
|
|
36
38
|
end
|
|
@@ -1,23 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
Capybara::SpecHelper.spec '#match_css?' do
|
|
2
4
|
before do
|
|
3
5
|
@session.visit('/with_html')
|
|
4
6
|
@element = @session.find(:css, 'span', text: '42')
|
|
5
7
|
end
|
|
6
8
|
|
|
7
|
-
it
|
|
8
|
-
expect(@element).to match_css(
|
|
9
|
-
expect(@element).to match_css(
|
|
9
|
+
it 'should be true if the given selector matches the element' do
|
|
10
|
+
expect(@element).to match_css('span')
|
|
11
|
+
expect(@element).to match_css('span.number')
|
|
10
12
|
end
|
|
11
13
|
|
|
12
|
-
it
|
|
13
|
-
expect(@element).not_to match_css(
|
|
14
|
-
expect(@element).not_to match_css(
|
|
15
|
-
expect(@element).not_to match_css(
|
|
14
|
+
it 'should be false if the given selector does not match' do
|
|
15
|
+
expect(@element).not_to match_css('div')
|
|
16
|
+
expect(@element).not_to match_css('p a#doesnotexist')
|
|
17
|
+
expect(@element).not_to match_css('p.nosuchclass')
|
|
16
18
|
end
|
|
17
19
|
|
|
18
|
-
it
|
|
20
|
+
it 'should accept an optional filter block' do
|
|
19
21
|
# This would be better done with
|
|
20
|
-
expect(@element).to match_css('span') { |el| el[:class] ==
|
|
21
|
-
expect(@element).not_to match_css('span') { |el| el[:class] ==
|
|
22
|
+
expect(@element).to match_css('span') { |el| el[:class] == 'number' }
|
|
23
|
+
expect(@element).not_to match_css('span') { |el| el[:class] == 'not_number' }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'should work with root element found via ancestor' do
|
|
27
|
+
el = @session.find(:css, 'body').find(:xpath, '..')
|
|
28
|
+
expect(el).to match_css('html')
|
|
29
|
+
expect { expect(el).to not_match_css('html') }.to raise_exception(RSpec::Expectations::ExpectationNotMetError)
|
|
22
30
|
end
|
|
23
31
|
end
|
|
@@ -1,23 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
Capybara::SpecHelper.spec '#match_xpath?' do
|
|
2
4
|
before do
|
|
3
5
|
@session.visit('/with_html')
|
|
4
6
|
@element = @session.find(:css, 'span.number')
|
|
5
7
|
end
|
|
6
8
|
|
|
7
|
-
it
|
|
8
|
-
expect(@element).to match_xpath(
|
|
9
|
+
it 'should be true if the given selector is on the page' do
|
|
10
|
+
expect(@element).to match_xpath('//span')
|
|
9
11
|
expect(@element).to match_xpath("//span[@class='number']")
|
|
10
12
|
end
|
|
11
13
|
|
|
12
|
-
it
|
|
13
|
-
expect(@element).not_to match_xpath(
|
|
14
|
-
expect(@element).not_to match_xpath(
|
|
14
|
+
it 'should be false if the given selector is not on the page' do
|
|
15
|
+
expect(@element).not_to match_xpath('//abbr')
|
|
16
|
+
expect(@element).not_to match_xpath('//div')
|
|
15
17
|
expect(@element).not_to match_xpath("//span[@class='not_a_number']")
|
|
16
18
|
end
|
|
17
19
|
|
|
18
|
-
it
|
|
20
|
+
it 'should use xpath even if default selector is CSS' do
|
|
19
21
|
Capybara.default_selector = :css
|
|
20
22
|
expect(@element).not_to have_xpath("//span[@class='not_a_number']")
|
|
21
23
|
expect(@element).not_to have_xpath("//div[@class='number']")
|
|
22
24
|
end
|
|
23
|
-
end
|
|
25
|
+
end
|
|
@@ -1,46 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
Capybara::SpecHelper.spec '#match_selector?' do
|
|
4
|
+
let(:element) { @session.find(:xpath, '//span', text: '42') }
|
|
5
|
+
|
|
2
6
|
before do
|
|
3
7
|
@session.visit('/with_html')
|
|
4
|
-
@element = @session.find('//span', text: '42')
|
|
5
8
|
end
|
|
6
9
|
|
|
7
|
-
it
|
|
8
|
-
expect(
|
|
9
|
-
expect(
|
|
10
|
-
expect(
|
|
10
|
+
it 'should be true if the element matches the given selector' do
|
|
11
|
+
expect(element).to match_selector(:xpath, '//span')
|
|
12
|
+
expect(element).to match_selector(:css, 'span.number')
|
|
13
|
+
expect(element.matches_selector?(:css, 'span.number')).to be true
|
|
11
14
|
end
|
|
12
15
|
|
|
13
|
-
it
|
|
14
|
-
expect(
|
|
15
|
-
expect(
|
|
16
|
-
expect(
|
|
16
|
+
it 'should be false if the element does not match the given selector' do
|
|
17
|
+
expect(element).not_to match_selector(:xpath, '//div')
|
|
18
|
+
expect(element).not_to match_selector(:css, 'span.not_a_number')
|
|
19
|
+
expect(element.matches_selector?(:css, 'span.not_a_number')).to be false
|
|
17
20
|
end
|
|
18
21
|
|
|
19
|
-
it
|
|
22
|
+
it 'should use default selector' do
|
|
20
23
|
Capybara.default_selector = :css
|
|
21
|
-
expect(
|
|
22
|
-
expect(
|
|
24
|
+
expect(element).not_to match_selector('span.not_a_number')
|
|
25
|
+
expect(element).to match_selector('span.number')
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'should work with elements located via a sibling selector' do
|
|
29
|
+
sibling = element.sibling(:css, 'span', text: 'Other span')
|
|
30
|
+
expect(sibling).to match_selector(:xpath, '//span')
|
|
31
|
+
expect(sibling).to match_selector(:css, 'span')
|
|
23
32
|
end
|
|
24
33
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
34
|
+
it 'should work with the html element' do
|
|
35
|
+
html = @session.find('/html')
|
|
36
|
+
expect(html).to match_selector(:css, 'html')
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
context 'with text' do
|
|
40
|
+
it 'should discard all matches where the given string is not contained' do
|
|
41
|
+
expect(element).to match_selector('//span', text: '42')
|
|
42
|
+
expect(element).not_to match_selector('//span', text: 'Doesnotexist')
|
|
29
43
|
end
|
|
30
44
|
end
|
|
31
45
|
|
|
32
|
-
it
|
|
33
|
-
expect(
|
|
34
|
-
expect(
|
|
35
|
-
expect(
|
|
36
|
-
expect(
|
|
46
|
+
it 'should have css sugar' do
|
|
47
|
+
expect(element.matches_css?('span.number')).to be true
|
|
48
|
+
expect(element.matches_css?('span.not_a_number')).to be false
|
|
49
|
+
expect(element.matches_css?('span.number', text: '42')).to be true
|
|
50
|
+
expect(element.matches_css?('span.number', text: 'Nope')).to be false
|
|
37
51
|
end
|
|
38
52
|
|
|
39
|
-
it
|
|
40
|
-
expect(
|
|
41
|
-
expect(
|
|
42
|
-
expect(
|
|
43
|
-
expect(
|
|
53
|
+
it 'should have xpath sugar' do
|
|
54
|
+
expect(element.matches_xpath?('//span')).to be true
|
|
55
|
+
expect(element.matches_xpath?('//div')).to be false
|
|
56
|
+
expect(element.matches_xpath?('//span', text: '42')).to be true
|
|
57
|
+
expect(element.matches_xpath?('//span', text: 'Nope')).to be false
|
|
44
58
|
end
|
|
45
59
|
|
|
46
60
|
it 'should accept selector filters' do
|
|
@@ -52,55 +66,55 @@ Capybara::SpecHelper.spec '#match_selector?' do
|
|
|
52
66
|
it 'should accept a custom filter block' do
|
|
53
67
|
@session.visit('/form')
|
|
54
68
|
cbox = @session.find(:css, '#form_pets_dog')
|
|
55
|
-
expect(cbox).to match_selector(:checkbox){ |node| node[:id] ==
|
|
56
|
-
expect(cbox).not_to match_selector(:checkbox){ |node| node[:id] !=
|
|
57
|
-
expect(cbox.matches_selector?(:checkbox){ |node| node[:id] ==
|
|
58
|
-
expect(cbox.matches_selector?(:checkbox){ |node| node[:id] !=
|
|
69
|
+
expect(cbox).to match_selector(:checkbox) { |node| node[:id] == 'form_pets_dog' }
|
|
70
|
+
expect(cbox).not_to match_selector(:checkbox) { |node| node[:id] != 'form_pets_dog' }
|
|
71
|
+
expect(cbox.matches_selector?(:checkbox) { |node| node[:id] == 'form_pets_dog' }).to be true
|
|
72
|
+
expect(cbox.matches_selector?(:checkbox) { |node| node[:id] != 'form_pets_dog' }).to be false
|
|
59
73
|
end
|
|
60
74
|
end
|
|
61
75
|
|
|
62
76
|
Capybara::SpecHelper.spec '#not_matches_selector?' do
|
|
77
|
+
let(:element) { @session.find(:css, 'span', text: 42) }
|
|
63
78
|
before do
|
|
64
79
|
@session.visit('/with_html')
|
|
65
|
-
@element = @session.find(:css, "span", text: 42)
|
|
66
80
|
end
|
|
67
81
|
|
|
68
|
-
it
|
|
69
|
-
expect(
|
|
70
|
-
expect(
|
|
71
|
-
expect(
|
|
82
|
+
it 'should be false if the given selector matches the element' do
|
|
83
|
+
expect(element).not_to not_match_selector(:xpath, '//span')
|
|
84
|
+
expect(element).not_to not_match_selector(:css, 'span.number')
|
|
85
|
+
expect(element.not_matches_selector?(:css, 'span.number')).to be false
|
|
72
86
|
end
|
|
73
87
|
|
|
74
|
-
it
|
|
75
|
-
expect(
|
|
76
|
-
expect(
|
|
77
|
-
expect(
|
|
88
|
+
it 'should be true if the given selector does not match the element' do
|
|
89
|
+
expect(element).to not_match_selector(:xpath, '//abbr')
|
|
90
|
+
expect(element).to not_match_selector(:css, 'p a#doesnotexist')
|
|
91
|
+
expect(element.not_matches_selector?(:css, 'p a#doesnotexist')).to be true
|
|
78
92
|
end
|
|
79
93
|
|
|
80
|
-
it
|
|
94
|
+
it 'should use default selector' do
|
|
81
95
|
Capybara.default_selector = :css
|
|
82
|
-
expect(
|
|
83
|
-
expect(
|
|
96
|
+
expect(element).to not_match_selector('p a#doesnotexist')
|
|
97
|
+
expect(element).not_to not_match_selector('span.number')
|
|
84
98
|
end
|
|
85
99
|
|
|
86
|
-
context
|
|
87
|
-
it
|
|
88
|
-
expect(
|
|
89
|
-
expect(
|
|
100
|
+
context 'with text' do
|
|
101
|
+
it 'should discard all matches where the given string is contained' do
|
|
102
|
+
expect(element).not_to not_match_selector(:css, 'span.number', text: '42')
|
|
103
|
+
expect(element).to not_match_selector(:css, 'span.number', text: 'Doesnotexist')
|
|
90
104
|
end
|
|
91
105
|
end
|
|
92
106
|
|
|
93
|
-
it
|
|
94
|
-
expect(
|
|
95
|
-
expect(
|
|
96
|
-
expect(
|
|
97
|
-
expect(
|
|
107
|
+
it 'should have CSS sugar' do
|
|
108
|
+
expect(element.not_matches_css?('span.number')).to be false
|
|
109
|
+
expect(element.not_matches_css?('p a#doesnotexist')).to be true
|
|
110
|
+
expect(element.not_matches_css?('span.number', text: '42')).to be false
|
|
111
|
+
expect(element.not_matches_css?('span.number', text: 'Doesnotexist')).to be true
|
|
98
112
|
end
|
|
99
113
|
|
|
100
|
-
it
|
|
101
|
-
expect(
|
|
102
|
-
expect(
|
|
103
|
-
expect(
|
|
104
|
-
expect(
|
|
114
|
+
it 'should have xpath sugar' do
|
|
115
|
+
expect(element.not_matches_xpath?('//span')).to be false
|
|
116
|
+
expect(element.not_matches_xpath?('//div')).to be true
|
|
117
|
+
expect(element.not_matches_xpath?('//span', text: '42')).to be false
|
|
118
|
+
expect(element.not_matches_xpath?('//span', text: 'Doesnotexist')).to be true
|
|
105
119
|
end
|
|
106
|
-
end
|
|
120
|
+
end
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
|
|
3
|
+
Capybara::SpecHelper.spec '#evaluate_async_script', requires: [:js] do
|
|
4
|
+
it 'should evaluate the given script and return whatever it produces' do
|
|
4
5
|
@session.visit('/with_js')
|
|
5
|
-
expect(@session.evaluate_async_script(
|
|
6
|
+
expect(@session.evaluate_async_script('arguments[0](4)')).to eq(4)
|
|
6
7
|
end
|
|
7
8
|
|
|
8
|
-
it
|
|
9
|
+
it 'should support passing elements as arguments to the script', requires: %i[js es_args] do
|
|
9
10
|
@session.visit('/with_js')
|
|
10
11
|
el = @session.find(:css, '#drag p')
|
|
11
|
-
result = @session.evaluate_async_script(
|
|
12
|
-
expect(result).to eq [
|
|
12
|
+
result = @session.evaluate_async_script('arguments[2]([arguments[0].innerText, arguments[1]])', el, 'Doodle Funk')
|
|
13
|
+
expect(result).to eq ['This is a draggable element.', 'Doodle Funk']
|
|
13
14
|
end
|
|
14
15
|
|
|
15
|
-
it
|
|
16
|
+
it 'should support returning elements after asynchronous operation', requires: %i[js es_args] do
|
|
16
17
|
@session.visit('/with_js')
|
|
17
18
|
@session.find(:css, '#change') # ensure page has loaded and element is available
|
|
18
19
|
el = @session.evaluate_async_script("var cb = arguments[0]; setTimeout(function(){ cb(document.getElementById('change')) }, 100)")
|
|
@@ -1,28 +1,49 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
|
|
3
|
+
Capybara::SpecHelper.spec '#evaluate_script', requires: [:js] do
|
|
4
|
+
it 'should evaluate the given script and return whatever it produces' do
|
|
5
|
+
@session.visit('/with_js')
|
|
6
|
+
expect(@session.evaluate_script('1+3')).to eq(4)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it 'should ignore leading whitespace' do
|
|
4
10
|
@session.visit('/with_js')
|
|
5
|
-
expect(@session.evaluate_script(
|
|
11
|
+
expect(@session.evaluate_script('
|
|
12
|
+
1 + 3
|
|
13
|
+
')).to eq(4)
|
|
6
14
|
end
|
|
7
15
|
|
|
8
|
-
it
|
|
16
|
+
it 'should pass arguments to the script', requires: %i[js es_args] do
|
|
9
17
|
@session.visit('/with_js')
|
|
10
|
-
@session.
|
|
18
|
+
expect(@session).to have_css('#change')
|
|
19
|
+
@session.evaluate_script("document.getElementById('change').textContent = arguments[0]", 'Doodle Funk')
|
|
11
20
|
expect(@session).to have_css('#change', text: 'Doodle Funk')
|
|
12
21
|
end
|
|
13
22
|
|
|
14
|
-
it
|
|
23
|
+
it 'should support passing elements as arguments to the script', requires: %i[js es_args] do
|
|
15
24
|
@session.visit('/with_js')
|
|
16
25
|
el = @session.find(:css, '#change')
|
|
17
|
-
@session.evaluate_script(
|
|
26
|
+
@session.evaluate_script('arguments[0].textContent = arguments[1]', el, 'Doodle Funk')
|
|
18
27
|
expect(@session).to have_css('#change', text: 'Doodle Funk')
|
|
19
28
|
end
|
|
20
29
|
|
|
21
|
-
it
|
|
30
|
+
it 'should support returning elements', requires: %i[js es_args] do
|
|
22
31
|
@session.visit('/with_js')
|
|
23
32
|
@session.find(:css, '#change') # ensure page has loaded and element is available
|
|
24
33
|
el = @session.evaluate_script("document.getElementById('change')")
|
|
25
34
|
expect(el).to be_instance_of(Capybara::Node::Element)
|
|
26
35
|
expect(el).to eq(@session.find(:css, '#change'))
|
|
27
36
|
end
|
|
37
|
+
|
|
38
|
+
it 'should support multi statement via IIFE' do
|
|
39
|
+
@session.visit('/with_js')
|
|
40
|
+
@session.find(:css, '#change')
|
|
41
|
+
el = @session.evaluate_script(<<~JS)
|
|
42
|
+
(function(){
|
|
43
|
+
var el = document.getElementById('change');
|
|
44
|
+
return el;
|
|
45
|
+
})()
|
|
46
|
+
JS
|
|
47
|
+
expect(el).to eq(@session.find(:css, '#change'))
|
|
48
|
+
end
|
|
28
49
|
end
|