watir 1.4.1 → 7.3.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 +7 -0
- data/.document +4 -0
- data/.github/ISSUE_TEMPLATE.md +16 -0
- data/.github/workflows/chrome.yml +55 -0
- data/.github/workflows/edge.yml +44 -0
- data/.github/workflows/firefox.yml +55 -0
- data/.github/workflows/ie.yml +30 -0
- data/.github/workflows/safari.yml +38 -0
- data/.github/workflows/unit.yml +60 -0
- data/.gitignore +21 -0
- data/.rubocop.yml +114 -0
- data/.rubocop_todo.yml +17 -0
- data/CHANGES.md +2212 -0
- data/Gemfile +15 -0
- data/LICENSE +24 -0
- data/README.md +113 -0
- data/Rakefile +173 -0
- data/lib/watir/adjacent.rb +128 -0
- data/lib/watir/after_hooks.rb +135 -0
- data/lib/watir/alert.rb +113 -0
- data/lib/watir/aliases.rb +8 -0
- data/lib/watir/attribute_helper.rb +97 -0
- data/lib/watir/browser.rb +323 -0
- data/lib/watir/capabilities.rb +179 -0
- data/lib/watir/cell_container.rb +25 -0
- data/lib/watir/container.rb +33 -0
- data/lib/watir/cookies.rb +130 -0
- data/lib/watir/element_collection.rb +223 -0
- data/lib/watir/elements/button.rb +28 -0
- data/lib/watir/elements/cell.rb +18 -0
- data/lib/watir/elements/checkbox.rb +56 -0
- data/lib/watir/elements/date_field.rb +42 -0
- data/lib/watir/elements/date_time_field.rb +42 -0
- data/lib/watir/elements/dlist.rb +12 -0
- data/lib/watir/elements/element.rb +807 -0
- data/lib/watir/elements/file_field.rb +43 -0
- data/lib/watir/elements/font.rb +26 -0
- data/lib/watir/elements/form.rb +16 -0
- data/lib/watir/elements/hidden.rb +26 -0
- data/lib/watir/elements/html_elements.rb +1981 -0
- data/lib/watir/elements/iframe.rb +156 -0
- data/lib/watir/elements/image.rb +22 -0
- data/lib/watir/elements/input.rb +15 -0
- data/lib/watir/elements/link.rb +8 -0
- data/lib/watir/elements/list.rb +51 -0
- data/lib/watir/elements/option.rb +60 -0
- data/lib/watir/elements/radio.rb +65 -0
- data/lib/watir/elements/row.rb +18 -0
- data/lib/watir/elements/select.rb +214 -0
- data/lib/watir/elements/svg_elements.rb +497 -0
- data/lib/watir/elements/table.rb +77 -0
- data/lib/watir/elements/table_cell.rb +32 -0
- data/lib/watir/elements/table_row.rb +34 -0
- data/lib/watir/elements/table_section.rb +17 -0
- data/lib/watir/elements/text_area.rb +7 -0
- data/lib/watir/elements/text_field.rb +39 -0
- data/lib/watir/exception.rb +16 -0
- data/lib/watir/extensions/nokogiri.rb +14 -0
- data/lib/watir/generator/base/generator.rb +114 -0
- data/lib/watir/generator/base/idl_sorter.rb +51 -0
- data/lib/watir/generator/base/spec_extractor.rb +158 -0
- data/lib/watir/generator/base/util.rb +21 -0
- data/lib/watir/generator/base/visitor.rb +133 -0
- data/lib/watir/generator/base.rb +12 -0
- data/lib/watir/generator/html/generator.rb +36 -0
- data/lib/watir/generator/html/spec_extractor.rb +52 -0
- data/lib/watir/generator/html/visitor.rb +23 -0
- data/lib/watir/generator/html.rb +17 -0
- data/lib/watir/generator/svg/generator.rb +38 -0
- data/lib/watir/generator/svg/spec_extractor.rb +55 -0
- data/lib/watir/generator/svg/visitor.rb +23 -0
- data/lib/watir/generator/svg.rb +9 -0
- data/lib/watir/generator.rb +5 -0
- data/lib/watir/has_window.rb +72 -0
- data/lib/watir/http_client.rb +11 -0
- data/lib/watir/js_execution.rb +165 -0
- data/lib/watir/js_snippets/attributeValues.js +11 -0
- data/lib/watir/js_snippets/backgroundColor.js +7 -0
- data/lib/watir/js_snippets/elementObscured.js +14 -0
- data/lib/watir/js_snippets/fireEvent.js +31 -0
- data/lib/watir/js_snippets/focus.js +3 -0
- data/lib/watir/js_snippets/getElementTags.js +3 -0
- data/lib/watir/js_snippets/getInnerHtml.js +19 -0
- data/lib/watir/js_snippets/getInnerText.js +19 -0
- data/lib/watir/js_snippets/getOuterHtml.js +20 -0
- data/lib/watir/js_snippets/getTextContent.js +19 -0
- data/lib/watir/js_snippets/isElementInViewport.js +20 -0
- data/lib/watir/js_snippets/isImageLoaded.js +3 -0
- data/lib/watir/js_snippets/selectOptionsLabel.js +10 -0
- data/lib/watir/js_snippets/selectOptionsText.js +10 -0
- data/lib/watir/js_snippets/selectOptionsValue.js +10 -0
- data/lib/watir/js_snippets/selectText.js +64 -0
- data/lib/watir/js_snippets/selectedOptions.js +11 -0
- data/lib/watir/js_snippets/selectedText.js +17 -0
- data/lib/watir/js_snippets/setText.js +3 -0
- data/lib/watir/js_snippets/setValue.js +3 -0
- data/lib/watir/js_snippets.rb +18 -0
- data/lib/watir/locators/anchor/selector_builder.rb +43 -0
- data/lib/watir/locators/button/matcher.rb +19 -0
- data/lib/watir/locators/button/selector_builder/xpath.rb +69 -0
- data/lib/watir/locators/button/selector_builder.rb +10 -0
- data/lib/watir/locators/cell/selector_builder/xpath.rb +23 -0
- data/lib/watir/locators/cell/selector_builder.rb +13 -0
- data/lib/watir/locators/element/locator.rb +81 -0
- data/lib/watir/locators/element/matcher.rb +118 -0
- data/lib/watir/locators/element/selector_builder/regexp_disassembler.rb +69 -0
- data/lib/watir/locators/element/selector_builder/xpath.rb +268 -0
- data/lib/watir/locators/element/selector_builder/xpath_support.rb +29 -0
- data/lib/watir/locators/element/selector_builder.rb +164 -0
- data/lib/watir/locators/option/matcher.rb +26 -0
- data/lib/watir/locators/option/selector_builder/xpath.rb +39 -0
- data/lib/watir/locators/option/selector_builder.rb +10 -0
- data/lib/watir/locators/row/selector_builder/xpath.rb +53 -0
- data/lib/watir/locators/row/selector_builder.rb +18 -0
- data/lib/watir/locators/text_area/selector_builder/xpath.rb +21 -0
- data/lib/watir/locators/text_area/selector_builder.rb +10 -0
- data/lib/watir/locators/text_field/matcher.rb +37 -0
- data/lib/watir/locators/text_field/selector_builder/xpath.rb +50 -0
- data/lib/watir/locators/text_field/selector_builder.rb +10 -0
- data/lib/watir/locators.rb +77 -0
- data/lib/watir/logger.rb +30 -0
- data/lib/watir/navigation.rb +51 -0
- data/lib/watir/radio_set.rb +230 -0
- data/lib/watir/row_container.rb +36 -0
- data/lib/watir/screenshot.rb +51 -0
- data/lib/watir/scroll.rb +95 -0
- data/lib/watir/search_context.rb +96 -0
- data/lib/watir/shadow_root.rb +60 -0
- data/lib/watir/user_editable.rb +85 -0
- data/lib/watir/version.rb +5 -0
- data/lib/watir/wait/timer.rb +52 -0
- data/lib/watir/wait.rb +171 -0
- data/lib/watir/window.rb +276 -0
- data/lib/watir/window_collection.rb +82 -0
- data/lib/watir.rb +108 -0
- data/lib/watirspec/guards.rb +65 -0
- data/lib/watirspec/implementation.rb +56 -0
- data/lib/watirspec/rake_tasks.rb +118 -0
- data/lib/watirspec/remote_server.rb +39 -0
- data/lib/watirspec/runner.rb +64 -0
- data/lib/watirspec/server/app.rb +86 -0
- data/lib/watirspec/server.rb +104 -0
- data/lib/watirspec.rb +93 -0
- data/spec/locator_spec_helper.rb +88 -0
- data/spec/spec_helper.rb +24 -0
- data/spec/unit/capabilities_spec.rb +670 -0
- data/spec/unit/element_locator_spec.rb +97 -0
- data/spec/unit/match_elements/button_spec.rb +76 -0
- data/spec/unit/match_elements/element_spec.rb +424 -0
- data/spec/unit/match_elements/text_field_spec.rb +84 -0
- data/spec/unit/selector_builder/anchor_spec.rb +59 -0
- data/spec/unit/selector_builder/button_spec.rb +217 -0
- data/spec/unit/selector_builder/cell_spec.rb +71 -0
- data/spec/unit/selector_builder/element_spec.rb +804 -0
- data/spec/unit/selector_builder/row_spec.rb +128 -0
- data/spec/unit/selector_builder/text_field_spec.rb +203 -0
- data/spec/unit/selector_builder/textarea_spec.rb +35 -0
- data/spec/unit/unit_helper.rb +4 -0
- data/spec/unit/wait_spec.rb +99 -0
- data/spec/watirspec/adjacent_spec.rb +256 -0
- data/spec/watirspec/after_hooks_spec.rb +204 -0
- data/spec/watirspec/alert_spec.rb +89 -0
- data/spec/watirspec/browser_spec.rb +536 -0
- data/spec/watirspec/capabilities_spec.rb +556 -0
- data/spec/watirspec/cookies_spec.rb +196 -0
- data/spec/watirspec/drag_and_drop_spec.rb +38 -0
- data/spec/watirspec/element_hidden_spec.rb +86 -0
- data/spec/watirspec/elements/area_spec.rb +69 -0
- data/spec/watirspec/elements/areas_spec.rb +44 -0
- data/spec/watirspec/elements/button_spec.rb +265 -0
- data/spec/watirspec/elements/buttons_spec.rb +57 -0
- data/spec/watirspec/elements/checkbox_spec.rb +290 -0
- data/spec/watirspec/elements/checkboxes_spec.rb +46 -0
- data/spec/watirspec/elements/collections_spec.rb +132 -0
- data/spec/watirspec/elements/date_field_spec.rb +209 -0
- data/spec/watirspec/elements/date_fields_spec.rb +46 -0
- data/spec/watirspec/elements/date_time_field_spec.rb +223 -0
- data/spec/watirspec/elements/date_time_fields_spec.rb +47 -0
- data/spec/watirspec/elements/dd_spec.rb +108 -0
- data/spec/watirspec/elements/dds_spec.rb +44 -0
- data/spec/watirspec/elements/del_spec.rb +113 -0
- data/spec/watirspec/elements/dels_spec.rb +42 -0
- data/spec/watirspec/elements/div_spec.rb +232 -0
- data/spec/watirspec/elements/divs_spec.rb +56 -0
- data/spec/watirspec/elements/dl_spec.rb +117 -0
- data/spec/watirspec/elements/dls_spec.rb +45 -0
- data/spec/watirspec/elements/dt_spec.rb +107 -0
- data/spec/watirspec/elements/dts_spec.rb +44 -0
- data/spec/watirspec/elements/element_spec.rb +1069 -0
- data/spec/watirspec/elements/elements_spec.rb +60 -0
- data/spec/watirspec/elements/em_spec.rb +85 -0
- data/spec/watirspec/elements/ems_spec.rb +45 -0
- data/spec/watirspec/elements/filefield_spec.rb +135 -0
- data/spec/watirspec/elements/filefields_spec.rb +45 -0
- data/spec/watirspec/elements/font_spec.rb +31 -0
- data/spec/watirspec/elements/form_spec.rb +70 -0
- data/spec/watirspec/elements/forms_spec.rb +46 -0
- data/spec/watirspec/elements/frame_spec.rb +117 -0
- data/spec/watirspec/elements/frames_spec.rb +43 -0
- data/spec/watirspec/elements/hidden_spec.rb +106 -0
- data/spec/watirspec/elements/hiddens_spec.rb +45 -0
- data/spec/watirspec/elements/hn_spec.rb +80 -0
- data/spec/watirspec/elements/hns_spec.rb +42 -0
- data/spec/watirspec/elements/iframe_spec.rb +244 -0
- data/spec/watirspec/elements/iframes_spec.rb +49 -0
- data/spec/watirspec/elements/image_spec.rb +160 -0
- data/spec/watirspec/elements/images_spec.rb +42 -0
- data/spec/watirspec/elements/input_spec.rb +17 -0
- data/spec/watirspec/elements/ins_spec.rb +113 -0
- data/spec/watirspec/elements/inses_spec.rb +42 -0
- data/spec/watirspec/elements/label_spec.rb +77 -0
- data/spec/watirspec/elements/labels_spec.rb +42 -0
- data/spec/watirspec/elements/li_spec.rb +99 -0
- data/spec/watirspec/elements/link_spec.rb +180 -0
- data/spec/watirspec/elements/links_spec.rb +66 -0
- data/spec/watirspec/elements/lis_spec.rb +44 -0
- data/spec/watirspec/elements/list_spec.rb +50 -0
- data/spec/watirspec/elements/map_spec.rb +78 -0
- data/spec/watirspec/elements/maps_spec.rb +43 -0
- data/spec/watirspec/elements/meta_spec.rb +27 -0
- data/spec/watirspec/elements/metas_spec.rb +42 -0
- data/spec/watirspec/elements/ol_spec.rb +63 -0
- data/spec/watirspec/elements/ols_spec.rb +42 -0
- data/spec/watirspec/elements/option_spec.rb +113 -0
- data/spec/watirspec/elements/p_spec.rb +102 -0
- data/spec/watirspec/elements/pre_spec.rb +100 -0
- data/spec/watirspec/elements/pres_spec.rb +42 -0
- data/spec/watirspec/elements/ps_spec.rb +42 -0
- data/spec/watirspec/elements/radio_spec.rb +259 -0
- data/spec/watirspec/elements/radios_spec.rb +45 -0
- data/spec/watirspec/elements/select_list_spec.rb +701 -0
- data/spec/watirspec/elements/select_lists_spec.rb +49 -0
- data/spec/watirspec/elements/span_spec.rb +119 -0
- data/spec/watirspec/elements/spans_spec.rb +42 -0
- data/spec/watirspec/elements/strong_spec.rb +78 -0
- data/spec/watirspec/elements/strongs_spec.rb +45 -0
- data/spec/watirspec/elements/table_spec.rb +210 -0
- data/spec/watirspec/elements/tables_spec.rb +44 -0
- data/spec/watirspec/elements/tbody_spec.rb +94 -0
- data/spec/watirspec/elements/tbodys_spec.rb +64 -0
- data/spec/watirspec/elements/td_spec.rb +92 -0
- data/spec/watirspec/elements/tds_spec.rb +55 -0
- data/spec/watirspec/elements/text_field_spec.rb +223 -0
- data/spec/watirspec/elements/text_fields_spec.rb +47 -0
- data/spec/watirspec/elements/textarea_spec.rb +30 -0
- data/spec/watirspec/elements/textareas_spec.rb +28 -0
- data/spec/watirspec/elements/tfoot_spec.rb +89 -0
- data/spec/watirspec/elements/tfoots_spec.rb +72 -0
- data/spec/watirspec/elements/thead_spec.rb +88 -0
- data/spec/watirspec/elements/theads_spec.rb +72 -0
- data/spec/watirspec/elements/tr_spec.rb +69 -0
- data/spec/watirspec/elements/trs_spec.rb +63 -0
- data/spec/watirspec/elements/ul_spec.rb +63 -0
- data/spec/watirspec/elements/uls_spec.rb +42 -0
- data/spec/watirspec/html/alerts.html +12 -0
- data/spec/watirspec/html/aria_attributes.html +9 -0
- data/spec/watirspec/html/child_frame.html +29 -0
- data/spec/watirspec/html/class_locator.html +11 -0
- data/spec/watirspec/html/clicks.html +19 -0
- data/spec/watirspec/html/closeable.html +21 -0
- data/spec/watirspec/html/collections.html +15 -0
- data/spec/watirspec/html/css/jquery-ui-1.8.17.custom.css +287 -0
- data/spec/watirspec/html/data_attributes.html +10 -0
- data/spec/watirspec/html/definition_lists.html +48 -0
- data/spec/watirspec/html/drag_and_drop.html +106 -0
- data/spec/watirspec/html/font.html +10 -0
- data/spec/watirspec/html/forms_with_input_elements.html +194 -0
- data/spec/watirspec/html/frame_1.html +22 -0
- data/spec/watirspec/html/frame_2.html +16 -0
- data/spec/watirspec/html/frames.html +11 -0
- data/spec/watirspec/html/iframe_1.html +22 -0
- data/spec/watirspec/html/iframes.html +15 -0
- data/spec/watirspec/html/images/button.png +0 -0
- data/spec/watirspec/html/images/circle.png +0 -0
- data/spec/watirspec/html/images/map.gif +0 -0
- data/spec/watirspec/html/images/map2.gif +0 -0
- data/spec/watirspec/html/images/originaltriangle.png +0 -0
- data/spec/watirspec/html/images/square.png +0 -0
- data/spec/watirspec/html/images/triangle.png +0 -0
- data/spec/watirspec/html/images.html +28 -0
- data/spec/watirspec/html/inner_outer.html +5 -0
- data/spec/watirspec/html/javascript/angular.min.js +332 -0
- data/spec/watirspec/html/javascript/helpers.js +16 -0
- data/spec/watirspec/html/javascript/jquery-1.7.1.min.js +4 -0
- data/spec/watirspec/html/javascript/jquery-ui-1.8.17.custom.min.js +68 -0
- data/spec/watirspec/html/keylogger.html +15 -0
- data/spec/watirspec/html/modal_dialog.html +9 -0
- data/spec/watirspec/html/multiple_ids.html +15 -0
- data/spec/watirspec/html/nested_elements.html +44 -0
- data/spec/watirspec/html/nested_frame_1.html +1 -0
- data/spec/watirspec/html/nested_frame_2.html +9 -0
- data/spec/watirspec/html/nested_frame_3.html +14 -0
- data/spec/watirspec/html/nested_frames.html +10 -0
- data/spec/watirspec/html/nested_iframe_2.html +12 -0
- data/spec/watirspec/html/nested_iframes.html +13 -0
- data/spec/watirspec/html/nested_tables.html +203 -0
- data/spec/watirspec/html/non_control_elements.html +145 -0
- data/spec/watirspec/html/obscured.html +36 -0
- data/spec/watirspec/html/removed_element.html +24 -0
- data/spec/watirspec/html/right_click.html +23 -0
- data/spec/watirspec/html/scroll.html +15 -0
- data/spec/watirspec/html/scroll_nested.html +17 -0
- data/spec/watirspec/html/scroll_nested_offscreen.html +18 -0
- data/spec/watirspec/html/shadow_dom.html +28 -0
- data/spec/watirspec/html/special_chars.html +15 -0
- data/spec/watirspec/html/sticky_elements.html +10 -0
- data/spec/watirspec/html/tables.html +121 -0
- data/spec/watirspec/html/timeout_window_location.html +19 -0
- data/spec/watirspec/html/uneven_table.html +20 -0
- data/spec/watirspec/html/wait.html +99 -0
- data/spec/watirspec/html/watirspec.css +0 -0
- data/spec/watirspec/html/window_switching.html +22 -0
- data/spec/watirspec/radio_set_spec.rb +346 -0
- data/spec/watirspec/screenshot_spec.rb +33 -0
- data/spec/watirspec/scroll_spec.rb +208 -0
- data/spec/watirspec/shadow_root_spec.rb +108 -0
- data/spec/watirspec/support/rspec_matchers.rb +161 -0
- data/spec/watirspec/user_editable_spec.rb +207 -0
- data/spec/watirspec/wait_spec.rb +345 -0
- data/spec/watirspec/window_switching_spec.rb +580 -0
- data/spec/watirspec_helper.rb +163 -0
- data/support/doctest_helper.rb +101 -0
- data/support/version_differ.rb +60 -0
- data/watir.gemspec +50 -0
- metadata +652 -148
- data/readme.rb +0 -211
- data/unittests/WindowLogonExample.rb +0 -30
- data/unittests/WindowLogonExtra.rb +0 -7
- data/unittests/all_tests.rb +0 -10
- data/unittests/all_tests_concurrent.rb +0 -57
- data/unittests/attachToExistingWindow_test.rb +0 -40
- data/unittests/buttons_test.rb +0 -131
- data/unittests/checkbox_test.rb +0 -149
- data/unittests/core_tests.rb +0 -9
- data/unittests/css_test.rb +0 -60
- data/unittests/div_test.rb +0 -179
- data/unittests/errorchecker_test.rb +0 -29
- data/unittests/filefield_test.rb +0 -35
- data/unittests/form_test.rb +0 -279
- data/unittests/frame_test.rb +0 -141
- data/unittests/html/blankpage.html +0 -12
- data/unittests/html/buttons1.html +0 -40
- data/unittests/html/checkboxes1.html +0 -69
- data/unittests/html/complex_table.html +0 -36
- data/unittests/html/cssTest.html +0 -42
- data/unittests/html/div.html +0 -105
- data/unittests/html/fileupload.html +0 -45
- data/unittests/html/formTest1.html +0 -39
- data/unittests/html/forms2.html +0 -45
- data/unittests/html/forms3.html +0 -132
- data/unittests/html/forms4.html +0 -27
- data/unittests/html/frame_buttons.html +0 -4
- data/unittests/html/frame_links.html +0 -4
- data/unittests/html/frame_multi.html +0 -5
- data/unittests/html/iframeTest.html +0 -13
- data/unittests/html/iframeTest1.html +0 -7
- data/unittests/html/iframeTest2.html +0 -6
- data/unittests/html/images/button.jpg +0 -0
- data/unittests/html/images/circle.jpg +0 -0
- data/unittests/html/images/originaltriangle.jpg +0 -0
- data/unittests/html/images/square.jpg +0 -0
- data/unittests/html/images/triangle.jpg +0 -0
- data/unittests/html/images1.html +0 -52
- data/unittests/html/javascriptevents.html +0 -39
- data/unittests/html/link_pass.html +0 -11
- data/unittests/html/links1.html +0 -37
- data/unittests/html/links2.html +0 -11
- data/unittests/html/nestedFrames.html +0 -6
- data/unittests/html/pass.html +0 -10
- data/unittests/html/popups1.html +0 -60
- data/unittests/html/radioButtons1.html +0 -71
- data/unittests/html/select_tealeaf.html +0 -54
- data/unittests/html/selectboxes1.html +0 -55
- data/unittests/html/simple_table.html +0 -26
- data/unittests/html/simple_table_buttons.html +0 -104
- data/unittests/html/simple_table_columns.html +0 -76
- data/unittests/html/table1.html +0 -142
- data/unittests/html/textarea.html +0 -30
- data/unittests/html/textfields1.html +0 -87
- data/unittests/html/textsearch.html +0 -44
- data/unittests/ie_mock.rb +0 -93
- data/unittests/ie_test.rb +0 -50
- data/unittests/images_test.rb +0 -179
- data/unittests/iostring.rb +0 -30
- data/unittests/iostring_test.rb +0 -48
- data/unittests/js_events_test.rb +0 -77
- data/unittests/jscriptExtraAlert.rb +0 -6
- data/unittests/jscriptExtraConfirmCancel.rb +0 -7
- data/unittests/jscriptExtraConfirmOk.rb +0 -7
- data/unittests/jscriptPushButton.rb +0 -5
- data/unittests/jscript_test.rb +0 -57
- data/unittests/links_test.rb +0 -169
- data/unittests/minmax_test.rb +0 -31
- data/unittests/navigate_test.rb +0 -56
- data/unittests/non_core_tests.rb +0 -9
- data/unittests/pagecontainstext_test.rb +0 -49
- data/unittests/popups_test.rb +0 -44
- data/unittests/radios_test.rb +0 -164
- data/unittests/screen_capture_test.rb +0 -53
- data/unittests/selectbox_test.rb +0 -197
- data/unittests/send_keys_test.rb +0 -29
- data/unittests/setup.rb +0 -47
- data/unittests/table_test.rb +0 -306
- data/unittests/textAreafields_test.rb +0 -81
- data/unittests/textfields_test.rb +0 -239
- data/watir/AutoItX3.dll +0 -0
- data/watir/WindowHelper.rb +0 -47
- data/watir/camel_case.rb +0 -37
- data/watir/clickJSDialog.rb +0 -19
- data/watir/cookiemanager.rb +0 -53
- data/watir/exceptions.rb +0 -60
- data/watir/screen_capture.rb +0 -115
- data/watir/setFileDialog.rb +0 -16
- data/watir/testUnitAddons.rb +0 -47
- data/watir/watir_simple.rb +0 -475
- data/watir/winClicker.rb +0 -505
- data/watir.rb +0 -3744
- /data/{unittests → spec/watirspec}/html/images/1.gif +0 -0
- /data/{unittests/html/images/2.GIF → spec/watirspec/html/images/2.gif} +0 -0
- /data/{unittests/html/images/3.GIF → spec/watirspec/html/images/3.gif} +0 -0
- /data/{unittests/html/images/minus.GIF → spec/watirspec/html/images/minus.gif} +0 -0
- /data/{unittests → spec/watirspec}/html/images/plus.gif +0 -0
|
@@ -0,0 +1,580 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe Browser, exclude: {browser: :ie, reason: 'Cannot call #restore!'} do
|
|
7
|
+
before do
|
|
8
|
+
browser.goto WatirSpec.url_for('window_switching.html')
|
|
9
|
+
browser.a(id: 'open').click
|
|
10
|
+
browser.windows.wait_until(size: 2)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
after do
|
|
14
|
+
browser.windows.restore!
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe '#windows' do
|
|
18
|
+
it 'returns a WindowCollection' do
|
|
19
|
+
expect(browser.windows).to be_a(WindowCollection)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'stores Window instances' do
|
|
23
|
+
expect(browser.windows(title: 'closeable window')).to all(be_a(Window))
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'filters windows to match the given selector' do
|
|
27
|
+
expect(browser.windows(title: 'closeable window').size).to eq 1
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'raises ArgumentError if the selector is invalid' do
|
|
31
|
+
expect { browser.windows(name: 'foo') }.to raise_error(ArgumentError)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'returns an empty array if no window matches the selector' do
|
|
35
|
+
expect(browser.windows(title: 'noop')).to be_empty
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe '#window' do
|
|
40
|
+
it 'finds window by :url' do
|
|
41
|
+
expect(browser.window(url: /closeable\.html/).use).to be_a(Window)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'finds window by :title' do
|
|
45
|
+
expect(browser.window(title: 'closeable window').use).to be_a(Window)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'finds window by :element' do
|
|
49
|
+
expect(browser.window(element: browser.a(id: 'close')).use).to be_a(Window)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'finds window by multiple values' do
|
|
53
|
+
expect(browser.window(title: 'closeable window', url: /closeable\.html/).use).to be_a(Window)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'does not find incorrect handle' do
|
|
57
|
+
expect(browser.window(handle: 'bar')).not_to be_present
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it 'returns the current window if no argument is given' do
|
|
61
|
+
expect(browser.window.url).to match(/window_switching\.html/)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'stores the reference to a window when no argument is given' do
|
|
65
|
+
original_window = browser.window
|
|
66
|
+
browser.window(title: 'closeable window').use
|
|
67
|
+
expect(original_window.url).to match(/window_switching\.html/)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it 'executes the given block in the window',
|
|
71
|
+
except: {browser: :safari,
|
|
72
|
+
reason: 'Clicking an Element that Closes a Window is returning NoMatchingWindowFoundException'} do
|
|
73
|
+
browser.window(title: 'closeable window') do
|
|
74
|
+
link = browser.a(id: 'close')
|
|
75
|
+
expect(link).to exist
|
|
76
|
+
link.click
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
expect { browser.windows.wait_until(size: 1) }.not_to raise_error
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it 'raises ArgumentError if the selector is invalid' do
|
|
83
|
+
expect { browser.window(name: 'foo') }.to raise_error(ArgumentError)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it 'raises a NoMatchingWindowFoundException error if no window matches the selector' do
|
|
87
|
+
expect { browser.window(title: 'noop').use }.to raise_no_matching_window_exception
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it 'raises NoMatchingWindowFoundException error when attempting to use a window with an incorrect handle' do
|
|
91
|
+
expect { browser.window(handle: 'bar').use }.to raise_no_matching_window_exception
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
describe '#switch_window' do
|
|
96
|
+
it 'stays on the same window when matches single window' do
|
|
97
|
+
browser.switch_window
|
|
98
|
+
browser.window.close
|
|
99
|
+
browser.original_window.use
|
|
100
|
+
|
|
101
|
+
title = browser.title
|
|
102
|
+
expect { browser.window(title: title).use }.not_to raise_exception
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it 'switches to second window' do
|
|
106
|
+
original_window = browser.window
|
|
107
|
+
browser.switch_window
|
|
108
|
+
new_window = browser.window
|
|
109
|
+
|
|
110
|
+
expect(original_window).not_to eq new_window
|
|
111
|
+
expect(browser.windows).to include(original_window, new_window)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it 'returns an instance of Window' do
|
|
115
|
+
expect(browser.switch_window).to be_a(Window)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
it 'times out if there is no second window' do
|
|
119
|
+
browser.windows.restore!
|
|
120
|
+
message = /waiting for true condition on (.*) title="window switching">$/
|
|
121
|
+
expect { browser.switch_window }.to raise_timeout_exception(message)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
it 'provides previous window value to #original_window' do
|
|
125
|
+
browser.switch_window
|
|
126
|
+
expect(browser.original_window).not_to be_nil
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
it 'waits for second window' do
|
|
130
|
+
browser.windows.restore!
|
|
131
|
+
expect {
|
|
132
|
+
browser.a(id: 'delayed').click
|
|
133
|
+
browser.switch_window
|
|
134
|
+
}.to execute_when_satisfied(min: 1)
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
describe Window, exclude: {browser: :ie, reason: 'Cannot call #restore!'} do
|
|
140
|
+
after do
|
|
141
|
+
browser.windows.restore!
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
context 'when using multiple windows' do
|
|
145
|
+
before do
|
|
146
|
+
browser.goto WatirSpec.url_for('window_switching.html')
|
|
147
|
+
browser.a(id: 'open').click
|
|
148
|
+
browser.windows.wait_until(size: 2)
|
|
149
|
+
browser.wait_until { |b| !b.window(title: 'about:blank').exist? }
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
it 'allows actions on first window after opening second',
|
|
153
|
+
except: {browser: :safari, reason: 'Focus is on newly opened window instead of the first'} do
|
|
154
|
+
browser.a(id: 'open').click
|
|
155
|
+
|
|
156
|
+
expect { browser.windows.wait_until(size: 3) }.not_to raise_timeout_exception
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
describe '#close' do
|
|
160
|
+
it 'closes a window' do
|
|
161
|
+
browser.window(title: 'window switching').use
|
|
162
|
+
browser.a(id: 'open').click
|
|
163
|
+
browser.windows.wait_until(size: 3)
|
|
164
|
+
|
|
165
|
+
described_class.new(browser, title: 'closeable window').close
|
|
166
|
+
|
|
167
|
+
expect { browser.windows.wait_until(size: 2) }.not_to raise_timeout_exception
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
it 'closes the current window',
|
|
171
|
+
except: {browser: :safari},
|
|
172
|
+
reason: 'Focus is on newly opened window instead of the first' do
|
|
173
|
+
browser.a(id: 'open').click
|
|
174
|
+
browser.windows.wait_until(size: 3)
|
|
175
|
+
|
|
176
|
+
described_class.new(browser, title: 'closeable window').use.close
|
|
177
|
+
|
|
178
|
+
expect { browser.windows.wait_until(size: 2) }.not_to raise_timeout_exception
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
describe '#use' do
|
|
183
|
+
it 'switches to the window' do
|
|
184
|
+
described_class.new(browser, title: 'closeable window').use
|
|
185
|
+
expect(browser.title).to eq 'closeable window'
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
describe '#current?' do
|
|
190
|
+
it 'returns true if it is the current window' do
|
|
191
|
+
expect(described_class.new(browser, title: browser.title)).to be_current
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
it 'returns false if it is not the current window' do
|
|
195
|
+
expect(described_class.new(browser, title: 'closeable window')).not_to be_current
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
describe '#title' do
|
|
200
|
+
it 'returns the title of the window' do
|
|
201
|
+
browser.wait_while { |b| b.window(title: /^$/).exists? }
|
|
202
|
+
titles = browser.windows.map(&:title)
|
|
203
|
+
|
|
204
|
+
expect(titles).to include 'window switching', 'closeable window'
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
describe '#url' do
|
|
209
|
+
it 'returns the url of the window' do
|
|
210
|
+
urls = browser.windows.map(&:url)
|
|
211
|
+
|
|
212
|
+
expect(urls).to(include(/window_switching\.html/, /closeable\.html$/))
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
describe '#eql?' do
|
|
217
|
+
it 'knows when two windows are equal' do
|
|
218
|
+
win1 = described_class.new browser, {}
|
|
219
|
+
win2 = described_class.new browser, title: 'window switching'
|
|
220
|
+
|
|
221
|
+
expect(win1).to eq win2
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
it 'knows when two windows are not equal' do
|
|
225
|
+
win1 = described_class.new browser, title: 'closeable window'
|
|
226
|
+
win2 = described_class.new browser, title: 'window switching'
|
|
227
|
+
|
|
228
|
+
expect(win1).not_to eq win2
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
describe '#handle' do
|
|
233
|
+
it 'does not find if not matching' do
|
|
234
|
+
expect(browser.window(title: 'noop').handle).to be_nil
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
it 'finds window by :url' do
|
|
238
|
+
expect(browser.window(url: /closeable\.html/).handle).not_to be_nil
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
it 'finds window by :title' do
|
|
242
|
+
expect(browser.window(title: 'closeable window').handle).not_to be_nil
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
it 'finds window by :element' do
|
|
246
|
+
expect(browser.window(element: browser.a(id: 'close')).handle).not_to be_nil
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
it 'finds window by multiple values' do
|
|
250
|
+
expect(browser.window(url: /closeable\.html/, title: 'closeable window').handle).not_to be_nil
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
context 'with a closed window',
|
|
256
|
+
except: {browser: :safari,
|
|
257
|
+
reason: 'Clicking an Element that Closes a Window is returning NoMatchingWindowFoundException'} do
|
|
258
|
+
before do
|
|
259
|
+
@original_window = browser.window
|
|
260
|
+
browser.goto WatirSpec.url_for('window_switching.html')
|
|
261
|
+
browser.a(id: 'open').click
|
|
262
|
+
browser.windows.wait_until(size: 2)
|
|
263
|
+
@handles = browser.driver.window_handles
|
|
264
|
+
@closed_window = browser.window(title: 'closeable window').use
|
|
265
|
+
browser.a(id: 'close').click
|
|
266
|
+
browser.windows.wait_until(size: 1)
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
describe '#exists?' do
|
|
270
|
+
it 'returns false if previously referenced window is closed' do
|
|
271
|
+
expect(@closed_window).not_to be_present
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
it 'returns false if closed window is referenced' do
|
|
275
|
+
expect(browser.window).not_to exist
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
describe '#current?' do
|
|
280
|
+
it 'returns false if the referenced window is closed' do
|
|
281
|
+
expect(@original_window).not_to be_current
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
describe '#eql?' do
|
|
286
|
+
it 'returns false when checking equivalence to a closed window' do
|
|
287
|
+
expect(browser.window).not_to eq @closed_widow
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
describe '#use' do
|
|
292
|
+
it 'raises NoMatchingWindowFoundException error when attempting to use a referenced window that is closed' do
|
|
293
|
+
expect { @closed_window.use }.to raise_no_matching_window_exception
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
it 'raises NoMatchingWindowFoundException error when attempting to use the current window if it is closed' do
|
|
297
|
+
expect { browser.window.use }.to raise_no_matching_window_exception
|
|
298
|
+
end
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
it 'raises an exception when using an element on a closed window',
|
|
302
|
+
exclude: {browser: :firefox,
|
|
303
|
+
platform: :windows,
|
|
304
|
+
reason: 'https://github.com/mozilla/geckodriver/issues/1847'} do
|
|
305
|
+
msg = 'browser window was closed'
|
|
306
|
+
expect { browser.a.text }.to raise_exception(Exception::NoMatchingWindowFoundException, msg)
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
it 'raises an exception when locating a closed window' do
|
|
310
|
+
expect { browser.window(title: 'closeable window').use }.to raise_no_matching_window_exception
|
|
311
|
+
end
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
context 'with a closed window on a delay' do
|
|
315
|
+
it 'raises an exception when locating a window closed during lookup' do
|
|
316
|
+
browser.goto WatirSpec.url_for('window_switching.html')
|
|
317
|
+
browser.a(id: 'open').click
|
|
318
|
+
browser.windows.wait_until(size: 2)
|
|
319
|
+
browser.window(title: 'closeable window').use
|
|
320
|
+
browser.a(id: 'close-delay').click
|
|
321
|
+
allow(browser).to receive(:title).and_invoke(-> { sleep(0.5) && browser.wd.title })
|
|
322
|
+
|
|
323
|
+
expect { browser.window(title: 'closeable window').use }.to raise_no_matching_window_exception
|
|
324
|
+
end
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
context 'with current window closed',
|
|
328
|
+
except: {browser: :safari,
|
|
329
|
+
reason: 'Clicking an Element that Closes a Window is returning NoMatchingWindowFoundException'} do
|
|
330
|
+
before do
|
|
331
|
+
browser.goto WatirSpec.url_for('window_switching.html')
|
|
332
|
+
browser.a(id: 'open').click
|
|
333
|
+
browser.windows.wait_until(size: 2)
|
|
334
|
+
browser.window(title: 'closeable window').use
|
|
335
|
+
browser.a(id: 'close').click
|
|
336
|
+
browser.windows.wait_until(size: 1)
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
describe '#present?' do
|
|
340
|
+
it 'finds window by url' do
|
|
341
|
+
expect(browser.window(url: /window_switching\.html/)).to be_present
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
it 'finds window by title' do
|
|
345
|
+
expect(browser.window(title: 'window switching')).to be_present
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
it 'finds window by element' do
|
|
349
|
+
expect(browser.window(element: browser.link(id: 'open'))).to be_present
|
|
350
|
+
end
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
describe '#use' do
|
|
354
|
+
context 'when switching windows without blocks' do
|
|
355
|
+
it 'by url' do
|
|
356
|
+
browser.window(url: /window_switching\.html/).use
|
|
357
|
+
expect(browser.title).to be == 'window switching'
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
it 'by title' do
|
|
361
|
+
browser.window(title: 'window switching').use
|
|
362
|
+
expect(browser.url).to match(/window_switching\.html/)
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
it 'by element' do
|
|
366
|
+
browser.window(element: browser.link(id: 'open')).use
|
|
367
|
+
expect(browser.url).to match(/window_switching\.html/)
|
|
368
|
+
end
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
context 'when switching windows with blocks' do
|
|
372
|
+
it 'by url' do
|
|
373
|
+
browser.window(url: /window_switching\.html/).use { expect(browser.title).to be == 'window switching' }
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
it 'by title' do
|
|
377
|
+
browser.window(title: 'window switching').use { expect(browser.url).to match(/window_switching\.html/) }
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
it 'by element' do
|
|
381
|
+
element = browser.link(id: 'open')
|
|
382
|
+
browser.window(element: element).use { expect(browser.url).to match(/window_switching\.html/) }
|
|
383
|
+
end
|
|
384
|
+
end
|
|
385
|
+
end
|
|
386
|
+
end
|
|
387
|
+
|
|
388
|
+
context 'when manipulating size and position', except: {headless: true} do
|
|
389
|
+
before(:all) do
|
|
390
|
+
maximized_size = browser.window.size
|
|
391
|
+
|
|
392
|
+
browser.window.resize_to(
|
|
393
|
+
maximized_size.width - 100,
|
|
394
|
+
maximized_size.height - 100
|
|
395
|
+
)
|
|
396
|
+
browser.wait_until { |b| b.window.size != maximized_size }
|
|
397
|
+
|
|
398
|
+
current_position = browser.window.position
|
|
399
|
+
|
|
400
|
+
browser.window.move_to(
|
|
401
|
+
current_position.x + 40,
|
|
402
|
+
current_position.y + 40
|
|
403
|
+
)
|
|
404
|
+
browser.wait_until { |b| b.window.position != current_position }
|
|
405
|
+
|
|
406
|
+
@initial_size = browser.window.size
|
|
407
|
+
@initial_position = browser.window.position
|
|
408
|
+
end
|
|
409
|
+
|
|
410
|
+
before do
|
|
411
|
+
browser.goto WatirSpec.url_for('window_switching.html')
|
|
412
|
+
end
|
|
413
|
+
|
|
414
|
+
after do
|
|
415
|
+
browser.window.resize_to @initial_size.width, @initial_size.height
|
|
416
|
+
browser.window.move_to @initial_position.x, @initial_position.y
|
|
417
|
+
end
|
|
418
|
+
|
|
419
|
+
it 'gets the size of the current window' do
|
|
420
|
+
expect(@initial_size.width).to eq browser.execute_script('return window.outerWidth;')
|
|
421
|
+
expect(@initial_size.height).to eq browser.execute_script('return window.outerHeight;')
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
it 'gets the position of the current window' do
|
|
425
|
+
expect(@initial_position.x).to eq browser.execute_script('return window.screenX;')
|
|
426
|
+
expect(@initial_position.y).to eq browser.execute_script('return window.screenY;')
|
|
427
|
+
end
|
|
428
|
+
|
|
429
|
+
it 'resizes the window' do
|
|
430
|
+
browser.window.resize_to(
|
|
431
|
+
@initial_size.width - 20,
|
|
432
|
+
@initial_size.height - 20
|
|
433
|
+
)
|
|
434
|
+
|
|
435
|
+
browser.wait_until { |b| b.window.size != @initial_size }
|
|
436
|
+
|
|
437
|
+
new_size = browser.window.size
|
|
438
|
+
expect(new_size.width).to eq @initial_size.width - 20
|
|
439
|
+
expect(new_size.height).to eq @initial_size.height - 20
|
|
440
|
+
end
|
|
441
|
+
|
|
442
|
+
it 'moves the window' do
|
|
443
|
+
browser.window.move_to(
|
|
444
|
+
@initial_position.x + 5,
|
|
445
|
+
@initial_position.y + 5
|
|
446
|
+
)
|
|
447
|
+
|
|
448
|
+
browser.wait_until { |b| b.window.position != @initial_position }
|
|
449
|
+
|
|
450
|
+
new_position = browser.window.position
|
|
451
|
+
expect(new_position.x).to eq @initial_position.x + 5
|
|
452
|
+
expect(new_position.y).to eq @initial_position.y + 5
|
|
453
|
+
end
|
|
454
|
+
|
|
455
|
+
it 'maximizes the window' do
|
|
456
|
+
browser.window.maximize
|
|
457
|
+
browser.wait_until { |b| b.window.size != @initial_size }
|
|
458
|
+
|
|
459
|
+
new_size = browser.window.size
|
|
460
|
+
expect(new_size.width).to be >= @initial_size.width
|
|
461
|
+
expect(new_size.height).to be > @initial_size.height
|
|
462
|
+
end
|
|
463
|
+
|
|
464
|
+
it 'makes the window full screen' do
|
|
465
|
+
browser.window.full_screen
|
|
466
|
+
browser.wait_until { |b| b.window.size != @initial_size }
|
|
467
|
+
|
|
468
|
+
new_size = browser.window.size
|
|
469
|
+
expect(new_size.width).to be >= @initial_size.width
|
|
470
|
+
expect(new_size.height).to be > @initial_size.height
|
|
471
|
+
end
|
|
472
|
+
|
|
473
|
+
it 'minimizes the window' do
|
|
474
|
+
expect(browser.execute_script('return document.visibilityState;')).to eq 'visible'
|
|
475
|
+
|
|
476
|
+
browser.window.minimize
|
|
477
|
+
|
|
478
|
+
browser.wait_until { |b| !%w[visible normal].include?(b.execute_script('return document.visibilityState;')) }
|
|
479
|
+
|
|
480
|
+
expect(browser.execute_script('return document.visibilityState;')).to eq 'hidden'
|
|
481
|
+
browser.window.maximize
|
|
482
|
+
end
|
|
483
|
+
end
|
|
484
|
+
end
|
|
485
|
+
|
|
486
|
+
describe WindowCollection, exclude: {browser: :ie, reason: 'Cannot call #restore!'} do
|
|
487
|
+
before do
|
|
488
|
+
browser.goto WatirSpec.url_for('window_switching.html')
|
|
489
|
+
browser.a(id: 'open').click
|
|
490
|
+
browser.windows.wait_until(size: 2)
|
|
491
|
+
end
|
|
492
|
+
|
|
493
|
+
after do
|
|
494
|
+
browser.windows.restore!
|
|
495
|
+
end
|
|
496
|
+
|
|
497
|
+
describe '#to_a' do
|
|
498
|
+
it 'raises exception' do
|
|
499
|
+
expect {
|
|
500
|
+
described_class.new(browser).to_a
|
|
501
|
+
}.to raise_exception(NoMethodError, 'indexing not reliable on WindowCollection')
|
|
502
|
+
end
|
|
503
|
+
end
|
|
504
|
+
|
|
505
|
+
describe '#new' do
|
|
506
|
+
it 'returns all windows by default' do
|
|
507
|
+
windows = described_class.new(browser)
|
|
508
|
+
|
|
509
|
+
expect(windows.size).to eq 2
|
|
510
|
+
end
|
|
511
|
+
|
|
512
|
+
it 'filters available windows by url' do
|
|
513
|
+
windows = described_class.new(browser, url: /closeable\.html/)
|
|
514
|
+
|
|
515
|
+
expect(windows.size).to eq 1
|
|
516
|
+
end
|
|
517
|
+
|
|
518
|
+
it 'filters available windows by title' do
|
|
519
|
+
windows = described_class.new(browser, title: /closeable/)
|
|
520
|
+
|
|
521
|
+
expect(windows.size).to eq 1
|
|
522
|
+
end
|
|
523
|
+
|
|
524
|
+
it 'filters available windows by element' do
|
|
525
|
+
windows = described_class.new(browser, element: browser.element(id: 'close'))
|
|
526
|
+
|
|
527
|
+
expect(windows.size).to eq 1
|
|
528
|
+
end
|
|
529
|
+
|
|
530
|
+
it 'raises ArgumentError if unrecognized locator' do
|
|
531
|
+
expect {
|
|
532
|
+
described_class.new(browser, foo: /closeable/)
|
|
533
|
+
}.to raise_error(ArgumentError)
|
|
534
|
+
end
|
|
535
|
+
end
|
|
536
|
+
|
|
537
|
+
describe '#size' do
|
|
538
|
+
it 'counts the number of matching windows' do
|
|
539
|
+
expect(described_class.new(browser).size).to eq 2
|
|
540
|
+
end
|
|
541
|
+
end
|
|
542
|
+
|
|
543
|
+
describe '#eq?' do
|
|
544
|
+
it 'compares the equivalence of window handles' do
|
|
545
|
+
windows1 = described_class.new(browser, title: //)
|
|
546
|
+
windows2 = described_class.new(browser, url: //)
|
|
547
|
+
|
|
548
|
+
expect(windows1).to eq windows2
|
|
549
|
+
end
|
|
550
|
+
end
|
|
551
|
+
|
|
552
|
+
describe '#reset!' do
|
|
553
|
+
it 'clears window list' do
|
|
554
|
+
wins = browser.windows
|
|
555
|
+
expect(wins.size).to eq 2
|
|
556
|
+
wins.reset!
|
|
557
|
+
expect(wins.instance_variable_get(:@window_list)).to be_nil
|
|
558
|
+
end
|
|
559
|
+
end
|
|
560
|
+
|
|
561
|
+
describe '#restore!' do
|
|
562
|
+
it 'when on other window',
|
|
563
|
+
except: {browser: :safari, reason: 'Focus is on newly opened window instead of the first'} do
|
|
564
|
+
browser.a(id: 'open').click
|
|
565
|
+
browser.windows.wait_until(size: 3)
|
|
566
|
+
browser.window(title: 'closeable window').use
|
|
567
|
+
|
|
568
|
+
browser.windows.restore!
|
|
569
|
+
expect(browser.windows.size).to eq 1
|
|
570
|
+
expect(browser.title).to eq 'window switching'
|
|
571
|
+
end
|
|
572
|
+
|
|
573
|
+
it 'when browser closed does not raise exception' do
|
|
574
|
+
browser.close
|
|
575
|
+
|
|
576
|
+
expect { browser.windows.restore! }.not_to raise_exception
|
|
577
|
+
end
|
|
578
|
+
end
|
|
579
|
+
end
|
|
580
|
+
end
|