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,106 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe Hidden do
|
|
7
|
+
before do
|
|
8
|
+
browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Exist method
|
|
12
|
+
describe '#exists?' do
|
|
13
|
+
it 'returns true if the element exists' do
|
|
14
|
+
expect(browser.hidden(id: 'new_user_interests_dolls')).to exist
|
|
15
|
+
expect(browser.hidden(id: /new_user_interests_dolls/)).to exist
|
|
16
|
+
expect(browser.hidden(name: 'new_user_interests')).to exist
|
|
17
|
+
expect(browser.hidden(name: /new_user_interests/)).to exist
|
|
18
|
+
expect(browser.hidden(value: 'dolls')).to exist
|
|
19
|
+
expect(browser.hidden(value: /dolls/)).to exist
|
|
20
|
+
expect(browser.hidden(class: 'fun')).to exist
|
|
21
|
+
expect(browser.hidden(class: /fun/)).to exist
|
|
22
|
+
expect(browser.hidden(index: 0)).to exist
|
|
23
|
+
expect(browser.hidden(xpath: "//input[@id='new_user_interests_dolls']")).to exist
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'returns the first hidden if given no args' do
|
|
27
|
+
expect(browser.hidden).to exist
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'returns false if the element does not exist' do
|
|
31
|
+
expect(browser.hidden(id: 'no_such_id')).not_to exist
|
|
32
|
+
expect(browser.hidden(id: /no_such_id/)).not_to exist
|
|
33
|
+
expect(browser.hidden(name: 'no_such_name')).not_to exist
|
|
34
|
+
expect(browser.hidden(name: /no_such_name/)).not_to exist
|
|
35
|
+
expect(browser.hidden(value: 'no_such_value')).not_to exist
|
|
36
|
+
expect(browser.hidden(value: /no_such_value/)).not_to exist
|
|
37
|
+
expect(browser.hidden(text: 'no_such_text')).not_to exist
|
|
38
|
+
expect(browser.hidden(text: /no_such_text/)).not_to exist
|
|
39
|
+
expect(browser.hidden(class: 'no_such_class')).not_to exist
|
|
40
|
+
expect(browser.hidden(class: /no_such_class/)).not_to exist
|
|
41
|
+
expect(browser.hidden(index: 1337)).not_to exist
|
|
42
|
+
expect(browser.hidden(xpath: "//input[@id='no_such_id']")).not_to exist
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "raises TypeError when 'what' argument is invalid" do
|
|
46
|
+
expect { browser.hidden(id: 3.14).exists? }.to raise_error(TypeError)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Attribute methods
|
|
51
|
+
describe '#id' do
|
|
52
|
+
it 'returns the id attribute if the text field exists' do
|
|
53
|
+
expect(browser.hidden(index: 1).id).to eq 'new_user_interests_dolls'
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "raises UnknownObjectException if the text field doesn't exist" do
|
|
57
|
+
expect { browser.hidden(index: 1337).id }.to raise_unknown_object_exception
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
describe '#name' do
|
|
62
|
+
it 'returns the name attribute if the text field exists' do
|
|
63
|
+
expect(browser.hidden(index: 1).name).to eq 'new_user_interests'
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "raises UnknownObjectException if the text field doesn't exist" do
|
|
67
|
+
expect { browser.hidden(index: 1337).name }.to raise_unknown_object_exception
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
describe '#type' do
|
|
72
|
+
it 'returns the type attribute if the text field exists' do
|
|
73
|
+
expect(browser.hidden(index: 1).type).to eq 'hidden'
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "raises UnknownObjectException if the text field doesn't exist" do
|
|
77
|
+
expect { browser.hidden(index: 1337).type }.to raise_unknown_object_exception
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
describe '#value' do
|
|
82
|
+
it 'returns the value attribute if the text field exists' do
|
|
83
|
+
expect(browser.hidden(index: 1).value).to eq 'dolls'
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "raises UnknownObjectException if the text field doesn't exist" do
|
|
87
|
+
expect { browser.hidden(index: 1337).value }.to raise_unknown_object_exception
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
describe '#click' do
|
|
92
|
+
it 'raises ObjectDisabledException when attempting to click' do
|
|
93
|
+
expect { browser.hidden(index: 1337).click }.to raise_object_disabled_exception
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
describe '#respond_to?' do
|
|
98
|
+
it 'returns true for all attribute methods' do
|
|
99
|
+
expect(browser.hidden(index: 1)).to respond_to(:id)
|
|
100
|
+
expect(browser.hidden(index: 1)).to respond_to(:name)
|
|
101
|
+
expect(browser.hidden(index: 1)).to respond_to(:type)
|
|
102
|
+
expect(browser.hidden(index: 1)).to respond_to(:value)
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe HiddenCollection do
|
|
7
|
+
before do
|
|
8
|
+
browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe 'with selectors' do
|
|
12
|
+
it 'returns the matching elements' do
|
|
13
|
+
expect(browser.hiddens(value: 'dolls').to_a).to eq [browser.hidden(value: 'dolls')]
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe '#length' do
|
|
18
|
+
it 'returns the number of hiddens' do
|
|
19
|
+
expect(browser.hiddens.length).to eq 2
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe '#[]' do
|
|
24
|
+
it 'returns the Hidden at the given index' do
|
|
25
|
+
expect(browser.hiddens[1].id).to eq 'new_user_interests_dolls'
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe '#each' do
|
|
30
|
+
it 'iterates through hiddens correctly' do
|
|
31
|
+
count = 0
|
|
32
|
+
|
|
33
|
+
browser.hiddens.each_with_index do |h, index|
|
|
34
|
+
expect(h.name).to eq browser.hidden(index: index).name
|
|
35
|
+
expect(h.id).to eq browser.hidden(index: index).id
|
|
36
|
+
expect(h.value).to eq browser.hidden(index: index).value
|
|
37
|
+
|
|
38
|
+
count += 1
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
expect(count).to be > 0
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe Heading do
|
|
7
|
+
before do
|
|
8
|
+
browser.goto(WatirSpec.url_for('non_control_elements.html'))
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Exists method
|
|
12
|
+
describe '#exist?' do
|
|
13
|
+
it 'returns true if the element exists' do
|
|
14
|
+
expect(browser.h1(id: 'header1')).to exist
|
|
15
|
+
expect(browser.h2(id: /header2/)).to exist
|
|
16
|
+
expect(browser.h3(text: 'Header 3')).to exist
|
|
17
|
+
expect(browser.h4(text: /Header 4/)).to exist
|
|
18
|
+
expect(browser.h5(index: 0)).to exist
|
|
19
|
+
expect(browser.h6(index: 0)).to exist
|
|
20
|
+
expect(browser.h1(xpath: "//h1[@id='first_header']")).to exist
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'returns the first h1 if given no args' do
|
|
24
|
+
expect(browser.h1).to exist
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'returns false if the element does not exist' do
|
|
28
|
+
expect(browser.h1(id: 'no_such_id')).not_to exist
|
|
29
|
+
expect(browser.h1(id: /no_such_id/)).not_to exist
|
|
30
|
+
expect(browser.h1(text: 'no_such_text')).not_to exist
|
|
31
|
+
expect(browser.h1(text: /no_such_text 1/)).not_to exist
|
|
32
|
+
expect(browser.h1(index: 1337)).not_to exist
|
|
33
|
+
expect(browser.h1(xpath: "//p[@id='no_such_id']")).not_to exist
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "raises TypeError when 'what' argument is invalid" do
|
|
37
|
+
expect { browser.h1(id: 3.14).exists? }.to raise_error(TypeError)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Attribute methods
|
|
42
|
+
describe '#id' do
|
|
43
|
+
it 'returns the id attribute' do
|
|
44
|
+
expect(browser.h1(index: 0).id).to eq 'first_header'
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "returns an empty string if the element exists and the attribute doesn't" do
|
|
48
|
+
expect(browser.h3(index: 0).id).to eq ''
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "raises UnknownObjectException if the p doesn't exist" do
|
|
52
|
+
expect { browser.h1(id: 'no_such_id').id }.to raise_unknown_object_exception
|
|
53
|
+
expect { browser.h1(index: 1337).id }.to raise_unknown_object_exception
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
describe '#text' do
|
|
58
|
+
it 'returns the text of the element' do
|
|
59
|
+
expect(browser.h1(index: 0).text).to eq 'Header 1'
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "returns an empty string if the element doesn't contain any text" do
|
|
63
|
+
expect(browser.h6(id: 'empty_header').text).to eq ''
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "raises UnknownObjectException if the p doesn't exist" do
|
|
67
|
+
expect { browser.h1(id: 'no_such_id').text }.to raise_unknown_object_exception
|
|
68
|
+
expect { browser.h1(xpath: "//h1[@id='no_such_id']").text }.to raise_unknown_object_exception
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
describe '#respond_to?' do
|
|
73
|
+
it 'returns true for all attribute methods' do
|
|
74
|
+
expect(browser.h1(index: 0)).to respond_to(:class_name)
|
|
75
|
+
expect(browser.h1(index: 0)).to respond_to(:id)
|
|
76
|
+
expect(browser.h1(index: 0)).to respond_to(:text)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe HeadingCollection do
|
|
7
|
+
before do
|
|
8
|
+
browser.goto(WatirSpec.url_for('non_control_elements.html'))
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe 'with selectors' do
|
|
12
|
+
it 'returns the matching elements' do
|
|
13
|
+
expect(browser.h1s(class: 'primary').to_a).to eq [browser.h1(class: 'primary')]
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe '#length' do
|
|
18
|
+
it 'returns the number of h1s' do
|
|
19
|
+
expect(browser.h2s.length).to eq 9
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe '#[]' do
|
|
24
|
+
it 'returns the h1 at the given index' do
|
|
25
|
+
expect(browser.h1s[0].id).to eq 'first_header'
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe '#each' do
|
|
30
|
+
it 'iterates through header collections correctly' do
|
|
31
|
+
lengths = (1..6).collect do |i|
|
|
32
|
+
collection = browser.send(:"h#{i}s")
|
|
33
|
+
collection.each_with_index do |h, index|
|
|
34
|
+
expect(h.id).to eq browser.send(:"h#{i}", index: index).id
|
|
35
|
+
end
|
|
36
|
+
collection.length
|
|
37
|
+
end
|
|
38
|
+
expect(lengths).to eq [2, 9, 2, 1, 1, 2]
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
#
|
|
6
|
+
# TODO: fix duplication with frame_spec
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
module Watir
|
|
10
|
+
describe IFrame do
|
|
11
|
+
before do
|
|
12
|
+
browser.goto(WatirSpec.url_for('iframes.html'))
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it 'handles crossframe javascript' do
|
|
16
|
+
browser.goto WatirSpec.url_for('iframes.html')
|
|
17
|
+
|
|
18
|
+
expect(browser.iframe(id: 'iframe_1').text_field(name: 'senderElement').value).to eq 'send_this_value'
|
|
19
|
+
expect(browser.iframe(id: 'iframe_2').text_field(name: 'recieverElement').value).to eq 'old_value'
|
|
20
|
+
browser.iframe(id: 'iframe_1').button(id: 'send').click
|
|
21
|
+
expect(browser.iframe(id: 'iframe_2').text_field(name: 'recieverElement').value).to eq 'send_this_value'
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'locates an element defined by Selenium Element' do
|
|
25
|
+
iframe = browser.iframe(id: 'iframe_1').locate
|
|
26
|
+
se_element = iframe.instance_variable_get(:@element)
|
|
27
|
+
iframe2 = browser.element(element: se_element).to_subtype
|
|
28
|
+
expect(iframe2).to eq iframe
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe '#wd' do
|
|
32
|
+
it 'returns a Watir::FramedDriver instance' do
|
|
33
|
+
iframe = browser.iframe(id: 'iframe_1')
|
|
34
|
+
expect(iframe.wd).to be_a(Watir::FramedDriver)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'properly delegates driver commands' do
|
|
38
|
+
iframe = browser.iframe(id: 'iframe_1')
|
|
39
|
+
expect(iframe.wd.title).to eq 'Iframes'
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'properly delegates element commands' do
|
|
43
|
+
iframe = browser.iframe(id: 'iframe_1')
|
|
44
|
+
expect(iframe.wd.attribute('id')).to eq 'iframe_1'
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
describe '#exist?' do
|
|
49
|
+
it 'returns true if the iframe exists' do
|
|
50
|
+
expect(browser.iframe(id: 'iframe_1')).to exist
|
|
51
|
+
expect(browser.iframe(name: 'iframe1')).to exist
|
|
52
|
+
expect(browser.iframe(index: 0)).to exist
|
|
53
|
+
expect(browser.iframe(class: 'half')).to exist
|
|
54
|
+
expect(browser.iframe(xpath: "//iframe[@id='iframe_1']")).to exist
|
|
55
|
+
expect(browser.iframe(src: 'iframe_1.html')).to exist
|
|
56
|
+
expect(browser.iframe(id: /iframe/)).to exist
|
|
57
|
+
expect(browser.iframe(name: /iframe/)).to exist
|
|
58
|
+
expect(browser.iframe(src: /iframe_1/)).to exist
|
|
59
|
+
expect(browser.iframe(class: /half/)).to exist
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it 'returns the first iframe if given no args' do
|
|
63
|
+
expect(browser.iframe).to exist
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "returns false if the iframe doesn't exist" do
|
|
67
|
+
expect(browser.iframe(id: 'no_such_id')).not_to exist
|
|
68
|
+
expect(browser.iframe(name: 'no_such_text')).not_to exist
|
|
69
|
+
expect(browser.iframe(index: 1337)).not_to exist
|
|
70
|
+
expect(browser.iframe(src: 'no_such_src')).not_to exist
|
|
71
|
+
expect(browser.iframe(class: 'no_such_class')).not_to exist
|
|
72
|
+
expect(browser.iframe(id: /no_such_id/)).not_to exist
|
|
73
|
+
expect(browser.iframe(name: /no_such_text/)).not_to exist
|
|
74
|
+
expect(browser.iframe(src: /no_such_src/)).not_to exist
|
|
75
|
+
expect(browser.iframe(class: /no_such_class/)).not_to exist
|
|
76
|
+
expect(browser.iframe(xpath: "//iframe[@id='no_such_id']")).not_to exist
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it 'returns true if an element in an iframe does exist' do
|
|
80
|
+
expect(browser.iframe.element(css: '#senderElement')).to exist
|
|
81
|
+
expect(browser.iframe.element(id: 'senderElement')).to exist
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it 'returns true for multiple elements that exist in an iframe with a parent selector' do
|
|
85
|
+
expect(browser.div(class: 'wrapper').iframe.element(id: 'first_grandson')).to exist
|
|
86
|
+
expect(browser.div(class: 'wrapper').iframe.element(id: 'second_grandson')).to exist
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it 'returns false if an element in an iframe does not exist' do
|
|
90
|
+
expect(browser.iframe.element(css: '#no_such_id')).not_to exist
|
|
91
|
+
expect(browser.iframe.element(id: 'no_such_id')).not_to exist
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it 'returns true if an element outside an iframe exists after checking for one inside that does exist' do
|
|
95
|
+
existing_element = browser.element(css: '#iframe_1')
|
|
96
|
+
expect(existing_element).to exist
|
|
97
|
+
expect(browser.iframe.element(css: '#senderElement')).to exist
|
|
98
|
+
expect(existing_element).to exist
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it 'returns true if an element outside an iframe exists after checking for one inside that does not exist' do
|
|
102
|
+
existing_element = browser.element(css: '#iframe_1')
|
|
103
|
+
expect(existing_element).to exist
|
|
104
|
+
expect(browser.iframe.element(css: '#no_such_id')).not_to exist
|
|
105
|
+
expect(existing_element).to exist
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it 'returns true if an element exists in a frame generated in a collection' do
|
|
109
|
+
nested_element = browser.body.iframes.first.div
|
|
110
|
+
expect(nested_element).to exist
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
it 'returns false for sub-element of a non-existing iframe' do
|
|
114
|
+
expect(browser.iframe(id: 'no_such_id').element).not_to exist
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it 'handles nested iframes' do
|
|
118
|
+
browser.goto(WatirSpec.url_for('nested_iframes.html'))
|
|
119
|
+
browser.iframe(id: 'two').iframe(id: 'three').link(id: 'four').click
|
|
120
|
+
|
|
121
|
+
expect {
|
|
122
|
+
browser.wait_until { |b| b.title == 'definition_lists' }
|
|
123
|
+
}.not_to raise_exception
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it "raises TypeError when 'what' argument is invalid" do
|
|
127
|
+
expect { browser.iframe(id: 3.14).exists? }.to raise_error(TypeError)
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it 'handles all locators for element which do not exist' do
|
|
132
|
+
expect(browser.iframe(index: 0).div(id: 'invalid')).not_to exist
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
describe '#present?' do
|
|
136
|
+
it 'returns true if the iframe present' do
|
|
137
|
+
expect(browser.iframe(id: 'iframe_1')).to be_present
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
it 'returns false if the iframe is not present' do
|
|
141
|
+
expect(browser.iframe(id: 'no_such_id')).not_to be_present
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
it 'switches between iframe and parent when needed' do
|
|
146
|
+
expect {
|
|
147
|
+
browser.iframe(id: 'iframe_1').elements.each do |element|
|
|
148
|
+
element.text
|
|
149
|
+
browser.h1.text
|
|
150
|
+
end
|
|
151
|
+
}.not_to raise_exception
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
it 'switches when the frame is created by subtype' do
|
|
155
|
+
subtype = browser.iframe.to_subtype
|
|
156
|
+
expect { subtype.element.locate }.not_to raise_exception
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
it 'switches back to top level browsing context' do
|
|
160
|
+
# Point driver to browsing context of first iframe
|
|
161
|
+
browser.iframes.first.ps.locate
|
|
162
|
+
|
|
163
|
+
expect(browser.h1s.first.text).to be == 'Iframes'
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
it 'raises UnknownFrameException when accessing elements inside non-existing iframe' do
|
|
167
|
+
expect { browser.iframe(name: 'no_such_name').p(index: 0).id }.to raise_unknown_frame_exception
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
it 'raises UnknownFrameException when accessing a non-existing iframe' do
|
|
171
|
+
expect { browser.iframe(name: 'no_such_name').id }.to raise_unknown_frame_exception
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
it 'raises UnknownFrameException when accessing a non-existing subframe' do
|
|
175
|
+
expect { browser.iframe(name: 'iframe1').iframe(name: 'no_such_name').id }.to raise_unknown_frame_exception
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
it 'raises UnknownObjectException when accessing a non-existing element inside an existing iframe' do
|
|
179
|
+
expect { browser.iframe(index: 0).p(index: 1337).id }.to raise_unknown_object_exception
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
it "raises NoMethodError when trying to access attributes it doesn't have" do
|
|
183
|
+
expect { browser.iframe(index: 0).foo }.to raise_error(NoMethodError)
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
it 'is able to set a field' do
|
|
187
|
+
browser.iframe(index: 0).text_field(name: 'senderElement').set('new value')
|
|
188
|
+
expect(browser.iframe(index: 0).text_field(name: 'senderElement').value).to eq 'new value'
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
it 'will suggest looking in an iframe when iframes exist' do
|
|
192
|
+
msg = 'Maybe look in an iframe?'
|
|
193
|
+
expect { browser.text_field(name: 'senderElement').set('no') }.to raise_unknown_object_exception(msg)
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
it 'will suggest looking in a nested iframe when iframes exist' do
|
|
197
|
+
browser.goto(WatirSpec.url_for('nested_iframes.html'))
|
|
198
|
+
top = browser.iframe(id: 'two')
|
|
199
|
+
expect { top.link(id: 'four').click }.to raise_unknown_object_exception('Maybe look in an iframe?')
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
describe '#execute_script' do
|
|
203
|
+
it 'executes the given javascript in the specified frame',
|
|
204
|
+
except: {browser: :safari, reason: 'Safari does not strip text'} do
|
|
205
|
+
frame = browser.iframe(index: 0)
|
|
206
|
+
expect(frame.div(id: 'set_by_js').text).to eq ''
|
|
207
|
+
inner_html = 'Art consists of limitation. The most beautiful part of every picture is the frame.'
|
|
208
|
+
script = "document.getElementById('set_by_js').innerHTML = '#{inner_html}'"
|
|
209
|
+
frame.execute_script script
|
|
210
|
+
text = 'Art consists of limitation. The most beautiful part of every picture is the frame.'
|
|
211
|
+
expect(frame.div(id: 'set_by_js').text).to eq text
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
describe '#html' do
|
|
216
|
+
it 'returns the full HTML source of the iframe' do
|
|
217
|
+
browser.goto WatirSpec.url_for('iframes.html')
|
|
218
|
+
expect(browser.iframe.html.downcase).to include('<title>iframe 1</title>')
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
describe '#text' do
|
|
223
|
+
it 'returns the text inside the iframe' do
|
|
224
|
+
browser.goto WatirSpec.url_for('iframes.html')
|
|
225
|
+
expect(browser.iframe.text).to include('Frame 1')
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
describe FramedDriver do
|
|
231
|
+
it 'raises name error if method is not defined on driver or element' do
|
|
232
|
+
browser.goto WatirSpec.url_for('iframes.html')
|
|
233
|
+
expect(browser.iframe(id: 'iframe_1').wd).not_to respond_to :foo
|
|
234
|
+
expect { browser.iframe(id: 'iframe_1').wd.foo }.to raise_exception NoMethodError
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
it 'raises exception when attempting to switch to a non-frame element' do
|
|
238
|
+
browser.goto WatirSpec.url_for('iframes.html')
|
|
239
|
+
element = browser.h1.wd
|
|
240
|
+
fd = described_class.new(element, browser)
|
|
241
|
+
expect { fd.switch! }.to raise_exception Watir::Exception::UnknownFrameException
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe IFrameCollection do
|
|
7
|
+
before do
|
|
8
|
+
browser.goto(WatirSpec.url_for('iframes.html'))
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe 'with selectors' do
|
|
12
|
+
it 'returns the matching elements' do
|
|
13
|
+
expect(browser.iframes(id: 'iframe_2').to_a).to eq [browser.iframe(id: 'iframe_2')]
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe 'eql?' do
|
|
18
|
+
it 'matches equality of iframe with that from a collection' do
|
|
19
|
+
expect(browser.iframes.last).to eq browser.iframe(id: 'iframe_3')
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe '#length' do
|
|
24
|
+
it 'returns the correct number of iframes' do
|
|
25
|
+
expect(browser.iframes.length).to eq 3
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe '#[]' do
|
|
30
|
+
it 'returns the iframe at the given index' do
|
|
31
|
+
expect(browser.iframes[0].id).to eq 'iframe_1'
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe '#each' do
|
|
36
|
+
it 'iterates through frames correctly' do
|
|
37
|
+
count = 0
|
|
38
|
+
|
|
39
|
+
browser.iframes.each_with_index do |f, index|
|
|
40
|
+
expect(f.name).to eq browser.iframe(index: index).name
|
|
41
|
+
expect(f.id).to eq browser.iframe(index: index).id
|
|
42
|
+
count += 1
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
expect(count).to be > 0
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|