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
|
@@ -1,94 +1,97 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
# NOTE: This file uses `sleep` to sync up parts of the tests. This is only implemented like this
|
|
4
|
+
# because of the methods being tested. In tests using Capybara this type of behavior should be implemented
|
|
5
|
+
# using Capybara provided assertions with builtin waiting behavior.
|
|
6
|
+
|
|
3
7
|
Capybara::SpecHelper.spec Capybara::Window, requires: [:windows] do
|
|
4
|
-
|
|
5
|
-
|
|
8
|
+
let!(:orig_window) { @session.current_window }
|
|
9
|
+
before do
|
|
6
10
|
@session.visit('/with_windows')
|
|
7
11
|
end
|
|
8
|
-
|
|
9
|
-
|
|
12
|
+
|
|
13
|
+
after do
|
|
14
|
+
(@session.windows - [orig_window]).each do |w|
|
|
10
15
|
@session.switch_to_window w
|
|
11
16
|
w.close
|
|
12
17
|
end
|
|
13
|
-
@session.switch_to_window(
|
|
18
|
+
@session.switch_to_window(orig_window)
|
|
14
19
|
end
|
|
15
20
|
|
|
16
21
|
describe '#exists?' do
|
|
17
|
-
|
|
18
|
-
|
|
22
|
+
it 'should become false after window was closed' do
|
|
23
|
+
other_window = @session.window_opened_by do
|
|
19
24
|
@session.find(:css, '#openWindow').click
|
|
20
25
|
end
|
|
21
|
-
end
|
|
22
26
|
|
|
23
|
-
it "should become false after window was closed" do
|
|
24
27
|
expect do
|
|
25
|
-
@session.switch_to_window
|
|
26
|
-
|
|
27
|
-
end.to change
|
|
28
|
+
@session.switch_to_window other_window
|
|
29
|
+
other_window.close
|
|
30
|
+
end.to change(other_window, :exists?).from(true).to(false)
|
|
28
31
|
end
|
|
29
32
|
end
|
|
30
33
|
|
|
31
34
|
describe '#closed?' do
|
|
32
|
-
it
|
|
33
|
-
|
|
35
|
+
it 'should become true after window was closed' do
|
|
36
|
+
other_window = @session.window_opened_by do
|
|
34
37
|
@session.find(:css, '#openWindow').click
|
|
35
38
|
end
|
|
36
39
|
expect do
|
|
37
|
-
@session.switch_to_window
|
|
38
|
-
|
|
39
|
-
end.to change {
|
|
40
|
+
@session.switch_to_window other_window
|
|
41
|
+
other_window.close
|
|
42
|
+
end.to change { other_window.closed? }.from(false).to(true)
|
|
40
43
|
end
|
|
41
44
|
end
|
|
42
45
|
|
|
43
46
|
describe '#current?' do
|
|
44
|
-
|
|
45
|
-
@
|
|
47
|
+
let(:other_window) do
|
|
48
|
+
@session.window_opened_by do
|
|
46
49
|
@session.find(:css, '#openWindow').click
|
|
47
50
|
end
|
|
48
51
|
end
|
|
49
52
|
|
|
50
53
|
it 'should become true after switching to window' do
|
|
51
54
|
expect do
|
|
52
|
-
@session.switch_to_window(
|
|
53
|
-
end.to change
|
|
55
|
+
@session.switch_to_window(other_window)
|
|
56
|
+
end.to change(other_window, :current?).from(false).to(true)
|
|
54
57
|
end
|
|
55
58
|
|
|
56
59
|
it 'should return false if window is closed' do
|
|
57
|
-
@session.switch_to_window(
|
|
58
|
-
|
|
59
|
-
expect(
|
|
60
|
+
@session.switch_to_window(other_window)
|
|
61
|
+
other_window.close
|
|
62
|
+
expect(other_window.current?).to eq(false)
|
|
60
63
|
end
|
|
61
64
|
end
|
|
62
65
|
|
|
63
66
|
describe '#close' do
|
|
64
|
-
|
|
65
|
-
@
|
|
67
|
+
let!(:other_window) do
|
|
68
|
+
@session.window_opened_by do
|
|
66
69
|
@session.find(:css, '#openWindow').click
|
|
67
70
|
end
|
|
68
71
|
end
|
|
69
72
|
|
|
70
73
|
it 'should switch to original window if invoked not for current window' do
|
|
71
74
|
expect(@session.windows.size).to eq(2)
|
|
72
|
-
expect(@session.current_window).to eq(
|
|
73
|
-
|
|
75
|
+
expect(@session.current_window).to eq(orig_window)
|
|
76
|
+
other_window.close
|
|
74
77
|
expect(@session.windows.size).to eq(1)
|
|
75
|
-
expect(@session.current_window).to eq(
|
|
78
|
+
expect(@session.current_window).to eq(orig_window)
|
|
76
79
|
end
|
|
77
80
|
|
|
78
81
|
it 'should make subsequent invocations of other methods raise no_such_window_error if invoked for current window' do
|
|
79
|
-
@session.switch_to_window(
|
|
80
|
-
expect(@session.current_window).to eq(
|
|
81
|
-
|
|
82
|
+
@session.switch_to_window(other_window)
|
|
83
|
+
expect(@session.current_window).to eq(other_window)
|
|
84
|
+
other_window.close
|
|
82
85
|
expect do
|
|
83
86
|
@session.find(:css, '#some_id')
|
|
84
87
|
end.to raise_error(@session.driver.no_such_window_error)
|
|
85
|
-
@session.switch_to_window(
|
|
88
|
+
@session.switch_to_window(orig_window)
|
|
86
89
|
end
|
|
87
90
|
end
|
|
88
91
|
|
|
89
92
|
describe '#size' do
|
|
90
93
|
def win_size
|
|
91
|
-
@session.evaluate_script(
|
|
94
|
+
@session.evaluate_script('[window.outerWidth || window.innerWidth, window.outerHeight || window.innerHeight]')
|
|
92
95
|
end
|
|
93
96
|
|
|
94
97
|
it 'should return size of whole window', requires: %i[windows js] do
|
|
@@ -96,42 +99,57 @@ Capybara::SpecHelper.spec Capybara::Window, requires: [:windows] do
|
|
|
96
99
|
end
|
|
97
100
|
|
|
98
101
|
it 'should switch to original window if invoked not for current window' do
|
|
99
|
-
|
|
102
|
+
other_window = @session.window_opened_by do
|
|
100
103
|
@session.find(:css, '#openWindow').click
|
|
101
104
|
end
|
|
102
105
|
sleep 1
|
|
103
|
-
size = @session.within_window(
|
|
106
|
+
size = @session.within_window(other_window) do
|
|
104
107
|
win_size
|
|
105
108
|
end
|
|
106
|
-
expect(
|
|
107
|
-
expect(@session.current_window).to eq(
|
|
109
|
+
expect(other_window.size).to eq(size)
|
|
110
|
+
expect(@session.current_window).to eq(orig_window)
|
|
108
111
|
end
|
|
109
112
|
end
|
|
110
113
|
|
|
111
114
|
describe '#resize_to' do
|
|
115
|
+
let!(:initial_size) { @session.current_window.size }
|
|
116
|
+
|
|
117
|
+
after do
|
|
118
|
+
@session.current_window.resize_to(*initial_size)
|
|
119
|
+
sleep 1
|
|
120
|
+
end
|
|
121
|
+
|
|
112
122
|
it 'should be able to resize window', requires: %i[windows js] do
|
|
113
|
-
width, height =
|
|
123
|
+
width, height = initial_size
|
|
114
124
|
@session.current_window.resize_to(width - 100, height - 100)
|
|
115
125
|
sleep 1
|
|
116
126
|
expect(@session.current_window.size).to eq([width - 100, height - 100])
|
|
117
127
|
end
|
|
118
128
|
|
|
119
129
|
it 'should stay on current window if invoked not for current window', requires: %i[windows js] do
|
|
120
|
-
|
|
130
|
+
other_window = @session.window_opened_by do
|
|
121
131
|
@session.find(:css, '#openWindow').click
|
|
122
132
|
end
|
|
123
|
-
@other_window.resize_to(400, 300)
|
|
124
|
-
expect(@session.current_window).to eq(@window)
|
|
125
133
|
|
|
126
|
-
|
|
127
|
-
@session.
|
|
128
|
-
|
|
129
|
-
|
|
134
|
+
other_window.resize_to(600, 400)
|
|
135
|
+
expect(@session.current_window).to eq(orig_window)
|
|
136
|
+
|
|
137
|
+
@session.within_window(other_window) do
|
|
138
|
+
expect(@session.current_window.size).to eq([600, 400])
|
|
130
139
|
end
|
|
131
140
|
end
|
|
132
141
|
end
|
|
133
142
|
|
|
134
143
|
describe '#maximize' do
|
|
144
|
+
let! :initial_size do
|
|
145
|
+
@session.current_window.size
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
after do
|
|
149
|
+
@session.current_window.resize_to(*initial_size)
|
|
150
|
+
sleep 0.5
|
|
151
|
+
end
|
|
152
|
+
|
|
135
153
|
it 'should be able to maximize window', requires: %i[windows js] do
|
|
136
154
|
start_width, start_height = 400, 300
|
|
137
155
|
@session.current_window.resize_to(start_width, start_height)
|
|
@@ -148,22 +166,38 @@ Capybara::SpecHelper.spec Capybara::Window, requires: [:windows] do
|
|
|
148
166
|
end
|
|
149
167
|
|
|
150
168
|
it 'should stay on current window if invoked not for current window', requires: %i[windows js] do
|
|
151
|
-
|
|
152
|
-
@other_window = @session.window_opened_by do
|
|
169
|
+
other_window = @session.window_opened_by do
|
|
153
170
|
@session.find(:css, '#openWindow').click
|
|
154
171
|
end
|
|
155
|
-
|
|
156
|
-
@other_window.resize_to(400, 300)
|
|
172
|
+
other_window.resize_to(400, 300)
|
|
157
173
|
sleep 0.5
|
|
158
|
-
|
|
174
|
+
other_window.maximize
|
|
159
175
|
sleep 0.5 # The timing on maximize is finicky on Travis -- wait a bit for maximize to occur
|
|
160
176
|
|
|
161
|
-
expect(@session.current_window).to eq(
|
|
162
|
-
|
|
177
|
+
expect(@session.current_window).to eq(orig_window)
|
|
178
|
+
# Maximizing the browser affects all tabs so this may not be valid in real browsers
|
|
179
|
+
# expect(@session.current_window.size).to eq(initial_size)
|
|
163
180
|
|
|
164
|
-
ow_width, ow_height =
|
|
181
|
+
ow_width, ow_height = other_window.size
|
|
165
182
|
expect(ow_width).to be > 400
|
|
166
183
|
expect(ow_height).to be > 300
|
|
167
184
|
end
|
|
168
185
|
end
|
|
186
|
+
|
|
187
|
+
describe '#fullscreen' do
|
|
188
|
+
let! :initial_size do
|
|
189
|
+
@session.current_window.size
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
after do
|
|
193
|
+
@session.current_window.resize_to(*initial_size)
|
|
194
|
+
sleep 1
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
it 'should be able to fullscreen the window' do
|
|
198
|
+
expect do
|
|
199
|
+
@session.current_window.fullscreen
|
|
200
|
+
end.not_to raise_error
|
|
201
|
+
end
|
|
202
|
+
end
|
|
169
203
|
end
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
# NOTE: This file uses `sleep` to sync up parts of the tests. This is only implemented like this
|
|
4
|
+
# because of the methods being tested. In tests using Capybara this type of behavior should be implemented
|
|
5
|
+
# using Capybara provided assertions with builtin waiting behavior.
|
|
6
|
+
|
|
3
7
|
Capybara::SpecHelper.spec '#windows', requires: [:windows] do
|
|
4
|
-
before
|
|
8
|
+
before do
|
|
5
9
|
@window = @session.current_window
|
|
6
10
|
@session.visit('/with_windows')
|
|
7
11
|
@session.find(:css, '#openTwoWindows').click
|
|
@@ -10,11 +14,9 @@ Capybara::SpecHelper.spec '#windows', requires: [:windows] do
|
|
|
10
14
|
raise Capybara::CapybaraError if @session.windows.size != 3
|
|
11
15
|
end
|
|
12
16
|
end
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
w.close
|
|
17
|
-
end
|
|
17
|
+
|
|
18
|
+
after do
|
|
19
|
+
(@session.windows - [@window]).each(&:close)
|
|
18
20
|
@session.switch_to_window(@window)
|
|
19
21
|
end
|
|
20
22
|
|
|
@@ -22,7 +24,8 @@ Capybara::SpecHelper.spec '#windows', requires: [:windows] do
|
|
|
22
24
|
expect(@session.windows.map { |window| window.instance_of?(Capybara::Window) }).to eq([true] * 3)
|
|
23
25
|
end
|
|
24
26
|
|
|
25
|
-
it 'should
|
|
27
|
+
it 'should be able to switch to windows' do
|
|
28
|
+
sleep 1 # give windows enough time to fully load
|
|
26
29
|
titles = @session.windows.map do |window|
|
|
27
30
|
@session.within_window(window) { @session.title }
|
|
28
31
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
|
|
4
|
-
before
|
|
4
|
+
before do
|
|
5
5
|
@window = @session.current_window
|
|
6
6
|
@session.visit('/with_windows')
|
|
7
7
|
@session.find(:css, '#openTwoWindows').click
|
|
@@ -10,7 +10,8 @@ Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
|
|
|
10
10
|
raise Capybara::CapybaraError if @session.windows.size != 3
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
|
-
|
|
13
|
+
|
|
14
|
+
after do
|
|
14
15
|
(@session.windows - [@window]).each do |w|
|
|
15
16
|
@session.switch_to_window w
|
|
16
17
|
w.close
|
|
@@ -18,8 +19,8 @@ Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
|
|
|
18
19
|
@session.switch_to_window(@window)
|
|
19
20
|
end
|
|
20
21
|
|
|
21
|
-
context
|
|
22
|
-
it
|
|
22
|
+
context 'with an instance of Capybara::Window' do
|
|
23
|
+
it 'should not invoke driver#switch_to_window when given current window' do
|
|
23
24
|
allow(@session.driver).to receive(:switch_to_window).and_call_original
|
|
24
25
|
@session.within_window @window do
|
|
25
26
|
expect(@session.title).to eq('With Windows')
|
|
@@ -27,7 +28,7 @@ Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
|
|
|
27
28
|
expect(@session.driver).not_to have_received(:switch_to_window)
|
|
28
29
|
end
|
|
29
30
|
|
|
30
|
-
it
|
|
31
|
+
it 'should be able to switch to another window' do
|
|
31
32
|
window = (@session.windows - [@window]).first
|
|
32
33
|
@session.within_window window do
|
|
33
34
|
expect(@session).to have_title(/Title of the first popup|Title of popup two/)
|
|
@@ -35,7 +36,7 @@ Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
|
|
|
35
36
|
expect(@session.title).to eq('With Windows')
|
|
36
37
|
end
|
|
37
38
|
|
|
38
|
-
it
|
|
39
|
+
it 'returns value from the block' do
|
|
39
40
|
window = (@session.windows - [@window]).first
|
|
40
41
|
value = @session.within_window window do
|
|
41
42
|
43252003274489856000
|
|
@@ -43,7 +44,7 @@ Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
|
|
|
43
44
|
expect(value).to eq(43252003274489856000)
|
|
44
45
|
end
|
|
45
46
|
|
|
46
|
-
it
|
|
47
|
+
it 'should switch back if exception was raised inside block' do
|
|
47
48
|
window = (@session.windows - [@window]).first
|
|
48
49
|
expect do
|
|
49
50
|
@session.within_window(window) do
|
|
@@ -57,7 +58,7 @@ Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
|
|
|
57
58
|
expect(@session.send(:scopes)).to eq([nil])
|
|
58
59
|
end
|
|
59
60
|
|
|
60
|
-
it
|
|
61
|
+
it 'should leave correct scopes after execution in case of error', requires: %i[windows frames] do
|
|
61
62
|
window = (@session.windows - [@window]).first
|
|
62
63
|
expect do
|
|
63
64
|
@session.within_frame 'frameOne' do
|
|
@@ -85,14 +86,14 @@ Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
|
|
|
85
86
|
end
|
|
86
87
|
end
|
|
87
88
|
|
|
88
|
-
context
|
|
89
|
-
it
|
|
89
|
+
context 'with lambda' do
|
|
90
|
+
it 'should find the div in another window' do
|
|
90
91
|
@session.within_window(-> { @session.title == 'Title of the first popup' }) do
|
|
91
92
|
expect(@session).to have_css('#divInPopupOne')
|
|
92
93
|
end
|
|
93
94
|
end
|
|
94
95
|
|
|
95
|
-
it
|
|
96
|
+
it 'should find divs in both windows' do
|
|
96
97
|
@session.within_window(-> { @session.title == 'Title of popup two' }) do
|
|
97
98
|
expect(@session).to have_css('#divInPopupTwo')
|
|
98
99
|
end
|
|
@@ -102,7 +103,7 @@ Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
|
|
|
102
103
|
expect(@session.title).to eq('With Windows')
|
|
103
104
|
end
|
|
104
105
|
|
|
105
|
-
it
|
|
106
|
+
it 'should be able to nest within_window' do
|
|
106
107
|
@session.within_window(-> { @session.title == 'Title of popup two' }) do
|
|
107
108
|
expect(@session).to have_css('#divInPopupTwo')
|
|
108
109
|
@session.within_window(-> { @session.title == 'Title of the first popup' }) do
|
|
@@ -116,7 +117,7 @@ Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
|
|
|
116
117
|
expect(@session.title).to eq('With Windows')
|
|
117
118
|
end
|
|
118
119
|
|
|
119
|
-
it
|
|
120
|
+
it 'should work inside a normal scope' do
|
|
120
121
|
expect(@session).to have_css('#openWindow')
|
|
121
122
|
@session.within(:css, '#scope') do
|
|
122
123
|
@session.within_window(-> { @session.title == 'Title of the first popup' }) do
|
|
@@ -132,18 +133,18 @@ Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
|
|
|
132
133
|
@session.within_window(-> { @session.title == 'Invalid title' }) do
|
|
133
134
|
expect(@session).to have_css('#divInPopupOne')
|
|
134
135
|
end
|
|
135
|
-
end.to raise_error(Capybara::WindowError,
|
|
136
|
+
end.to raise_error(Capybara::WindowError, 'Could not find a window matching block/lambda')
|
|
136
137
|
expect(@session.current_window).to eq(@window)
|
|
137
138
|
expect(@session).to have_css('#doesNotOpenWindows')
|
|
138
139
|
expect(@session.send(:scopes)).to eq([nil])
|
|
139
140
|
end
|
|
140
141
|
|
|
141
|
-
it
|
|
142
|
+
it 'returns value from the block' do
|
|
142
143
|
value = @session.within_window(-> { @session.title == 'Title of popup two' }) { 42 }
|
|
143
144
|
expect(value).to eq(42)
|
|
144
145
|
end
|
|
145
146
|
|
|
146
|
-
it
|
|
147
|
+
it 'should switch back if exception was raised inside block' do
|
|
147
148
|
expect do
|
|
148
149
|
@session.within_window(-> { @session.title == 'Title of popup two' }) do
|
|
149
150
|
raise 'some error'
|
|
@@ -5,31 +5,54 @@ Capybara::SpecHelper.spec '#within' do
|
|
|
5
5
|
@session.visit('/with_scope')
|
|
6
6
|
end
|
|
7
7
|
|
|
8
|
-
context
|
|
9
|
-
it
|
|
10
|
-
@session.within(:css,
|
|
8
|
+
context 'with CSS selector' do
|
|
9
|
+
it 'should click links in the given scope' do
|
|
10
|
+
@session.within(:css, '#for_bar li:first-child') do
|
|
11
11
|
@session.click_link('Go')
|
|
12
12
|
end
|
|
13
13
|
expect(@session).to have_content('Bar')
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
it
|
|
17
|
-
@session.within(:css,
|
|
16
|
+
it 'should assert content in the given scope' do
|
|
17
|
+
@session.within(:css, '#for_foo') do
|
|
18
18
|
expect(@session).not_to have_content('First Name')
|
|
19
19
|
end
|
|
20
20
|
expect(@session).to have_content('First Name')
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
-
it
|
|
24
|
-
@session.within(:css,
|
|
23
|
+
it 'should accept additional options' do
|
|
24
|
+
@session.within(:css, '#for_bar li', text: 'With Simple HTML') do
|
|
25
25
|
@session.click_link('Go')
|
|
26
26
|
end
|
|
27
27
|
expect(@session).to have_content('Bar')
|
|
28
28
|
end
|
|
29
|
+
|
|
30
|
+
it 'should reload the node if the page is changed' do
|
|
31
|
+
@session.within(:css, '#for_foo') do
|
|
32
|
+
@session.visit('/with_scope_other')
|
|
33
|
+
expect(@session).to have_content('Different text')
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'should reload multiple nodes if the page is changed' do
|
|
38
|
+
@session.within(:css, '#for_bar') do
|
|
39
|
+
@session.within(:css, 'form[action="/redirect"]') do
|
|
40
|
+
@session.refresh
|
|
41
|
+
expect(@session).to have_content('First Name')
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'should error if the page is changed and a matching node no longer exists' do
|
|
47
|
+
@session.within(:css, '#for_foo') do
|
|
48
|
+
@session.visit('/')
|
|
49
|
+
expect { @session.text }.to raise_error(StandardError)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
29
52
|
end
|
|
30
53
|
|
|
31
|
-
context
|
|
32
|
-
it
|
|
54
|
+
context 'with XPath selector' do
|
|
55
|
+
it 'should click links in the given scope' do
|
|
33
56
|
@session.within(:xpath, "//div[@id='for_bar']//li[contains(.,'With Simple HTML')]") do
|
|
34
57
|
@session.click_link('Go')
|
|
35
58
|
end
|
|
@@ -37,8 +60,8 @@ Capybara::SpecHelper.spec '#within' do
|
|
|
37
60
|
end
|
|
38
61
|
end
|
|
39
62
|
|
|
40
|
-
context
|
|
41
|
-
it
|
|
63
|
+
context 'with the default selector' do
|
|
64
|
+
it 'should use XPath' do
|
|
42
65
|
@session.within("//div[@id='for_bar']//li[contains(.,'With Simple HTML')]") do
|
|
43
66
|
@session.click_link('Go')
|
|
44
67
|
end
|
|
@@ -46,9 +69,9 @@ Capybara::SpecHelper.spec '#within' do
|
|
|
46
69
|
end
|
|
47
70
|
end
|
|
48
71
|
|
|
49
|
-
context
|
|
50
|
-
it
|
|
51
|
-
node_of_interest = @session.find(:css,
|
|
72
|
+
context 'with Node rather than selector' do
|
|
73
|
+
it 'should click links in the given scope' do
|
|
74
|
+
node_of_interest = @session.find(:css, '#for_bar li', text: 'With Simple HTML')
|
|
52
75
|
|
|
53
76
|
@session.within(node_of_interest) do
|
|
54
77
|
@session.click_link('Go')
|
|
@@ -57,19 +80,21 @@ Capybara::SpecHelper.spec '#within' do
|
|
|
57
80
|
end
|
|
58
81
|
end
|
|
59
82
|
|
|
60
|
-
context
|
|
83
|
+
context 'with the default selector set to CSS' do
|
|
61
84
|
before { Capybara.default_selector = :css }
|
|
62
|
-
|
|
63
|
-
|
|
85
|
+
|
|
86
|
+
after { Capybara.default_selector = :xpath }
|
|
87
|
+
|
|
88
|
+
it 'should use CSS' do
|
|
89
|
+
@session.within('#for_bar li', text: 'With Simple HTML') do
|
|
64
90
|
@session.click_link('Go')
|
|
65
91
|
end
|
|
66
92
|
expect(@session).to have_content('Bar')
|
|
67
93
|
end
|
|
68
|
-
after { Capybara.default_selector = :xpath }
|
|
69
94
|
end
|
|
70
95
|
|
|
71
|
-
context
|
|
72
|
-
it
|
|
96
|
+
context 'with nested scopes' do
|
|
97
|
+
it 'should respect the inner scope' do
|
|
73
98
|
@session.within("//div[@id='for_bar']") do
|
|
74
99
|
@session.within(".//li[contains(.,'Bar')]") do
|
|
75
100
|
@session.click_link('Go')
|
|
@@ -78,7 +103,7 @@ Capybara::SpecHelper.spec '#within' do
|
|
|
78
103
|
expect(@session).to have_content('Another World')
|
|
79
104
|
end
|
|
80
105
|
|
|
81
|
-
it
|
|
106
|
+
it 'should respect the outer scope' do
|
|
82
107
|
@session.within("//div[@id='another_foo']") do
|
|
83
108
|
@session.within(".//li[contains(.,'With Simple HTML')]") do
|
|
84
109
|
@session.click_link('Go')
|
|
@@ -88,14 +113,14 @@ Capybara::SpecHelper.spec '#within' do
|
|
|
88
113
|
end
|
|
89
114
|
end
|
|
90
115
|
|
|
91
|
-
it
|
|
116
|
+
it 'should raise an error if the scope is not found on the page' do
|
|
92
117
|
expect do
|
|
93
118
|
@session.within("//div[@id='doesnotexist']") do
|
|
94
119
|
end
|
|
95
120
|
end.to raise_error(Capybara::ElementNotFound)
|
|
96
121
|
end
|
|
97
122
|
|
|
98
|
-
it
|
|
123
|
+
it 'should restore the scope when an error is raised' do
|
|
99
124
|
expect do
|
|
100
125
|
@session.within("//div[@id='for_bar']") do
|
|
101
126
|
expect do
|
|
@@ -103,12 +128,12 @@ Capybara::SpecHelper.spec '#within' do
|
|
|
103
128
|
@session.within(".//div[@id='doesnotexist']") do
|
|
104
129
|
end
|
|
105
130
|
end.to raise_error(Capybara::ElementNotFound)
|
|
106
|
-
end.
|
|
131
|
+
end.not_to change { @session.has_xpath?(".//div[@id='another_foo']") }.from(false)
|
|
107
132
|
end
|
|
108
|
-
end.
|
|
133
|
+
end.not_to change { @session.has_xpath?(".//div[@id='another_foo']") }.from(true)
|
|
109
134
|
end
|
|
110
135
|
|
|
111
|
-
it
|
|
136
|
+
it 'should fill in a field and click a button' do
|
|
112
137
|
@session.within("//li[contains(.,'Bar')]") do
|
|
113
138
|
@session.click_button('Go')
|
|
114
139
|
end
|
|
@@ -121,9 +146,9 @@ Capybara::SpecHelper.spec '#within' do
|
|
|
121
146
|
expect(extract_results(@session)['first_name']).to eq('Dagobert')
|
|
122
147
|
end
|
|
123
148
|
|
|
124
|
-
it
|
|
149
|
+
it 'should have #within_element as an alias' do
|
|
125
150
|
expect(Capybara::Session.instance_method(:within)).to eq Capybara::Session.instance_method(:within_element)
|
|
126
|
-
@session.within_element(:css,
|
|
151
|
+
@session.within_element(:css, '#for_foo') do
|
|
127
152
|
expect(@session).not_to have_content('First Name')
|
|
128
153
|
end
|
|
129
154
|
end
|
|
@@ -134,18 +159,18 @@ Capybara::SpecHelper.spec '#within_fieldset' do
|
|
|
134
159
|
@session.visit('/fieldsets')
|
|
135
160
|
end
|
|
136
161
|
|
|
137
|
-
it
|
|
138
|
-
@session.within_fieldset(
|
|
139
|
-
@session.fill_in(
|
|
140
|
-
@session.click_button(
|
|
162
|
+
it 'should restrict scope to a fieldset given by id' do
|
|
163
|
+
@session.within_fieldset('villain_fieldset') do
|
|
164
|
+
@session.fill_in('Name', with: 'Goldfinger')
|
|
165
|
+
@session.click_button('Create')
|
|
141
166
|
end
|
|
142
167
|
expect(extract_results(@session)['villain_name']).to eq('Goldfinger')
|
|
143
168
|
end
|
|
144
169
|
|
|
145
|
-
it
|
|
146
|
-
@session.within_fieldset(
|
|
147
|
-
@session.fill_in(
|
|
148
|
-
@session.click_button(
|
|
170
|
+
it 'should restrict scope to a fieldset given by legend' do
|
|
171
|
+
@session.within_fieldset('Villain') do
|
|
172
|
+
@session.fill_in('Name', with: 'Goldfinger')
|
|
173
|
+
@session.click_button('Create')
|
|
149
174
|
end
|
|
150
175
|
expect(extract_results(@session)['villain_name']).to eq('Goldfinger')
|
|
151
176
|
end
|
|
@@ -156,18 +181,18 @@ Capybara::SpecHelper.spec '#within_table' do
|
|
|
156
181
|
@session.visit('/tables')
|
|
157
182
|
end
|
|
158
183
|
|
|
159
|
-
it
|
|
160
|
-
@session.within_table(
|
|
161
|
-
@session.fill_in(
|
|
162
|
-
@session.click_button(
|
|
184
|
+
it 'should restrict scope to a fieldset given by id' do
|
|
185
|
+
@session.within_table('girl_table') do
|
|
186
|
+
@session.fill_in('Name', with: 'Christmas')
|
|
187
|
+
@session.click_button('Create')
|
|
163
188
|
end
|
|
164
189
|
expect(extract_results(@session)['girl_name']).to eq('Christmas')
|
|
165
190
|
end
|
|
166
191
|
|
|
167
|
-
it
|
|
168
|
-
@session.within_table(
|
|
169
|
-
@session.fill_in(
|
|
170
|
-
@session.click_button(
|
|
192
|
+
it 'should restrict scope to a fieldset given by legend' do
|
|
193
|
+
@session.within_table('Villain') do
|
|
194
|
+
@session.fill_in('Name', with: 'Quantum')
|
|
195
|
+
@session.click_button('Create')
|
|
171
196
|
end
|
|
172
197
|
expect(extract_results(@session)['villain_name']).to eq('Quantum')
|
|
173
198
|
end
|