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,108 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe 'Dd' do
|
|
7
|
+
before do
|
|
8
|
+
browser.goto(WatirSpec.url_for('definition_lists.html'))
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Exists method
|
|
12
|
+
describe '#exists?' do
|
|
13
|
+
it 'returns true if the element exists' do
|
|
14
|
+
expect(browser.dd(id: 'someone')).to exist
|
|
15
|
+
expect(browser.dd(class: 'name')).to exist
|
|
16
|
+
expect(browser.dd(xpath: "//dd[@id='someone']")).to exist
|
|
17
|
+
expect(browser.dd(index: 0)).to exist
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'returns the first dd if given no args' do
|
|
21
|
+
expect(browser.dd).to exist
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'returns false if the element does not exist' do
|
|
25
|
+
expect(browser.dd(id: 'no_such_id')).not_to exist
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "raises TypeError when 'what' argument is invalid" do
|
|
29
|
+
expect { browser.dd(id: 3.14).exists? }.to raise_error(TypeError)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Attribute methods
|
|
34
|
+
describe '#id' do
|
|
35
|
+
it 'returns the id attribute if the element exists' do
|
|
36
|
+
expect(browser.dd(class: 'name').id).to eq 'someone'
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "returns an empty string if the element exists, but the attribute doesn't" do
|
|
40
|
+
expect(browser.dd(class: 'address').id).to eq ''
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it 'raises UnknownObjectException if the element does not exist' do
|
|
44
|
+
expect { browser.dd(id: 'no_such_id').id }.to raise_unknown_object_exception
|
|
45
|
+
expect { browser.dd(title: 'no_such_id').id }.to raise_unknown_object_exception
|
|
46
|
+
expect { browser.dd(index: 1337).id }.to raise_unknown_object_exception
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe '#title' do
|
|
51
|
+
it 'returns the title of the element' do
|
|
52
|
+
expect(browser.dd(class: 'name').title).to eq 'someone'
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
describe '#text' do
|
|
57
|
+
it 'returns the text of the element' do
|
|
58
|
+
expect(browser.dd(id: 'someone').text).to eq 'John Doe'
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it 'returns an empty string if the element exists but contains no text',
|
|
62
|
+
except: {browser: :safari, reason: 'Safari does not strip text'} do
|
|
63
|
+
expect(browser.dd(class: 'noop').text).to eq ''
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it 'raises UnknownObjectException if the element does not exist' do
|
|
67
|
+
expect { browser.dd(id: 'no_such_id').text }.to raise_unknown_object_exception
|
|
68
|
+
expect { browser.dd(title: 'no_such_title').text }.to raise_unknown_object_exception
|
|
69
|
+
expect { browser.dd(index: 1337).text }.to raise_unknown_object_exception
|
|
70
|
+
expect { browser.dd(xpath: "//dd[@id='no_such_id']").text }.to raise_unknown_object_exception
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe '#respond_to?' do
|
|
75
|
+
it 'returns true for all attribute methods' do
|
|
76
|
+
expect(browser.dd(index: 0)).to respond_to(:id)
|
|
77
|
+
expect(browser.dd(index: 0)).to respond_to(:class_name)
|
|
78
|
+
expect(browser.dd(index: 0)).to respond_to(:style)
|
|
79
|
+
expect(browser.dd(index: 0)).to respond_to(:text)
|
|
80
|
+
expect(browser.dd(index: 0)).to respond_to(:title)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Manipulation methods
|
|
85
|
+
describe '#click' do
|
|
86
|
+
it 'fires events when clicked' do
|
|
87
|
+
expect(browser.dd(title: 'education').text).not_to eq 'changed'
|
|
88
|
+
browser.dd(title: 'education').click
|
|
89
|
+
expect(browser.dd(title: 'education').text).to eq 'changed'
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it 'raises UnknownObjectException if the element does not exist' do
|
|
93
|
+
expect { browser.dd(id: 'no_such_id').click }.to raise_unknown_object_exception
|
|
94
|
+
expect { browser.dd(title: 'no_such_title').click }.to raise_unknown_object_exception
|
|
95
|
+
expect { browser.dd(index: 1337).click }.to raise_unknown_object_exception
|
|
96
|
+
expect { browser.dd(xpath: "//dd[@id='no_such_id']").click }.to raise_unknown_object_exception
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
describe '#html' do
|
|
101
|
+
it 'returns the HTML of the element' do
|
|
102
|
+
html = browser.dd(id: 'someone').html
|
|
103
|
+
expect(html).to match(/John Doe/m)
|
|
104
|
+
expect(html).not_to include('</body>')
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe 'Dds' do
|
|
7
|
+
before do
|
|
8
|
+
browser.goto(WatirSpec.url_for('definition_lists.html'))
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe 'with selectors' do
|
|
12
|
+
it 'returns the matching elements' do
|
|
13
|
+
expect(browser.dds(text: '11 years').to_a).to eq [browser.dd(text: '11 years')]
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe '#length' do
|
|
18
|
+
it 'returns the number of dds' do
|
|
19
|
+
expect(browser.dds.length).to eq 11
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe '#[]' do
|
|
24
|
+
it 'returns the dd at the given index' do
|
|
25
|
+
expect(browser.dds[1].title).to eq 'education'
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe '#each' do
|
|
30
|
+
it 'iterates through dds correctly' do
|
|
31
|
+
count = 0
|
|
32
|
+
|
|
33
|
+
browser.dds.each_with_index do |d, index|
|
|
34
|
+
expect(d.id).to eq browser.dd(index: index).id
|
|
35
|
+
expect(d.class_name).to eq browser.dd(index: index).class_name
|
|
36
|
+
|
|
37
|
+
count += 1
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
expect(count).to be > 0
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe 'Del' 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 'del' exists" do
|
|
14
|
+
expect(browser.del(id: 'lead')).to exist
|
|
15
|
+
expect(browser.del(id: /lead/)).to exist
|
|
16
|
+
expect(browser.del(text: 'This is a deleted text tag 1')).to exist
|
|
17
|
+
expect(browser.del(text: /This is a deleted text tag 1/)).to exist
|
|
18
|
+
expect(browser.del(class: 'lead')).to exist
|
|
19
|
+
expect(browser.del(class: /lead/)).to exist
|
|
20
|
+
expect(browser.del(index: 0)).to exist
|
|
21
|
+
expect(browser.del(xpath: "//del[@id='lead']")).to exist
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'returns the first del if given no args' do
|
|
25
|
+
expect(browser.del).to exist
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "returns false if the element doesn't exist" do
|
|
29
|
+
expect(browser.del(id: 'no_such_id')).not_to exist
|
|
30
|
+
expect(browser.del(id: /no_such_id/)).not_to exist
|
|
31
|
+
expect(browser.del(text: 'no_such_text')).not_to exist
|
|
32
|
+
expect(browser.del(text: /no_such_text/)).not_to exist
|
|
33
|
+
expect(browser.del(class: 'no_such_class')).not_to exist
|
|
34
|
+
expect(browser.del(class: /no_such_class/)).not_to exist
|
|
35
|
+
expect(browser.del(index: 1337)).not_to exist
|
|
36
|
+
expect(browser.del(xpath: "//del[@id='no_such_id']")).not_to exist
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "raises TypeError when 'what' argument is invalid" do
|
|
40
|
+
expect { browser.del(id: 3.14).exists? }.to raise_error(TypeError)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Attribute methods
|
|
45
|
+
describe '#id' do
|
|
46
|
+
it 'returns the id attribute' do
|
|
47
|
+
expect(browser.del(index: 0).id).to eq 'lead'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "returns an empty string if the element exists and the attribute doesn't" do
|
|
51
|
+
expect(browser.del(index: 2).id).to eq ''
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "raises UnknownObjectException if the del doesn't exist" do
|
|
55
|
+
expect { browser.del(id: 'no_such_id').id }.to raise_unknown_object_exception
|
|
56
|
+
expect { browser.del(index: 1337).id }.to raise_unknown_object_exception
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe '#title' do
|
|
61
|
+
it 'returns the title attribute' do
|
|
62
|
+
expect(browser.del(index: 0).title).to eq 'Lorem ipsum'
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "returns an empty string if the element exists and the attribute doesn't" do
|
|
66
|
+
expect(browser.del(index: 2).title).to eq ''
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "raises UnknownObjectException if the del doesn't exist" do
|
|
70
|
+
expect { browser.del(id: 'no_such_id').title }.to raise_unknown_object_exception
|
|
71
|
+
expect { browser.del(xpath: "//del[@id='no_such_id']").title }.to raise_unknown_object_exception
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
describe '#text' do
|
|
76
|
+
it 'returns the text of the del' do
|
|
77
|
+
expect(browser.del(index: 1).text).to eq 'This is a deleted text tag 2'
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "returns an empty string if the element doesn't contain any text" do
|
|
81
|
+
expect(browser.del(index: 3).text).to eq ''
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "raises UnknownObjectException if the del doesn't exist" do
|
|
85
|
+
expect { browser.del(id: 'no_such_id').text }.to raise_unknown_object_exception
|
|
86
|
+
expect { browser.del(xpath: "//del[@id='no_such_id']").text }.to raise_unknown_object_exception
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
describe '#respond_to?' do
|
|
91
|
+
it 'returns true for all attribute methods' do
|
|
92
|
+
expect(browser.del(index: 0)).to respond_to(:class_name)
|
|
93
|
+
expect(browser.del(index: 0)).to respond_to(:id)
|
|
94
|
+
expect(browser.del(index: 0)).to respond_to(:title)
|
|
95
|
+
expect(browser.del(index: 0)).to respond_to(:text)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Other
|
|
100
|
+
describe '#click', except: {headless: true} do
|
|
101
|
+
it 'fires events' do
|
|
102
|
+
expect(browser.del(class: 'footer').text).not_to include('Javascript')
|
|
103
|
+
browser.del(class: 'footer').click
|
|
104
|
+
expect(browser.del(class: 'footer').text).to include('Javascript')
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "raises UnknownObjectException if the del doesn't exist" do
|
|
108
|
+
expect { browser.del(id: 'no_such_id').click }.to raise_unknown_object_exception
|
|
109
|
+
expect { browser.del(title: 'no_such_title').click }.to raise_unknown_object_exception
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe 'Dels' 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.dels(class: 'lead').to_a).to eq [browser.del(class: 'lead')]
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe '#length' do
|
|
18
|
+
it 'returns the number of dels' do
|
|
19
|
+
expect(browser.dels.length).to eq 5
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe '#[]' do
|
|
24
|
+
it 'returns the del at the given index' do
|
|
25
|
+
expect(browser.dels[0].id).to eq 'lead'
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe '#each' do
|
|
30
|
+
it 'iterates through dels correctly' do
|
|
31
|
+
count = 0
|
|
32
|
+
|
|
33
|
+
browser.dels.each_with_index do |s, index|
|
|
34
|
+
expect(s.id).to eq browser.del(index: index).id
|
|
35
|
+
count += 1
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
expect(count).to be > 0
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe Div do
|
|
7
|
+
before do
|
|
8
|
+
browser.goto(WatirSpec.url_for('non_control_elements.html'))
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe '#exists?' do
|
|
12
|
+
it 'returns true if the element exists' do
|
|
13
|
+
expect(browser.div(id: 'header')).to exist
|
|
14
|
+
expect(browser.div(id: /header/)).to exist
|
|
15
|
+
expect(browser.div(title: 'Header and primary navigation')).to exist
|
|
16
|
+
expect(browser.div(title: /Header and primary navigation/)).to exist
|
|
17
|
+
expect(browser.div(text: 'Not shownNot hidden')).to exist
|
|
18
|
+
expect(browser.div(text: /Not hidden/)).to exist
|
|
19
|
+
expect(browser.div(class: 'profile')).to exist
|
|
20
|
+
expect(browser.div(class: /profile/)).to exist
|
|
21
|
+
expect(browser.div(index: 0)).to exist
|
|
22
|
+
expect(browser.div(xpath: "//div[@id='header']")).to exist
|
|
23
|
+
expect(browser.div(custom_attribute: 'custom')).to exist
|
|
24
|
+
expect(browser.div(custom_attribute: /custom/)).to exist
|
|
25
|
+
expect(browser.div(text: /some visible/)).to exist
|
|
26
|
+
expect(browser.div(text: /some (visible|Jeff)/)).to exist
|
|
27
|
+
expect(browser.div(text: /none visible/)).to exist
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'returns the first div if given no args' do
|
|
31
|
+
expect(browser.div).to exist
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'returns false if the element does not exist' do
|
|
35
|
+
expect(browser.div(id: 'no_such_id')).not_to exist
|
|
36
|
+
expect(browser.div(id: /no_such_id/)).not_to exist
|
|
37
|
+
expect(browser.div(title: 'no_such_title')).not_to exist
|
|
38
|
+
expect(browser.div(title: /no_such_title/)).not_to exist
|
|
39
|
+
expect(browser.div(text: 'no_such_text')).not_to exist
|
|
40
|
+
expect(browser.div(text: /no_such_text/)).not_to exist
|
|
41
|
+
expect(browser.div(class: 'no_such_class')).not_to exist
|
|
42
|
+
expect(browser.div(class: /no_such_class/)).not_to exist
|
|
43
|
+
expect(browser.div(text: /some visible some hidden/)).to exist
|
|
44
|
+
expect(browser.div(index: 1337)).not_to exist
|
|
45
|
+
expect(browser.div(xpath: "//div[@id='no_such_id']")).not_to exist
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "raises TypeError when 'what' argument is invalid" do
|
|
49
|
+
expect { browser.div(id: 3.14).exists? }.to raise_error(TypeError)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Attribute methods
|
|
54
|
+
describe '#id' do
|
|
55
|
+
it 'returns the id attribute if the element exists' do
|
|
56
|
+
expect(browser.div(index: 1).id).to eq 'outer_container'
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "returns an empty string if the element exists, but the attribute doesn't" do
|
|
60
|
+
expect(browser.div(index: 0).id).to eq ''
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'raises UnknownObjectException if the element does not exist' do
|
|
64
|
+
expect { browser.div(id: 'no_such_id').id }.to raise_unknown_object_exception
|
|
65
|
+
expect { browser.div(title: 'no_such_id').id }.to raise_unknown_object_exception
|
|
66
|
+
expect { browser.div(index: 1337).id }.to raise_unknown_object_exception
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'takes all conditions into account when locating by id' do
|
|
70
|
+
browser.goto WatirSpec.url_for 'multiple_ids.html'
|
|
71
|
+
expect(browser.div(id: 'multiple', class: 'bar').class_name).to eq 'bar'
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it 'finds the id with the correct tag name' do
|
|
75
|
+
browser.goto WatirSpec.url_for 'multiple_ids.html'
|
|
76
|
+
expect(browser.span(id: 'multiple').class_name).to eq 'foobar'
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
describe '#style' do
|
|
81
|
+
it 'returns the style attribute if the element exists' do
|
|
82
|
+
expect(browser.div(id: 'best_language').style).to eq 'color: red; text-decoration: underline; cursor: pointer;'
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it "returns an empty string if the element exists but the attribute doesn't" do
|
|
86
|
+
expect(browser.div(id: 'promo').style).to eq ''
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it 'raises UnknownObjectException if the element does not exist' do
|
|
90
|
+
expect { browser.div(id: 'no_such_id').style }.to raise_unknown_object_exception
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
describe '#text' do
|
|
95
|
+
it 'returns the text of the div' do
|
|
96
|
+
expect(browser.div(id: 'footer').text.strip).to eq 'This is a footer.'
|
|
97
|
+
expect(browser.div(title: 'Closing remarks').text.strip).to eq 'This is a footer.'
|
|
98
|
+
expect(browser.div(xpath: "//div[@id='footer']").text.strip).to eq 'This is a footer.'
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it 'returns an empty string if the element exists but contains no text' do
|
|
102
|
+
expect(browser.div(index: 0).text.strip).to eq ''
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it 'returns an empty string if the div is hidden',
|
|
106
|
+
except: {browser: :safari, reason: 'Safari is not filtering out hidden text'} do
|
|
107
|
+
expect(browser.div(id: 'hidden').text).to eq ''
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
it 'raises UnknownObjectException if the element does not exist' do
|
|
111
|
+
expect { browser.div(id: 'no_such_id').text }.to raise_unknown_object_exception
|
|
112
|
+
expect { browser.div(title: 'no_such_title').text }.to raise_unknown_object_exception
|
|
113
|
+
expect { browser.div(index: 1337).text }.to raise_unknown_object_exception
|
|
114
|
+
expect { browser.div(xpath: "//div[@id='no_such_id']").text }.to raise_unknown_object_exception
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
describe 'custom methods' do
|
|
119
|
+
it 'returns the custom attribute if the element exists' do
|
|
120
|
+
expect(browser.div(custom_attribute: 'custom').attribute_value('custom-attribute')).to eq 'custom'
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
describe '#respond_to?' do
|
|
125
|
+
it 'returns true for all attribute methods' do
|
|
126
|
+
expect(browser.div(index: 0)).to respond_to(:class_name)
|
|
127
|
+
expect(browser.div(index: 0)).to respond_to(:id)
|
|
128
|
+
expect(browser.div(index: 0)).to respond_to(:style)
|
|
129
|
+
expect(browser.div(index: 0)).to respond_to(:text)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Manipulation methods
|
|
134
|
+
describe '#click' do
|
|
135
|
+
it 'fires events when clicked' do
|
|
136
|
+
expect(browser.div(id: 'best_language').text).not_to eq 'Ruby!'
|
|
137
|
+
|
|
138
|
+
div = browser.div(id: 'best_language')
|
|
139
|
+
div.scroll.to
|
|
140
|
+
div.click
|
|
141
|
+
expect(browser.div(id: 'best_language').text).to eq 'Ruby!'
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
it 'raises UnknownObjectException if the element does not exist' do
|
|
145
|
+
expect { browser.div(id: 'no_such_id').click }.to raise_unknown_object_exception
|
|
146
|
+
expect { browser.div(title: 'no_such_title').click }.to raise_unknown_object_exception
|
|
147
|
+
expect { browser.div(index: 1337).click }.to raise_unknown_object_exception
|
|
148
|
+
expect { browser.div(xpath: "//div[@id='no_such_id']").click }.to raise_unknown_object_exception
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
it 'includes custom message if element with a custom attribute does not exist' do
|
|
152
|
+
message = /Watir treated \["custom_attribute"\] as a non-HTML compliant attribute, ensure that was intended/
|
|
153
|
+
expect { browser.div(custom_attribute: 'not_there').click }.to raise_unknown_object_exception(message)
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
describe '#click!' do
|
|
158
|
+
it 'fires events when clicked' do
|
|
159
|
+
expect(browser.div(id: 'best_language').text).not_to eq 'Ruby!'
|
|
160
|
+
browser.div(id: 'best_language').click!
|
|
161
|
+
expect(browser.div(id: 'best_language').text).to eq 'Ruby!'
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
it 'raises UnknownObjectException if the element does not exist' do
|
|
165
|
+
expect { browser.div(id: 'no_such_id').click! }.to raise_unknown_object_exception
|
|
166
|
+
expect { browser.div(title: 'no_such_title').click! }.to raise_unknown_object_exception
|
|
167
|
+
expect { browser.div(index: 1337).click! }.to raise_unknown_object_exception
|
|
168
|
+
expect { browser.div(xpath: "//div[@id='no_such_id']").click! }.to raise_unknown_object_exception
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
describe '#double_click',
|
|
173
|
+
except: {browser: :safari, reason: 'command correctly received, but action not taken'} do
|
|
174
|
+
it 'fires the ondblclick event' do
|
|
175
|
+
div = browser.div(id: 'html_test')
|
|
176
|
+
div.double_click
|
|
177
|
+
expect(messages).to include('double clicked')
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
it 'fires the ondblclick event with specified scroll position' do
|
|
181
|
+
div = browser.div(id: 'html_test')
|
|
182
|
+
div.double_click(scroll_to: :center)
|
|
183
|
+
expect(messages).to include('double clicked')
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
describe '#double_click!' do
|
|
188
|
+
it 'fires the ondblclick event' do
|
|
189
|
+
browser.div(id: 'html_test').double_click!
|
|
190
|
+
expect(messages).to include('double clicked')
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
describe '#right_click' do
|
|
195
|
+
it 'fires the oncontextmenu event' do
|
|
196
|
+
browser.goto(WatirSpec.url_for('right_click.html'))
|
|
197
|
+
browser.div(id: 'click').right_click
|
|
198
|
+
expect(messages.first).to eq 'right-clicked'
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
it 'accepts modifiers', except: {browser: :ie} do
|
|
202
|
+
browser.goto(WatirSpec.url_for('right_click.html'))
|
|
203
|
+
browser.div(id: 'click-logger').right_click(:control, :alt)
|
|
204
|
+
expect(event_log.first).to eq('control=true alt=true')
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
it 'accepts modifiers with scroll position', except: {browser: :ie} do
|
|
208
|
+
browser.goto(WatirSpec.url_for('right_click.html'))
|
|
209
|
+
browser.div(id: 'click-logger').right_click(:control, :alt, scroll_to: :center)
|
|
210
|
+
expect(event_log.first).to eq('control=true alt=true')
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
it 'scrolls' do
|
|
214
|
+
expect {
|
|
215
|
+
browser.del(class: 'footer').double_click
|
|
216
|
+
}.not_to raise_exception
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
describe '#html' do
|
|
221
|
+
it 'returns the HTML of the element' do
|
|
222
|
+
html = browser.div(id: 'footer').html.downcase
|
|
223
|
+
expect(html).to include('id="footer"')
|
|
224
|
+
expect(html).to include('title="closing remarks"')
|
|
225
|
+
expect(html).to include('class="profile"')
|
|
226
|
+
|
|
227
|
+
expect(html).not_to include('<div id="content">')
|
|
228
|
+
expect(html).not_to include('</body>')
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe DivCollection 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.divs(id: 'header').to_a).to eq [browser.div(id: 'header')]
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe '#length' do
|
|
18
|
+
it 'returns the number of divs' do
|
|
19
|
+
expect(browser.divs.length).to eq 20
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe '#[]' do
|
|
24
|
+
it 'returns the div at the given index' do
|
|
25
|
+
expect(browser.divs[1].id).to eq 'outer_container'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'returns an array of divs with a given range of positive values' do
|
|
29
|
+
divs = browser.divs[2..4]
|
|
30
|
+
ids = divs.map(&:id)
|
|
31
|
+
expect(ids).to eq %w[header promo content]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'returns an array of divs with a given range including negative values' do
|
|
35
|
+
divs = browser.divs[11..-7]
|
|
36
|
+
ids = divs.map(&:id)
|
|
37
|
+
expect(ids).to eq %w[messages ins_tag_test del_tag_test]
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe '#each' do
|
|
42
|
+
it 'iterates through divs correctly' do
|
|
43
|
+
count = 0
|
|
44
|
+
|
|
45
|
+
browser.divs.each_with_index do |d, index|
|
|
46
|
+
expect(d.id).to eq browser.div(index: index).id
|
|
47
|
+
expect(d.class_name).to eq browser.div(index: index).class_name
|
|
48
|
+
|
|
49
|
+
count += 1
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
expect(count).to be > 0
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|