capybara 3.0.0 → 3.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.yardopts +1 -1
- data/History.md +891 -12
- data/License.txt +1 -1
- data/README.md +257 -84
- data/lib/capybara/config.rb +29 -10
- data/lib/capybara/cucumber.rb +1 -1
- data/lib/capybara/driver/base.rb +22 -4
- data/lib/capybara/driver/node.rb +38 -9
- data/lib/capybara/dsl.rb +9 -7
- data/lib/capybara/helpers.rb +57 -8
- data/lib/capybara/minitest/spec.rb +185 -84
- data/lib/capybara/minitest.rb +264 -145
- data/lib/capybara/node/actions.rb +248 -124
- data/lib/capybara/node/base.rb +35 -20
- data/lib/capybara/node/document.rb +14 -2
- data/lib/capybara/node/document_matchers.rb +13 -15
- data/lib/capybara/node/element.rb +350 -113
- data/lib/capybara/node/finders.rb +104 -82
- data/lib/capybara/node/matchers.rb +363 -157
- data/lib/capybara/node/simple.rb +54 -15
- data/lib/capybara/node/whitespace_normalizer.rb +81 -0
- data/lib/capybara/queries/active_element_query.rb +18 -0
- data/lib/capybara/queries/ancestor_query.rb +9 -10
- data/lib/capybara/queries/base_query.rb +25 -18
- data/lib/capybara/queries/current_path_query.rb +16 -6
- data/lib/capybara/queries/match_query.rb +11 -0
- data/lib/capybara/queries/selector_query.rb +617 -104
- data/lib/capybara/queries/sibling_query.rb +9 -7
- data/lib/capybara/queries/style_query.rb +45 -0
- data/lib/capybara/queries/text_query.rb +40 -22
- data/lib/capybara/queries/title_query.rb +2 -2
- data/lib/capybara/rack_test/browser.rb +106 -31
- data/lib/capybara/rack_test/driver.rb +16 -7
- data/lib/capybara/rack_test/errors.rb +6 -0
- data/lib/capybara/rack_test/form.rb +74 -49
- data/lib/capybara/rack_test/node.rb +120 -47
- data/lib/capybara/rails.rb +1 -1
- data/lib/capybara/registration_container.rb +41 -0
- data/lib/capybara/registrations/drivers.rb +42 -0
- data/lib/capybara/registrations/patches/puma_ssl.rb +29 -0
- data/lib/capybara/registrations/servers.rb +66 -0
- data/lib/capybara/result.rb +87 -53
- data/lib/capybara/rspec/features.rb +8 -10
- data/lib/capybara/rspec/matcher_proxies.rb +39 -18
- data/lib/capybara/rspec/matchers/base.rb +113 -0
- data/lib/capybara/rspec/matchers/become_closed.rb +33 -0
- data/lib/capybara/rspec/matchers/compound.rb +88 -0
- data/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
- data/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
- data/lib/capybara/rspec/matchers/have_current_path.rb +29 -0
- data/lib/capybara/rspec/matchers/have_selector.rb +69 -0
- data/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
- data/lib/capybara/rspec/matchers/have_text.rb +33 -0
- data/lib/capybara/rspec/matchers/have_title.rb +29 -0
- data/lib/capybara/rspec/matchers/match_selector.rb +27 -0
- data/lib/capybara/rspec/matchers/match_style.rb +43 -0
- data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
- data/lib/capybara/rspec/matchers.rb +142 -315
- data/lib/capybara/rspec.rb +3 -2
- data/lib/capybara/selector/builders/css_builder.rb +84 -0
- data/lib/capybara/selector/builders/xpath_builder.rb +71 -0
- data/lib/capybara/selector/css.rb +85 -8
- data/lib/capybara/selector/definition/button.rb +68 -0
- data/lib/capybara/selector/definition/checkbox.rb +26 -0
- data/lib/capybara/selector/definition/css.rb +10 -0
- data/lib/capybara/selector/definition/datalist_input.rb +35 -0
- data/lib/capybara/selector/definition/datalist_option.rb +25 -0
- data/lib/capybara/selector/definition/element.rb +28 -0
- data/lib/capybara/selector/definition/field.rb +40 -0
- data/lib/capybara/selector/definition/fieldset.rb +14 -0
- data/lib/capybara/selector/definition/file_field.rb +13 -0
- data/lib/capybara/selector/definition/fillable_field.rb +33 -0
- data/lib/capybara/selector/definition/frame.rb +17 -0
- data/lib/capybara/selector/definition/id.rb +6 -0
- data/lib/capybara/selector/definition/label.rb +62 -0
- data/lib/capybara/selector/definition/link.rb +55 -0
- data/lib/capybara/selector/definition/link_or_button.rb +16 -0
- data/lib/capybara/selector/definition/option.rb +27 -0
- data/lib/capybara/selector/definition/radio_button.rb +27 -0
- data/lib/capybara/selector/definition/select.rb +81 -0
- data/lib/capybara/selector/definition/table.rb +109 -0
- data/lib/capybara/selector/definition/table_row.rb +21 -0
- data/lib/capybara/selector/definition/xpath.rb +5 -0
- data/lib/capybara/selector/definition.rb +280 -0
- data/lib/capybara/selector/filter.rb +1 -0
- data/lib/capybara/selector/filter_set.rb +72 -28
- data/lib/capybara/selector/filters/base.rb +45 -2
- data/lib/capybara/selector/filters/expression_filter.rb +5 -6
- data/lib/capybara/selector/filters/locator_filter.rb +29 -0
- data/lib/capybara/selector/filters/node_filter.rb +18 -4
- data/lib/capybara/selector/regexp_disassembler.rb +211 -0
- data/lib/capybara/selector/selector.rb +89 -200
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/lib/capybara/selector.rb +474 -534
- data/lib/capybara/selenium/atoms/getAttribute.min.js +1 -0
- data/lib/capybara/selenium/atoms/isDisplayed.min.js +1 -0
- data/lib/capybara/selenium/atoms/src/getAttribute.js +161 -0
- data/lib/capybara/selenium/atoms/src/isDisplayed.js +454 -0
- data/lib/capybara/selenium/driver.rb +270 -245
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
- data/lib/capybara/selenium/driver_specializations/edge_driver.rb +128 -0
- data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +84 -0
- data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +26 -0
- data/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
- data/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
- data/lib/capybara/selenium/extensions/find.rb +110 -0
- data/lib/capybara/selenium/extensions/html5_drag.rb +229 -0
- data/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
- data/lib/capybara/selenium/extensions/scroll.rb +76 -0
- data/lib/capybara/selenium/node.rb +460 -170
- data/lib/capybara/selenium/nodes/chrome_node.rb +125 -0
- data/lib/capybara/selenium/nodes/edge_node.rb +110 -0
- data/lib/capybara/selenium/nodes/firefox_node.rb +136 -0
- data/lib/capybara/selenium/nodes/ie_node.rb +22 -0
- data/lib/capybara/selenium/nodes/safari_node.rb +118 -0
- data/lib/capybara/selenium/patches/atoms.rb +18 -0
- data/lib/capybara/selenium/patches/is_displayed.rb +16 -0
- data/lib/capybara/selenium/patches/logs.rb +45 -0
- data/lib/capybara/selenium/patches/pause_duration_fix.rb +9 -0
- data/lib/capybara/selenium/patches/persistent_client.rb +20 -0
- data/lib/capybara/server/animation_disabler.rb +80 -0
- data/lib/capybara/server/checker.rb +44 -0
- data/lib/capybara/server/middleware.rb +71 -0
- data/lib/capybara/server.rb +58 -67
- data/lib/capybara/session/config.rb +40 -6
- data/lib/capybara/session/matchers.rb +26 -19
- data/lib/capybara/session.rb +252 -194
- data/lib/capybara/spec/public/jquery.js +5 -5
- data/lib/capybara/spec/public/offset.js +6 -0
- data/lib/capybara/spec/public/test.js +126 -8
- data/lib/capybara/spec/session/accept_alert_spec.rb +11 -11
- data/lib/capybara/spec/session/accept_confirm_spec.rb +3 -3
- data/lib/capybara/spec/session/accept_prompt_spec.rb +9 -10
- data/lib/capybara/spec/session/active_element_spec.rb +31 -0
- data/lib/capybara/spec/session/all_spec.rb +135 -44
- data/lib/capybara/spec/session/ancestor_spec.rb +24 -19
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +67 -38
- data/lib/capybara/spec/session/{assert_current_path.rb → assert_current_path_spec.rb} +20 -18
- data/lib/capybara/spec/session/assert_selector_spec.rb +143 -0
- data/lib/capybara/spec/session/assert_style_spec.rb +26 -0
- data/lib/capybara/spec/session/{assert_text.rb → assert_text_spec.rb} +76 -52
- data/lib/capybara/spec/session/{assert_title.rb → assert_title_spec.rb} +12 -12
- data/lib/capybara/spec/session/attach_file_spec.rb +126 -72
- data/lib/capybara/spec/session/body_spec.rb +11 -13
- data/lib/capybara/spec/session/check_spec.rb +112 -51
- data/lib/capybara/spec/session/choose_spec.rb +62 -30
- data/lib/capybara/spec/session/click_button_spec.rb +227 -161
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +49 -30
- data/lib/capybara/spec/session/click_link_spec.rb +89 -55
- data/lib/capybara/spec/session/current_scope_spec.rb +8 -8
- data/lib/capybara/spec/session/current_url_spec.rb +44 -37
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +3 -3
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +2 -2
- data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb} +11 -9
- data/lib/capybara/spec/session/element/match_css_spec.rb +18 -10
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +8 -6
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +70 -56
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +7 -7
- data/lib/capybara/spec/session/evaluate_script_spec.rb +28 -8
- data/lib/capybara/spec/session/execute_script_spec.rb +8 -7
- data/lib/capybara/spec/session/fill_in_spec.rb +110 -44
- data/lib/capybara/spec/session/find_button_spec.rb +23 -23
- data/lib/capybara/spec/session/find_by_id_spec.rb +8 -8
- data/lib/capybara/spec/session/find_field_spec.rb +33 -31
- data/lib/capybara/spec/session/find_link_spec.rb +42 -14
- data/lib/capybara/spec/session/find_spec.rb +251 -142
- data/lib/capybara/spec/session/first_spec.rb +45 -44
- data/lib/capybara/spec/session/frame/frame_title_spec.rb +6 -6
- data/lib/capybara/spec/session/frame/frame_url_spec.rb +6 -6
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +32 -20
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +46 -19
- data/lib/capybara/spec/session/go_back_spec.rb +1 -1
- data/lib/capybara/spec/session/go_forward_spec.rb +1 -1
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +23 -23
- data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
- data/lib/capybara/spec/session/has_any_selectors_spec.rb +29 -0
- data/lib/capybara/spec/session/has_button_spec.rb +98 -12
- data/lib/capybara/spec/session/has_css_spec.rb +271 -137
- data/lib/capybara/spec/session/has_current_path_spec.rb +50 -35
- data/lib/capybara/spec/session/has_element_spec.rb +47 -0
- data/lib/capybara/spec/session/has_field_spec.rb +137 -58
- data/lib/capybara/spec/session/has_link_spec.rb +46 -6
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +33 -31
- data/lib/capybara/spec/session/has_select_spec.rb +84 -50
- data/lib/capybara/spec/session/has_selector_spec.rb +117 -69
- data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
- data/lib/capybara/spec/session/has_table_spec.rb +181 -4
- data/lib/capybara/spec/session/has_text_spec.rb +101 -53
- data/lib/capybara/spec/session/has_title_spec.rb +19 -14
- data/lib/capybara/spec/session/has_xpath_spec.rb +56 -38
- data/lib/capybara/spec/session/{headers.rb → headers_spec.rb} +1 -1
- data/lib/capybara/spec/session/html_spec.rb +13 -6
- data/lib/capybara/spec/session/matches_style_spec.rb +37 -0
- data/lib/capybara/spec/session/node_spec.rb +958 -122
- data/lib/capybara/spec/session/node_wrapper_spec.rb +15 -12
- data/lib/capybara/spec/session/refresh_spec.rb +9 -7
- data/lib/capybara/spec/session/reset_session_spec.rb +65 -37
- data/lib/capybara/spec/session/{response_code.rb → response_code_spec.rb} +1 -1
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +2 -2
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +5 -4
- data/lib/capybara/spec/session/save_page_spec.rb +41 -38
- data/lib/capybara/spec/session/save_screenshot_spec.rb +13 -11
- data/lib/capybara/spec/session/screenshot_spec.rb +2 -2
- data/lib/capybara/spec/session/scroll_spec.rb +119 -0
- data/lib/capybara/spec/session/select_spec.rb +102 -76
- data/lib/capybara/spec/session/selectors_spec.rb +51 -18
- data/lib/capybara/spec/session/sibling_spec.rb +9 -9
- data/lib/capybara/spec/session/text_spec.rb +26 -24
- data/lib/capybara/spec/session/title_spec.rb +8 -6
- data/lib/capybara/spec/session/uncheck_spec.rb +41 -22
- data/lib/capybara/spec/session/unselect_spec.rb +37 -37
- data/lib/capybara/spec/session/visit_spec.rb +79 -53
- data/lib/capybara/spec/session/window/become_closed_spec.rb +22 -19
- data/lib/capybara/spec/session/window/current_window_spec.rb +4 -3
- data/lib/capybara/spec/session/window/open_new_window_spec.rb +4 -3
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +25 -21
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +10 -5
- data/lib/capybara/spec/session/window/window_spec.rb +88 -54
- data/lib/capybara/spec/session/window/windows_spec.rb +11 -8
- data/lib/capybara/spec/session/window/within_window_spec.rb +17 -16
- data/lib/capybara/spec/session/within_spec.rb +82 -44
- data/lib/capybara/spec/spec_helper.rb +46 -52
- data/lib/capybara/spec/test_app.rb +148 -41
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/form.erb +156 -42
- data/lib/capybara/spec/views/frame_child.erb +4 -3
- data/lib/capybara/spec/views/frame_one.erb +2 -1
- data/lib/capybara/spec/views/frame_parent.erb +1 -1
- data/lib/capybara/spec/views/frame_two.erb +1 -1
- data/lib/capybara/spec/views/initial_alert.erb +2 -1
- data/lib/capybara/spec/views/layout.erb +10 -0
- data/lib/capybara/spec/views/obscured.erb +47 -0
- data/lib/capybara/spec/views/offset.erb +33 -0
- data/lib/capybara/spec/views/path.erb +2 -2
- data/lib/capybara/spec/views/popup_one.erb +1 -1
- data/lib/capybara/spec/views/popup_two.erb +1 -1
- data/lib/capybara/spec/views/react.erb +45 -0
- data/lib/capybara/spec/views/scroll.erb +21 -0
- data/lib/capybara/spec/views/spatial.erb +31 -0
- data/lib/capybara/spec/views/tables.erb +68 -1
- data/lib/capybara/spec/views/with_animation.erb +81 -0
- data/lib/capybara/spec/views/with_base_tag.erb +2 -2
- data/lib/capybara/spec/views/with_dragula.erb +24 -0
- data/lib/capybara/spec/views/with_fixed_header_footer.erb +2 -1
- data/lib/capybara/spec/views/with_hover.erb +3 -2
- data/lib/capybara/spec/views/with_hover1.erb +10 -0
- data/lib/capybara/spec/views/with_html.erb +46 -11
- data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
- data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
- data/lib/capybara/spec/views/with_js.erb +30 -5
- data/lib/capybara/spec/views/with_jstree.erb +26 -0
- data/lib/capybara/spec/views/with_namespace.erb +21 -0
- data/lib/capybara/spec/views/with_scope.erb +2 -2
- data/lib/capybara/spec/views/with_scope_other.erb +6 -0
- data/lib/capybara/spec/views/with_shadow.erb +31 -0
- data/lib/capybara/spec/views/with_slow_unload.erb +2 -1
- data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
- data/lib/capybara/spec/views/with_unload_alert.erb +1 -0
- data/lib/capybara/spec/views/with_windows.erb +1 -1
- data/lib/capybara/spec/views/within_frames.erb +1 -1
- data/lib/capybara/version.rb +1 -1
- data/lib/capybara/window.rb +32 -26
- data/lib/capybara.rb +128 -104
- data/spec/basic_node_spec.rb +59 -34
- data/spec/capybara_spec.rb +65 -51
- data/spec/counter_spec.rb +35 -0
- data/spec/css_builder_spec.rb +101 -0
- data/spec/css_splitter_spec.rb +38 -0
- data/spec/dsl_spec.rb +84 -55
- data/spec/filter_set_spec.rb +24 -7
- data/spec/fixtures/certificate.pem +25 -0
- data/spec/fixtures/key.pem +27 -0
- data/spec/fixtures/selenium_driver_rspec_failure.rb +5 -5
- data/spec/fixtures/selenium_driver_rspec_success.rb +5 -5
- data/spec/minitest_spec.rb +49 -5
- data/spec/minitest_spec_spec.rb +92 -62
- data/spec/per_session_config_spec.rb +6 -6
- data/spec/rack_test_spec.rb +183 -115
- data/spec/regexp_dissassembler_spec.rb +250 -0
- data/spec/result_spec.rb +99 -39
- data/spec/rspec/features_spec.rb +28 -25
- data/spec/rspec/scenarios_spec.rb +10 -6
- data/spec/rspec/shared_spec_matchers.rb +418 -364
- data/spec/rspec/views_spec.rb +4 -3
- data/spec/rspec_matchers_spec.rb +35 -10
- data/spec/rspec_spec.rb +109 -85
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +392 -62
- data/spec/selenium_spec_chrome.rb +183 -41
- data/spec/selenium_spec_chrome_remote.rb +96 -0
- data/spec/selenium_spec_edge.rb +41 -8
- data/spec/selenium_spec_firefox.rb +228 -0
- data/spec/selenium_spec_firefox_remote.rb +94 -0
- data/spec/selenium_spec_ie.rb +129 -11
- data/spec/selenium_spec_safari.rb +162 -0
- data/spec/server_spec.rb +192 -81
- data/spec/session_spec.rb +52 -16
- data/spec/shared_selenium_node.rb +79 -0
- data/spec/shared_selenium_session.rb +460 -123
- data/spec/spec_helper.rb +124 -2
- data/spec/whitespace_normalizer_spec.rb +54 -0
- data/spec/xpath_builder_spec.rb +93 -0
- metadata +344 -45
- data/.yard/templates_custom/default/class/html/selectors.erb +0 -38
- data/.yard/templates_custom/default/class/html/setup.rb +0 -17
- data/.yard/yard_extensions.rb +0 -78
- data/lib/capybara/rspec/compound.rb +0 -90
- data/lib/capybara/spec/session/assert_selector.rb +0 -149
- data/lib/capybara/spec/session/source_spec.rb +0 -0
- data/lib/capybara/spec/views/with_title.erb +0 -5
- data/spec/selenium_spec_marionette.rb +0 -143
@@ -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 be(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,10 +24,11 @@ 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
|
29
|
-
expect(titles).to match_array(['With Windows', 'Title of the first popup', 'Title of popup two'])
|
32
|
+
expect(titles).to match_array(['With Windows', 'Title of the first popup', 'Title of popup two']) # rubocop:disable RSpec/MatchArray
|
30
33
|
end
|
31
34
|
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,67 @@ 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
|
52
|
+
|
53
|
+
it 'should pass scope element to the block' do
|
54
|
+
@session.within(:css, '#another_foo') do |scope|
|
55
|
+
expect(scope).to match_css('#another_foo')
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should scope click', requires: [:js] do
|
60
|
+
@session.within(:css, '#another_foo') do |scope|
|
61
|
+
@session.click
|
62
|
+
expect(scope).to have_text('I was clicked')
|
63
|
+
end
|
64
|
+
end
|
29
65
|
end
|
30
66
|
|
31
|
-
context
|
32
|
-
it
|
67
|
+
context 'with XPath selector' do
|
68
|
+
it 'should click links in the given scope' do
|
33
69
|
@session.within(:xpath, "//div[@id='for_bar']//li[contains(.,'With Simple HTML')]") do
|
34
70
|
@session.click_link('Go')
|
35
71
|
end
|
@@ -37,8 +73,8 @@ Capybara::SpecHelper.spec '#within' do
|
|
37
73
|
end
|
38
74
|
end
|
39
75
|
|
40
|
-
context
|
41
|
-
it
|
76
|
+
context 'with the default selector' do
|
77
|
+
it 'should use XPath' do
|
42
78
|
@session.within("//div[@id='for_bar']//li[contains(.,'With Simple HTML')]") do
|
43
79
|
@session.click_link('Go')
|
44
80
|
end
|
@@ -46,9 +82,9 @@ Capybara::SpecHelper.spec '#within' do
|
|
46
82
|
end
|
47
83
|
end
|
48
84
|
|
49
|
-
context
|
50
|
-
it
|
51
|
-
node_of_interest = @session.find(:css,
|
85
|
+
context 'with Node rather than selector' do
|
86
|
+
it 'should click links in the given scope' do
|
87
|
+
node_of_interest = @session.find(:css, '#for_bar li', text: 'With Simple HTML')
|
52
88
|
|
53
89
|
@session.within(node_of_interest) do
|
54
90
|
@session.click_link('Go')
|
@@ -57,19 +93,21 @@ Capybara::SpecHelper.spec '#within' do
|
|
57
93
|
end
|
58
94
|
end
|
59
95
|
|
60
|
-
context
|
96
|
+
context 'with the default selector set to CSS' do
|
61
97
|
before { Capybara.default_selector = :css }
|
62
|
-
|
63
|
-
|
98
|
+
|
99
|
+
after { Capybara.default_selector = :xpath }
|
100
|
+
|
101
|
+
it 'should use CSS' do
|
102
|
+
@session.within('#for_bar li', text: 'With Simple HTML') do
|
64
103
|
@session.click_link('Go')
|
65
104
|
end
|
66
105
|
expect(@session).to have_content('Bar')
|
67
106
|
end
|
68
|
-
after { Capybara.default_selector = :xpath }
|
69
107
|
end
|
70
108
|
|
71
|
-
context
|
72
|
-
it
|
109
|
+
context 'with nested scopes' do
|
110
|
+
it 'should respect the inner scope' do
|
73
111
|
@session.within("//div[@id='for_bar']") do
|
74
112
|
@session.within(".//li[contains(.,'Bar')]") do
|
75
113
|
@session.click_link('Go')
|
@@ -78,7 +116,7 @@ Capybara::SpecHelper.spec '#within' do
|
|
78
116
|
expect(@session).to have_content('Another World')
|
79
117
|
end
|
80
118
|
|
81
|
-
it
|
119
|
+
it 'should respect the outer scope' do
|
82
120
|
@session.within("//div[@id='another_foo']") do
|
83
121
|
@session.within(".//li[contains(.,'With Simple HTML')]") do
|
84
122
|
@session.click_link('Go')
|
@@ -88,14 +126,14 @@ Capybara::SpecHelper.spec '#within' do
|
|
88
126
|
end
|
89
127
|
end
|
90
128
|
|
91
|
-
it
|
129
|
+
it 'should raise an error if the scope is not found on the page' do
|
92
130
|
expect do
|
93
131
|
@session.within("//div[@id='doesnotexist']") do
|
94
132
|
end
|
95
133
|
end.to raise_error(Capybara::ElementNotFound)
|
96
134
|
end
|
97
135
|
|
98
|
-
it
|
136
|
+
it 'should restore the scope when an error is raised' do
|
99
137
|
expect do
|
100
138
|
@session.within("//div[@id='for_bar']") do
|
101
139
|
expect do
|
@@ -103,12 +141,12 @@ Capybara::SpecHelper.spec '#within' do
|
|
103
141
|
@session.within(".//div[@id='doesnotexist']") do
|
104
142
|
end
|
105
143
|
end.to raise_error(Capybara::ElementNotFound)
|
106
|
-
end.
|
144
|
+
end.not_to change { @session.has_xpath?(".//div[@id='another_foo']") }.from(false)
|
107
145
|
end
|
108
|
-
end.
|
146
|
+
end.not_to change { @session.has_xpath?(".//div[@id='another_foo']") }.from(true)
|
109
147
|
end
|
110
148
|
|
111
|
-
it
|
149
|
+
it 'should fill in a field and click a button' do
|
112
150
|
@session.within("//li[contains(.,'Bar')]") do
|
113
151
|
@session.click_button('Go')
|
114
152
|
end
|
@@ -121,9 +159,9 @@ Capybara::SpecHelper.spec '#within' do
|
|
121
159
|
expect(extract_results(@session)['first_name']).to eq('Dagobert')
|
122
160
|
end
|
123
161
|
|
124
|
-
it
|
162
|
+
it 'should have #within_element as an alias' do
|
125
163
|
expect(Capybara::Session.instance_method(:within)).to eq Capybara::Session.instance_method(:within_element)
|
126
|
-
@session.within_element(:css,
|
164
|
+
@session.within_element(:css, '#for_foo') do
|
127
165
|
expect(@session).not_to have_content('First Name')
|
128
166
|
end
|
129
167
|
end
|
@@ -134,18 +172,18 @@ Capybara::SpecHelper.spec '#within_fieldset' do
|
|
134
172
|
@session.visit('/fieldsets')
|
135
173
|
end
|
136
174
|
|
137
|
-
it
|
138
|
-
@session.within_fieldset(
|
139
|
-
@session.fill_in(
|
140
|
-
@session.click_button(
|
175
|
+
it 'should restrict scope to a fieldset given by id' do
|
176
|
+
@session.within_fieldset('villain_fieldset') do
|
177
|
+
@session.fill_in('Name', with: 'Goldfinger')
|
178
|
+
@session.click_button('Create')
|
141
179
|
end
|
142
180
|
expect(extract_results(@session)['villain_name']).to eq('Goldfinger')
|
143
181
|
end
|
144
182
|
|
145
|
-
it
|
146
|
-
@session.within_fieldset(
|
147
|
-
@session.fill_in(
|
148
|
-
@session.click_button(
|
183
|
+
it 'should restrict scope to a fieldset given by legend' do
|
184
|
+
@session.within_fieldset('Villain') do
|
185
|
+
@session.fill_in('Name', with: 'Goldfinger')
|
186
|
+
@session.click_button('Create')
|
149
187
|
end
|
150
188
|
expect(extract_results(@session)['villain_name']).to eq('Goldfinger')
|
151
189
|
end
|
@@ -156,18 +194,18 @@ Capybara::SpecHelper.spec '#within_table' do
|
|
156
194
|
@session.visit('/tables')
|
157
195
|
end
|
158
196
|
|
159
|
-
it
|
160
|
-
@session.within_table(
|
161
|
-
@session.fill_in(
|
162
|
-
@session.click_button(
|
197
|
+
it 'should restrict scope to a fieldset given by id' do
|
198
|
+
@session.within_table('girl_table') do
|
199
|
+
@session.fill_in('Name', with: 'Christmas')
|
200
|
+
@session.click_button('Create')
|
163
201
|
end
|
164
202
|
expect(extract_results(@session)['girl_name']).to eq('Christmas')
|
165
203
|
end
|
166
204
|
|
167
|
-
it
|
168
|
-
@session.within_table(
|
169
|
-
@session.fill_in(
|
170
|
-
@session.click_button(
|
205
|
+
it 'should restrict scope to a fieldset given by legend' do
|
206
|
+
@session.within_table('Villain') do
|
207
|
+
@session.fill_in('Name', with: 'Quantum')
|
208
|
+
@session.click_button('Create')
|
171
209
|
end
|
172
210
|
expect(extract_results(@session)['villain_name']).to eq('Quantum')
|
173
211
|
end
|