capybara 2.7.0 → 3.35.3
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 +5 -5
- data/.yardopts +1 -0
- data/History.md +1147 -11
- data/License.txt +1 -1
- data/README.md +252 -131
- data/lib/capybara/config.rb +92 -0
- data/lib/capybara/cucumber.rb +3 -3
- data/lib/capybara/driver/base.rb +52 -21
- data/lib/capybara/driver/node.rb +48 -14
- data/lib/capybara/dsl.rb +16 -9
- data/lib/capybara/helpers.rb +72 -81
- data/lib/capybara/minitest/spec.rb +267 -0
- data/lib/capybara/minitest.rb +385 -0
- data/lib/capybara/node/actions.rb +337 -89
- data/lib/capybara/node/base.rb +50 -32
- data/lib/capybara/node/document.rb +19 -3
- data/lib/capybara/node/document_matchers.rb +22 -24
- data/lib/capybara/node/element.rb +388 -125
- data/lib/capybara/node/finders.rb +231 -121
- data/lib/capybara/node/matchers.rb +503 -217
- data/lib/capybara/node/simple.rb +64 -27
- data/lib/capybara/queries/ancestor_query.rb +27 -0
- data/lib/capybara/queries/base_query.rb +87 -11
- data/lib/capybara/queries/current_path_query.rb +24 -24
- data/lib/capybara/queries/match_query.rb +15 -10
- data/lib/capybara/queries/selector_query.rb +675 -81
- data/lib/capybara/queries/sibling_query.rb +26 -0
- data/lib/capybara/queries/style_query.rb +45 -0
- data/lib/capybara/queries/text_query.rb +88 -20
- data/lib/capybara/queries/title_query.rb +9 -11
- data/lib/capybara/rack_test/browser.rb +63 -39
- data/lib/capybara/rack_test/css_handlers.rb +6 -4
- data/lib/capybara/rack_test/driver.rb +26 -16
- data/lib/capybara/rack_test/errors.rb +6 -0
- data/lib/capybara/rack_test/form.rb +73 -58
- data/lib/capybara/rack_test/node.rb +187 -67
- data/lib/capybara/rails.rb +4 -8
- 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 +142 -14
- data/lib/capybara/rspec/features.rb +17 -42
- data/lib/capybara/rspec/matcher_proxies.rb +82 -0
- 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 +143 -244
- data/lib/capybara/rspec.rb +10 -12
- 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 +102 -0
- data/lib/capybara/selector/definition/button.rb +63 -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 +278 -0
- data/lib/capybara/selector/filter.rb +3 -46
- data/lib/capybara/selector/filter_set.rb +124 -0
- data/lib/capybara/selector/filters/base.rb +77 -0
- data/lib/capybara/selector/filters/expression_filter.rb +22 -0
- data/lib/capybara/selector/filters/locator_filter.rb +29 -0
- data/lib/capybara/selector/filters/node_filter.rb +31 -0
- data/lib/capybara/selector/regexp_disassembler.rb +214 -0
- data/lib/capybara/selector/selector.rb +155 -0
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/lib/capybara/selector.rb +232 -369
- 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 +380 -142
- 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 +528 -97
- 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 +63 -0
- data/lib/capybara/server/checker.rb +44 -0
- data/lib/capybara/server/middleware.rb +71 -0
- data/lib/capybara/server.rb +74 -71
- data/lib/capybara/session/config.rb +126 -0
- data/lib/capybara/session/matchers.rb +44 -27
- data/lib/capybara/session.rb +500 -297
- data/lib/capybara/spec/fixtures/no_extension +1 -0
- 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 +168 -14
- data/lib/capybara/spec/session/accept_alert_spec.rb +37 -14
- data/lib/capybara/spec/session/accept_confirm_spec.rb +7 -6
- data/lib/capybara/spec/session/accept_prompt_spec.rb +38 -10
- data/lib/capybara/spec/session/all_spec.rb +179 -59
- data/lib/capybara/spec/session/ancestor_spec.rb +88 -0
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +140 -0
- 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_spec.rb +93 -0
- data/lib/capybara/spec/session/attach_file_spec.rb +154 -48
- data/lib/capybara/spec/session/body_spec.rb +12 -13
- data/lib/capybara/spec/session/check_spec.rb +168 -41
- data/lib/capybara/spec/session/choose_spec.rb +75 -23
- data/lib/capybara/spec/session/click_button_spec.rb +243 -175
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +57 -32
- data/lib/capybara/spec/session/click_link_spec.rb +100 -53
- data/lib/capybara/spec/session/current_scope_spec.rb +11 -10
- data/lib/capybara/spec/session/current_url_spec.rb +61 -35
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +7 -7
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +5 -4
- data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb} +13 -6
- data/lib/capybara/spec/session/element/match_css_spec.rb +21 -7
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +9 -7
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +91 -34
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +23 -0
- data/lib/capybara/spec/session/evaluate_script_spec.rb +45 -3
- data/lib/capybara/spec/session/execute_script_spec.rb +24 -4
- data/lib/capybara/spec/session/fill_in_spec.rb +166 -64
- data/lib/capybara/spec/session/find_button_spec.rb +37 -18
- data/lib/capybara/spec/session/find_by_id_spec.rb +10 -9
- data/lib/capybara/spec/session/find_field_spec.rb +57 -34
- data/lib/capybara/spec/session/find_link_spec.rb +47 -10
- data/lib/capybara/spec/session/find_spec.rb +290 -144
- data/lib/capybara/spec/session/first_spec.rb +91 -48
- 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 +116 -0
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +112 -0
- data/lib/capybara/spec/session/go_back_spec.rb +3 -2
- data/lib/capybara/spec/session/go_forward_spec.rb +3 -2
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +69 -0
- data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
- data/lib/capybara/spec/session/has_any_selectors_spec.rb +25 -0
- data/lib/capybara/spec/session/has_button_spec.rb +76 -19
- data/lib/capybara/spec/session/has_css_spec.rb +277 -131
- data/lib/capybara/spec/session/has_current_path_spec.rb +98 -26
- data/lib/capybara/spec/session/has_field_spec.rb +177 -107
- data/lib/capybara/spec/session/has_link_spec.rb +13 -12
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +78 -0
- data/lib/capybara/spec/session/has_select_spec.rb +191 -95
- data/lib/capybara/spec/session/has_selector_spec.rb +128 -64
- data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
- data/lib/capybara/spec/session/has_table_spec.rb +172 -5
- data/lib/capybara/spec/session/has_text_spec.rb +126 -60
- data/lib/capybara/spec/session/has_title_spec.rb +35 -12
- data/lib/capybara/spec/session/has_xpath_spec.rb +74 -53
- 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 +35 -0
- data/lib/capybara/spec/session/node_spec.rb +1028 -131
- data/lib/capybara/spec/session/node_wrapper_spec.rb +39 -0
- data/lib/capybara/spec/session/refresh_spec.rb +34 -0
- data/lib/capybara/spec/session/reset_session_spec.rb +75 -34
- 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 +11 -15
- 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 +117 -0
- data/lib/capybara/spec/session/select_spec.rb +112 -85
- data/lib/capybara/spec/session/selectors_spec.rb +71 -8
- data/lib/capybara/spec/session/sibling_spec.rb +52 -0
- data/lib/capybara/spec/session/text_spec.rb +38 -23
- data/lib/capybara/spec/session/title_spec.rb +17 -5
- data/lib/capybara/spec/session/uncheck_spec.rb +71 -12
- data/lib/capybara/spec/session/unselect_spec.rb +44 -43
- data/lib/capybara/spec/session/visit_spec.rb +99 -32
- data/lib/capybara/spec/session/window/become_closed_spec.rb +33 -29
- 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 +39 -30
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +17 -10
- data/lib/capybara/spec/session/window/window_spec.rb +121 -73
- data/lib/capybara/spec/session/window/windows_spec.rb +12 -10
- data/lib/capybara/spec/session/window/within_window_spec.rb +52 -82
- data/lib/capybara/spec/session/within_spec.rb +76 -43
- data/lib/capybara/spec/spec_helper.rb +67 -33
- data/lib/capybara/spec/test_app.rb +85 -36
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/buttons.erb +1 -1
- data/lib/capybara/spec/views/fieldsets.erb +1 -1
- data/lib/capybara/spec/views/form.erb +227 -20
- data/lib/capybara/spec/views/frame_child.erb +10 -2
- data/lib/capybara/spec/views/frame_one.erb +2 -1
- data/lib/capybara/spec/views/frame_parent.erb +2 -2
- data/lib/capybara/spec/views/frame_two.erb +1 -1
- data/lib/capybara/spec/views/header_links.erb +1 -1
- data/lib/capybara/spec/views/host_links.erb +1 -1
- data/lib/capybara/spec/views/initial_alert.erb +10 -0
- data/lib/capybara/spec/views/obscured.erb +47 -0
- data/lib/capybara/spec/views/offset.erb +32 -0
- data/lib/capybara/spec/views/path.erb +1 -1
- 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/postback.erb +1 -1
- data/lib/capybara/spec/views/react.erb +45 -0
- data/lib/capybara/spec/views/scroll.erb +20 -0
- data/lib/capybara/spec/views/spatial.erb +31 -0
- data/lib/capybara/spec/views/tables.erb +69 -2
- data/lib/capybara/spec/views/with_animation.erb +82 -0
- data/lib/capybara/spec/views/with_base_tag.erb +1 -1
- data/lib/capybara/spec/views/with_count.erb +1 -1
- data/lib/capybara/spec/views/with_dragula.erb +24 -0
- data/lib/capybara/spec/views/with_fixed_header_footer.erb +17 -0
- data/lib/capybara/spec/views/with_hover.erb +7 -1
- data/lib/capybara/spec/views/with_hover1.erb +10 -0
- data/lib/capybara/spec/views/with_html.erb +100 -10
- data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
- data/lib/capybara/spec/views/with_html_entities.erb +1 -1
- data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
- data/lib/capybara/spec/views/with_js.erb +49 -3
- data/lib/capybara/spec/views/with_jstree.erb +26 -0
- data/lib/capybara/spec/views/with_namespace.erb +20 -0
- data/lib/capybara/spec/views/with_scope.erb +1 -1
- data/lib/capybara/spec/views/with_scope_other.erb +6 -0
- data/lib/capybara/spec/views/with_simple_html.erb +1 -1
- data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
- data/lib/capybara/spec/views/with_title.erb +1 -1
- data/lib/capybara/spec/views/with_unload_alert.erb +3 -1
- data/lib/capybara/spec/views/with_windows.erb +7 -1
- data/lib/capybara/spec/views/within_frames.erb +6 -3
- data/lib/capybara/version.rb +2 -1
- data/lib/capybara/window.rb +39 -21
- data/lib/capybara.rb +208 -186
- data/spec/basic_node_spec.rb +52 -39
- data/spec/capybara_spec.rb +72 -50
- data/spec/css_builder_spec.rb +101 -0
- data/spec/css_splitter_spec.rb +38 -0
- data/spec/dsl_spec.rb +81 -61
- data/spec/filter_set_spec.rb +46 -0
- data/spec/fixtures/capybara.csv +1 -0
- data/spec/fixtures/certificate.pem +25 -0
- data/spec/fixtures/key.pem +27 -0
- data/spec/fixtures/selenium_driver_rspec_failure.rb +7 -3
- data/spec/fixtures/selenium_driver_rspec_success.rb +7 -3
- data/spec/minitest_spec.rb +164 -0
- data/spec/minitest_spec_spec.rb +162 -0
- data/spec/per_session_config_spec.rb +68 -0
- data/spec/rack_test_spec.rb +189 -96
- data/spec/regexp_dissassembler_spec.rb +250 -0
- data/spec/result_spec.rb +143 -13
- data/spec/rspec/features_spec.rb +38 -32
- data/spec/rspec/scenarios_spec.rb +9 -7
- data/spec/rspec/shared_spec_matchers.rb +959 -0
- data/spec/rspec/views_spec.rb +9 -3
- data/spec/rspec_matchers_spec.rb +62 -0
- data/spec/rspec_spec.rb +127 -30
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +458 -37
- data/spec/selenium_spec_chrome.rb +196 -9
- data/spec/selenium_spec_chrome_remote.rb +100 -0
- data/spec/selenium_spec_edge.rb +47 -0
- data/spec/selenium_spec_firefox.rb +210 -0
- data/spec/selenium_spec_firefox_remote.rb +80 -0
- data/spec/selenium_spec_ie.rb +150 -0
- data/spec/selenium_spec_safari.rb +148 -0
- data/spec/server_spec.rb +200 -101
- data/spec/session_spec.rb +91 -0
- data/spec/shared_selenium_node.rb +83 -0
- data/spec/shared_selenium_session.rb +558 -0
- data/spec/spec_helper.rb +94 -2
- data/spec/xpath_builder_spec.rb +93 -0
- metadata +420 -60
- data/lib/capybara/query.rb +0 -7
- data/lib/capybara/spec/session/assert_current_path.rb +0 -60
- data/lib/capybara/spec/session/assert_selector.rb +0 -148
- data/lib/capybara/spec/session/assert_text.rb +0 -196
- data/lib/capybara/spec/session/assert_title.rb +0 -70
- data/lib/capybara/spec/session/source_spec.rb +0 -0
- data/lib/capybara/spec/session/within_frame_spec.rb +0 -53
- data/spec/rspec/matchers_spec.rb +0 -827
- data/spec/selenium_spec.rb +0 -151
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
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
|
+
|
|
2
7
|
Capybara::SpecHelper.spec '#window_opened_by', requires: [:windows] do
|
|
3
|
-
before
|
|
8
|
+
before do
|
|
4
9
|
@window = @session.current_window
|
|
5
10
|
@session.visit('/with_windows')
|
|
11
|
+
@session.assert_selector(:css, 'body.loaded')
|
|
6
12
|
end
|
|
7
|
-
|
|
13
|
+
|
|
14
|
+
after do
|
|
8
15
|
(@session.windows - [@window]).each do |w|
|
|
9
16
|
@session.switch_to_window w
|
|
10
17
|
w.close
|
|
@@ -12,21 +19,21 @@ Capybara::SpecHelper.spec '#window_opened_by', requires: [:windows] do
|
|
|
12
19
|
@session.switch_to_window(@window)
|
|
13
20
|
end
|
|
14
21
|
|
|
15
|
-
let(:zero_windows_message) {
|
|
16
|
-
let(:two_windows_message) {
|
|
22
|
+
let(:zero_windows_message) { 'block passed to #window_opened_by opened 0 windows instead of 1' }
|
|
23
|
+
let(:two_windows_message) { 'block passed to #window_opened_by opened 2 windows instead of 1' }
|
|
17
24
|
|
|
18
25
|
context 'with :wait option' do
|
|
19
26
|
it 'should raise error if value of :wait is less than timeout' do
|
|
20
27
|
# So large value is used as `driver.window_handles` takes up to 800 ms on Travis
|
|
21
28
|
Capybara.using_wait_time 2 do
|
|
22
|
-
button
|
|
29
|
+
button = @session.find(:css, '#openWindowWithLongerTimeout')
|
|
23
30
|
expect do
|
|
24
|
-
@session.window_opened_by(wait: 0.
|
|
31
|
+
@session.window_opened_by(wait: 0.3) do
|
|
25
32
|
button.click
|
|
26
33
|
end
|
|
27
34
|
end.to raise_error(Capybara::WindowError, zero_windows_message)
|
|
28
35
|
end
|
|
29
|
-
@session.document.synchronize(
|
|
36
|
+
@session.document.synchronize(5, errors: [Capybara::CapybaraError]) do
|
|
30
37
|
raise Capybara::CapybaraError if @session.windows.size != 2
|
|
31
38
|
end
|
|
32
39
|
end
|
|
@@ -45,7 +52,7 @@ Capybara::SpecHelper.spec '#window_opened_by', requires: [:windows] do
|
|
|
45
52
|
context 'without :wait option' do
|
|
46
53
|
it 'should raise error if default_max_wait_time is less than timeout' do
|
|
47
54
|
button = @session.find(:css, '#openWindowWithTimeout')
|
|
48
|
-
Capybara.using_wait_time 0.
|
|
55
|
+
Capybara.using_wait_time 0.1 do
|
|
49
56
|
expect do
|
|
50
57
|
@session.window_opened_by do
|
|
51
58
|
button.click
|
|
@@ -59,7 +66,7 @@ Capybara::SpecHelper.spec '#window_opened_by', requires: [:windows] do
|
|
|
59
66
|
|
|
60
67
|
it 'should find window if default_max_wait_time is more than timeout' do
|
|
61
68
|
button = @session.find(:css, '#openWindowWithTimeout')
|
|
62
|
-
Capybara.using_wait_time
|
|
69
|
+
Capybara.using_wait_time 5 do
|
|
63
70
|
window = @session.window_opened_by do
|
|
64
71
|
button.click
|
|
65
72
|
end
|
|
@@ -73,7 +80,7 @@ Capybara::SpecHelper.spec '#window_opened_by', requires: [:windows] do
|
|
|
73
80
|
expect do
|
|
74
81
|
@session.window_opened_by do
|
|
75
82
|
button.click
|
|
76
|
-
sleep
|
|
83
|
+
sleep 1 # It's possible for window_opened_by to be fullfilled before the second window opens
|
|
77
84
|
end
|
|
78
85
|
end.to raise_error(Capybara::WindowError, two_windows_message)
|
|
79
86
|
@session.document.synchronize(2, errors: [Capybara::CapybaraError]) do
|
|
@@ -1,155 +1,203 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
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
|
+
|
|
2
7
|
Capybara::SpecHelper.spec Capybara::Window, requires: [:windows] do
|
|
3
|
-
|
|
4
|
-
|
|
8
|
+
let!(:orig_window) { @session.current_window }
|
|
9
|
+
before do
|
|
5
10
|
@session.visit('/with_windows')
|
|
6
11
|
end
|
|
7
|
-
|
|
8
|
-
|
|
12
|
+
|
|
13
|
+
after do
|
|
14
|
+
(@session.windows - [orig_window]).each do |w|
|
|
9
15
|
@session.switch_to_window w
|
|
10
16
|
w.close
|
|
11
17
|
end
|
|
12
|
-
@session.switch_to_window(
|
|
18
|
+
@session.switch_to_window(orig_window)
|
|
13
19
|
end
|
|
14
20
|
|
|
15
21
|
describe '#exists?' do
|
|
16
|
-
|
|
17
|
-
|
|
22
|
+
it 'should become false after window was closed' do
|
|
23
|
+
other_window = @session.window_opened_by do
|
|
18
24
|
@session.find(:css, '#openWindow').click
|
|
19
25
|
end
|
|
20
|
-
end
|
|
21
26
|
|
|
22
|
-
it "should become false after window was closed" do
|
|
23
27
|
expect do
|
|
24
|
-
@session.switch_to_window
|
|
25
|
-
|
|
26
|
-
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)
|
|
27
31
|
end
|
|
28
32
|
end
|
|
29
33
|
|
|
30
34
|
describe '#closed?' do
|
|
31
|
-
it
|
|
32
|
-
|
|
35
|
+
it 'should become true after window was closed' do
|
|
36
|
+
other_window = @session.window_opened_by do
|
|
33
37
|
@session.find(:css, '#openWindow').click
|
|
34
38
|
end
|
|
35
39
|
expect do
|
|
36
|
-
@session.switch_to_window
|
|
37
|
-
|
|
38
|
-
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)
|
|
39
43
|
end
|
|
40
44
|
end
|
|
41
45
|
|
|
42
46
|
describe '#current?' do
|
|
43
|
-
|
|
44
|
-
@
|
|
47
|
+
let(:other_window) do
|
|
48
|
+
@session.window_opened_by do
|
|
45
49
|
@session.find(:css, '#openWindow').click
|
|
46
50
|
end
|
|
47
51
|
end
|
|
48
52
|
|
|
49
53
|
it 'should become true after switching to window' do
|
|
50
54
|
expect do
|
|
51
|
-
@session.switch_to_window(
|
|
52
|
-
end.to change
|
|
55
|
+
@session.switch_to_window(other_window)
|
|
56
|
+
end.to change(other_window, :current?).from(false).to(true)
|
|
53
57
|
end
|
|
54
58
|
|
|
55
59
|
it 'should return false if window is closed' do
|
|
56
|
-
@session.switch_to_window(
|
|
57
|
-
|
|
58
|
-
expect(
|
|
60
|
+
@session.switch_to_window(other_window)
|
|
61
|
+
other_window.close
|
|
62
|
+
expect(other_window.current?).to eq(false)
|
|
59
63
|
end
|
|
60
64
|
end
|
|
61
65
|
|
|
62
66
|
describe '#close' do
|
|
63
|
-
|
|
64
|
-
@
|
|
67
|
+
let!(:other_window) do
|
|
68
|
+
@session.window_opened_by do
|
|
65
69
|
@session.find(:css, '#openWindow').click
|
|
66
70
|
end
|
|
67
71
|
end
|
|
68
72
|
|
|
69
73
|
it 'should switch to original window if invoked not for current window' do
|
|
70
74
|
expect(@session.windows.size).to eq(2)
|
|
71
|
-
expect(@session.current_window).to eq(
|
|
72
|
-
|
|
75
|
+
expect(@session.current_window).to eq(orig_window)
|
|
76
|
+
other_window.close
|
|
73
77
|
expect(@session.windows.size).to eq(1)
|
|
74
|
-
expect(@session.current_window).to eq(
|
|
78
|
+
expect(@session.current_window).to eq(orig_window)
|
|
75
79
|
end
|
|
76
80
|
|
|
77
81
|
it 'should make subsequent invocations of other methods raise no_such_window_error if invoked for current window' do
|
|
78
|
-
@session.switch_to_window(
|
|
79
|
-
expect(@session.current_window).to eq(
|
|
80
|
-
|
|
82
|
+
@session.switch_to_window(other_window)
|
|
83
|
+
expect(@session.current_window).to eq(other_window)
|
|
84
|
+
other_window.close
|
|
81
85
|
expect do
|
|
82
86
|
@session.find(:css, '#some_id')
|
|
83
87
|
end.to raise_error(@session.driver.no_such_window_error)
|
|
84
|
-
@session.switch_to_window(
|
|
88
|
+
@session.switch_to_window(orig_window)
|
|
85
89
|
end
|
|
86
90
|
end
|
|
87
91
|
|
|
88
92
|
describe '#size' do
|
|
89
|
-
|
|
90
|
-
|
|
93
|
+
def win_size
|
|
94
|
+
@session.evaluate_script('[window.outerWidth || window.innerWidth, window.outerHeight || window.innerHeight]')
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it 'should return size of whole window', requires: %i[windows js] do
|
|
98
|
+
expect(@session.current_window.size).to eq win_size
|
|
91
99
|
end
|
|
92
100
|
|
|
93
101
|
it 'should switch to original window if invoked not for current window' do
|
|
94
|
-
|
|
102
|
+
other_window = @session.window_opened_by do
|
|
95
103
|
@session.find(:css, '#openWindow').click
|
|
96
104
|
end
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
expect(
|
|
102
|
-
expect(@session.current_window).to eq(
|
|
105
|
+
sleep 1
|
|
106
|
+
size = @session.within_window(other_window) do
|
|
107
|
+
win_size
|
|
108
|
+
end
|
|
109
|
+
expect(other_window.size).to eq(size)
|
|
110
|
+
expect(@session.current_window).to eq(orig_window)
|
|
103
111
|
end
|
|
104
112
|
end
|
|
105
113
|
|
|
106
114
|
describe '#resize_to' do
|
|
107
|
-
|
|
115
|
+
let!(:initial_size) { @session.current_window.size }
|
|
108
116
|
|
|
109
|
-
|
|
110
|
-
@session.current_window.resize_to(
|
|
111
|
-
|
|
117
|
+
after do
|
|
118
|
+
@session.current_window.resize_to(*initial_size)
|
|
119
|
+
sleep 1
|
|
112
120
|
end
|
|
113
121
|
|
|
114
|
-
it 'should
|
|
122
|
+
it 'should be able to resize window', requires: %i[windows js] do
|
|
123
|
+
width, height = initial_size
|
|
124
|
+
@session.current_window.resize_to(width - 100, height - 100)
|
|
125
|
+
sleep 1
|
|
126
|
+
expect(@session.current_window.size).to eq([width - 100, height - 100])
|
|
127
|
+
end
|
|
115
128
|
|
|
116
|
-
|
|
129
|
+
it 'should stay on current window if invoked not for current window', requires: %i[windows js] do
|
|
130
|
+
other_window = @session.window_opened_by do
|
|
117
131
|
@session.find(:css, '#openWindow').click
|
|
118
132
|
end
|
|
119
|
-
@other_window.resize_to(400, 300)
|
|
120
|
-
expect(@session.current_window).to eq(@window)
|
|
121
133
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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])
|
|
126
139
|
end
|
|
127
140
|
end
|
|
128
141
|
end
|
|
129
142
|
|
|
130
143
|
describe '#maximize' do
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
sleep 0.5
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
@
|
|
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
|
+
|
|
153
|
+
it 'should be able to maximize window', requires: %i[windows js] do
|
|
154
|
+
start_width, start_height = 400, 300
|
|
155
|
+
@session.current_window.resize_to(start_width, start_height)
|
|
156
|
+
sleep 0.5
|
|
157
|
+
|
|
158
|
+
@session.current_window.maximize
|
|
159
|
+
sleep 0.5 # The timing on maximize is finicky on Travis -- wait a bit for maximize to occur
|
|
160
|
+
|
|
161
|
+
max_width, max_height = @session.current_window.size
|
|
162
|
+
|
|
163
|
+
# maximize behavior is window manage dependant, so just make sure it increases in size
|
|
164
|
+
expect(max_width).to be > start_width
|
|
165
|
+
expect(max_height).to be > start_height
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
it 'should stay on current window if invoked not for current window', requires: %i[windows js] do
|
|
169
|
+
other_window = @session.window_opened_by do
|
|
143
170
|
@session.find(:css, '#openWindow').click
|
|
144
171
|
end
|
|
145
|
-
|
|
172
|
+
other_window.resize_to(400, 300)
|
|
173
|
+
sleep 0.5
|
|
174
|
+
other_window.maximize
|
|
146
175
|
sleep 0.5 # The timing on maximize is finicky on Travis -- wait a bit for maximize to occur
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
#
|
|
150
|
-
@session.
|
|
151
|
-
|
|
152
|
-
|
|
176
|
+
|
|
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)
|
|
180
|
+
|
|
181
|
+
ow_width, ow_height = other_window.size
|
|
182
|
+
expect(ow_width).to be > 400
|
|
183
|
+
expect(ow_height).to be > 300
|
|
184
|
+
end
|
|
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
|
|
153
201
|
end
|
|
154
202
|
end
|
|
155
203
|
end
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
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
|
+
|
|
2
7
|
Capybara::SpecHelper.spec '#windows', requires: [:windows] do
|
|
3
|
-
before
|
|
8
|
+
before do
|
|
4
9
|
@window = @session.current_window
|
|
5
10
|
@session.visit('/with_windows')
|
|
6
11
|
@session.find(:css, '#openTwoWindows').click
|
|
@@ -9,11 +14,9 @@ Capybara::SpecHelper.spec '#windows', requires: [:windows] do
|
|
|
9
14
|
raise Capybara::CapybaraError if @session.windows.size != 3
|
|
10
15
|
end
|
|
11
16
|
end
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
w.close
|
|
16
|
-
end
|
|
17
|
+
|
|
18
|
+
after do
|
|
19
|
+
(@session.windows - [@window]).each(&:close)
|
|
17
20
|
@session.switch_to_window(@window)
|
|
18
21
|
end
|
|
19
22
|
|
|
@@ -21,12 +24,11 @@ Capybara::SpecHelper.spec '#windows', requires: [:windows] do
|
|
|
21
24
|
expect(@session.windows.map { |window| window.instance_of?(Capybara::Window) }).to eq([true] * 3)
|
|
22
25
|
end
|
|
23
26
|
|
|
24
|
-
it 'should
|
|
27
|
+
it 'should be able to switch to windows' do
|
|
28
|
+
sleep 1 # give windows enough time to fully load
|
|
25
29
|
titles = @session.windows.map do |window|
|
|
26
30
|
@session.within_window(window) { @session.title }
|
|
27
31
|
end
|
|
28
|
-
expect(titles).to match_array([
|
|
29
|
-
'With Windows', 'Title of the first popup', 'Title of popup two'
|
|
30
|
-
])
|
|
32
|
+
expect(titles).to match_array(['With Windows', 'Title of the first popup', 'Title of popup two'])
|
|
31
33
|
end
|
|
32
34
|
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
|
|
3
|
-
before
|
|
4
|
+
before do
|
|
4
5
|
@window = @session.current_window
|
|
5
6
|
@session.visit('/with_windows')
|
|
6
7
|
@session.find(:css, '#openTwoWindows').click
|
|
@@ -9,7 +10,8 @@ Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
|
|
|
9
10
|
raise Capybara::CapybaraError if @session.windows.size != 3
|
|
10
11
|
end
|
|
11
12
|
end
|
|
12
|
-
|
|
13
|
+
|
|
14
|
+
after do
|
|
13
15
|
(@session.windows - [@window]).each do |w|
|
|
14
16
|
@session.switch_to_window w
|
|
15
17
|
w.close
|
|
@@ -17,33 +19,32 @@ Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
|
|
|
17
19
|
@session.switch_to_window(@window)
|
|
18
20
|
end
|
|
19
21
|
|
|
20
|
-
context
|
|
21
|
-
it
|
|
22
|
-
|
|
23
|
-
expect(@session.driver).to receive(:switch_to_window).exactly(3).times.and_call_original
|
|
22
|
+
context 'with an instance of Capybara::Window' do
|
|
23
|
+
it 'should not invoke driver#switch_to_window when given current window' do
|
|
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')
|
|
26
27
|
end
|
|
28
|
+
expect(@session.driver).not_to have_received(:switch_to_window)
|
|
27
29
|
end
|
|
28
30
|
|
|
29
|
-
it
|
|
31
|
+
it 'should be able to switch to another window' do
|
|
30
32
|
window = (@session.windows - [@window]).first
|
|
31
|
-
expect(@session.driver).to receive(:switch_to_window).exactly(5).times.and_call_original
|
|
32
33
|
@session.within_window window do
|
|
33
|
-
expect(
|
|
34
|
+
expect(@session).to have_title(/Title of the first popup|Title of popup two/)
|
|
34
35
|
end
|
|
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
|
-
|
|
42
|
+
43252003274489856000
|
|
43
|
+
end
|
|
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,10 +58,10 @@ 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
|
-
@session.
|
|
64
|
+
@session.within_frame 'frameOne' do
|
|
64
65
|
@session.within_window(window) {}
|
|
65
66
|
end
|
|
66
67
|
end.to raise_error(Capybara::ScopeError)
|
|
@@ -85,103 +86,72 @@ Capybara::SpecHelper.spec '#within_window', requires: [:windows] do
|
|
|
85
86
|
end
|
|
86
87
|
end
|
|
87
88
|
|
|
88
|
-
context
|
|
89
|
-
it
|
|
90
|
-
@session.within_window(->{ @session.title == 'Title of the first popup'}) do
|
|
89
|
+
context 'with lambda' do
|
|
90
|
+
it 'should find the div in another window' do
|
|
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
|
-
@session.within_window(->{ @session.title == 'Title of popup two'}) do
|
|
96
|
+
it 'should find divs in both windows' do
|
|
97
|
+
@session.within_window(-> { @session.title == 'Title of popup two' }) do
|
|
97
98
|
expect(@session).to have_css('#divInPopupTwo')
|
|
98
99
|
end
|
|
99
|
-
@session.within_window(->{ @session.title == 'Title of the first popup'}) do
|
|
100
|
+
@session.within_window(-> { @session.title == 'Title of the first popup' }) do
|
|
100
101
|
expect(@session).to have_css('#divInPopupOne')
|
|
101
102
|
end
|
|
102
103
|
expect(@session.title).to eq('With Windows')
|
|
103
104
|
end
|
|
104
105
|
|
|
105
|
-
it
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
it 'should be able to nest within_window' do
|
|
107
|
+
@session.within_window(-> { @session.title == 'Title of popup two' }) do
|
|
108
|
+
expect(@session).to have_css('#divInPopupTwo')
|
|
109
|
+
@session.within_window(-> { @session.title == 'Title of the first popup' }) do
|
|
108
110
|
expect(@session).to have_css('#divInPopupOne')
|
|
109
111
|
end
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
expect(@session
|
|
112
|
+
expect(@session).to have_css('#divInPopupTwo')
|
|
113
|
+
expect(@session).not_to have_css('divInPopupOne')
|
|
114
|
+
end
|
|
115
|
+
expect(@session).not_to have_css('#divInPopupTwo')
|
|
116
|
+
expect(@session).not_to have_css('divInPopupOne')
|
|
117
|
+
expect(@session.title).to eq('With Windows')
|
|
114
118
|
end
|
|
115
119
|
|
|
116
|
-
it
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
120
|
+
it 'should work inside a normal scope' do
|
|
121
|
+
expect(@session).to have_css('#openWindow')
|
|
122
|
+
@session.within(:css, '#scope') do
|
|
123
|
+
@session.within_window(-> { @session.title == 'Title of the first popup' }) do
|
|
124
|
+
expect(@session).to have_css('#divInPopupOne')
|
|
125
|
+
end
|
|
126
|
+
expect(@session).to have_content('My scoped content')
|
|
127
|
+
expect(@session).not_to have_css('#openWindow')
|
|
128
|
+
end
|
|
121
129
|
end
|
|
122
130
|
|
|
123
|
-
it "should
|
|
131
|
+
it "should raise error if window wasn't found" do
|
|
124
132
|
expect do
|
|
125
|
-
@session.within_window(->{ @session.title == '
|
|
126
|
-
|
|
133
|
+
@session.within_window(-> { @session.title == 'Invalid title' }) do
|
|
134
|
+
expect(@session).to have_css('#divInPopupOne')
|
|
127
135
|
end
|
|
128
|
-
end.to raise_error(
|
|
136
|
+
end.to raise_error(Capybara::WindowError, 'Could not find a window matching block/lambda')
|
|
129
137
|
expect(@session.current_window).to eq(@window)
|
|
138
|
+
expect(@session).to have_css('#doesNotOpenWindows')
|
|
130
139
|
expect(@session.send(:scopes)).to eq([nil])
|
|
131
140
|
end
|
|
132
|
-
end
|
|
133
141
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
expect(
|
|
137
|
-
@session.within_window('firstPopup') {}
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
it "should find window by handle" do
|
|
141
|
-
window = (@session.windows - [@window]).first
|
|
142
|
-
@session.within_window window.handle do
|
|
143
|
-
expect(['Title of the first popup', 'Title of popup two']).to include(@session.title)
|
|
144
|
-
end
|
|
142
|
+
it 'returns value from the block' do
|
|
143
|
+
value = @session.within_window(-> { @session.title == 'Title of popup two' }) { 42 }
|
|
144
|
+
expect(value).to eq(42)
|
|
145
145
|
end
|
|
146
146
|
|
|
147
|
-
it
|
|
148
|
-
@session.within_window("firstPopup") do
|
|
149
|
-
expect(@session.find("//*[@id='divInPopupOne']").text).to eq 'This is the text of divInPopupOne'
|
|
150
|
-
end
|
|
151
|
-
end
|
|
152
|
-
it "should find the div in secondPopup" do
|
|
153
|
-
@session.within_window("secondPopup") do
|
|
154
|
-
expect(@session.find("//*[@id='divInPopupTwo']").text).to eq 'This is the text of divInPopupTwo'
|
|
155
|
-
end
|
|
156
|
-
end
|
|
157
|
-
it "should find the divs in both popups" do
|
|
158
|
-
@session.within_window("secondPopup") do
|
|
159
|
-
expect(@session.find("//*[@id='divInPopupTwo']").text).to eq 'This is the text of divInPopupTwo'
|
|
160
|
-
end
|
|
161
|
-
@session.within_window("firstPopup") do
|
|
162
|
-
expect(@session.find("//*[@id='divInPopupOne']").text).to eq 'This is the text of divInPopupOne'
|
|
163
|
-
end
|
|
164
|
-
end
|
|
165
|
-
it "should find the div in the main window after finding a div in a popup" do
|
|
166
|
-
@session.within_window("secondPopup") do
|
|
167
|
-
expect(@session.find("//*[@id='divInPopupTwo']").text).to eq 'This is the text of divInPopupTwo'
|
|
168
|
-
end
|
|
169
|
-
expect(@session.find("//*[@id='doesNotOpenWindows']").text).to eq 'Does not open windows'
|
|
170
|
-
end
|
|
171
|
-
it "should reset scope when switching windows" do
|
|
172
|
-
@session.within(:css, '#doesNotOpenWindows') do
|
|
173
|
-
@session.within_window("secondPopup") do
|
|
174
|
-
expect(@session.find("//*[@id='divInPopupTwo']").text).to eq 'This is the text of divInPopupTwo'
|
|
175
|
-
end
|
|
176
|
-
end
|
|
177
|
-
end
|
|
178
|
-
it "should switch back if exception was raised inside block" do
|
|
147
|
+
it 'should switch back if exception was raised inside block' do
|
|
179
148
|
expect do
|
|
180
|
-
@session.within_window('
|
|
149
|
+
@session.within_window(-> { @session.title == 'Title of popup two' }) do
|
|
181
150
|
raise 'some error'
|
|
182
151
|
end
|
|
183
152
|
end.to raise_error(StandardError, 'some error')
|
|
184
153
|
expect(@session.current_window).to eq(@window)
|
|
154
|
+
expect(@session.send(:scopes)).to eq([nil])
|
|
185
155
|
end
|
|
186
156
|
end
|
|
187
157
|
end
|