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,132 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe ElementCollection do
|
|
7
|
+
it 'returns inner elements of parent element having different html tag' do
|
|
8
|
+
browser.goto(WatirSpec.url_for('collections.html'))
|
|
9
|
+
expect(browser.span(id: 'a_span').divs.size).to eq 2
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it 'returns inner elements of parent element having same html tag' do
|
|
13
|
+
browser.goto(WatirSpec.url_for('collections.html'))
|
|
14
|
+
expect(browser.span(id: 'a_span').spans.size).to eq 2
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'returns correct subtype of elements' do
|
|
18
|
+
browser.goto(WatirSpec.url_for('collections.html'))
|
|
19
|
+
collection = browser.span(id: 'a_span').spans
|
|
20
|
+
expect(collection.all?(Span)).to be true
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'returns correct subtype of elements without tag_name' do
|
|
24
|
+
browser.goto(WatirSpec.url_for('collections.html'))
|
|
25
|
+
collection = browser.span(id: 'a_span').elements
|
|
26
|
+
collection.locate
|
|
27
|
+
expect(collection.first).to be_a Div
|
|
28
|
+
expect(collection.last).to be_a Span
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'can contain more than one type of element' do
|
|
32
|
+
browser.goto(WatirSpec.url_for('nested_elements.html'))
|
|
33
|
+
collection = browser.div(id: 'parent').children
|
|
34
|
+
expect(collection.any?(Span)).to be true
|
|
35
|
+
expect(collection.any?(Div)).to be true
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'relocates the same element' do
|
|
39
|
+
browser.goto(WatirSpec.url_for('nested_elements.html'))
|
|
40
|
+
collection = browser.div(id: 'parent').children
|
|
41
|
+
tag = collection[3].tag_name
|
|
42
|
+
browser.refresh
|
|
43
|
+
expect(collection[3].tag_name).to eq tag
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'returns value for #empty?' do
|
|
47
|
+
browser.goto(WatirSpec.url_for('collections.html'))
|
|
48
|
+
expect(browser.span(id: 'a_span').options.empty?).to be true
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it 'returns value for #any?' do
|
|
52
|
+
browser.goto(WatirSpec.url_for('collections.html'))
|
|
53
|
+
expect(browser.span(id: 'a_span').spans.any?).to be true
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'locates elements' do
|
|
57
|
+
browser.goto(WatirSpec.url_for('collections.html'))
|
|
58
|
+
spans = browser.span(id: 'a_span').spans
|
|
59
|
+
allow(spans).to receive(:elements).and_return([])
|
|
60
|
+
expect(spans.locate).to be_a SpanCollection
|
|
61
|
+
expect(spans).to have_received(:elements).once
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'lazy loads collections referenced with #[]' do
|
|
65
|
+
browser.goto(WatirSpec.url_for('collections.html'))
|
|
66
|
+
allow(browser.wd).to receive(:find_elements)
|
|
67
|
+
browser.spans[3]
|
|
68
|
+
expect(browser.wd).not_to have_received(:find_elements)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it 'does not relocate collections when previously evaluated' do
|
|
72
|
+
browser.goto(WatirSpec.url_for('collections.html'))
|
|
73
|
+
elements = browser.spans.tap(&:to_a)
|
|
74
|
+
|
|
75
|
+
allow(browser.wd).to receive(:find_elements)
|
|
76
|
+
elements[1].id
|
|
77
|
+
expect(browser.wd).not_to have_received(:find_elements)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it 'relocates cached elements that go stale' do
|
|
81
|
+
browser.goto(WatirSpec.url_for('collections.html'))
|
|
82
|
+
elements = browser.spans.tap(&:to_a)
|
|
83
|
+
|
|
84
|
+
browser.refresh
|
|
85
|
+
expect(elements[1]).to be_stale
|
|
86
|
+
expect { elements[1] }.not_to raise_unknown_object_exception
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it 'does not retrieve tag_name on elements when specifying tag_name' do
|
|
90
|
+
browser.goto(WatirSpec.url_for('collections.html'))
|
|
91
|
+
collection = browser.span(id: 'a_span').spans
|
|
92
|
+
|
|
93
|
+
expect_any_instance_of(Selenium::WebDriver::Element).not_to receive(:tag_name)
|
|
94
|
+
collection.locate
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it 'does not retrieve tag_name on elements without specifying tag_name' do
|
|
98
|
+
browser.goto(WatirSpec.url_for('collections.html'))
|
|
99
|
+
collection = browser.span(id: 'a_span').elements
|
|
100
|
+
|
|
101
|
+
expect_any_instance_of(Selenium::WebDriver::Element).not_to receive(:tag_name)
|
|
102
|
+
collection.locate
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it 'does not execute_script to retrieve tag_names when specifying tag_name' do
|
|
106
|
+
browser.goto(WatirSpec.url_for('collections.html'))
|
|
107
|
+
collection = browser.span(id: 'a_span').spans
|
|
108
|
+
|
|
109
|
+
allow(browser.wd).to receive(:execute_script)
|
|
110
|
+
collection.locate
|
|
111
|
+
expect(browser.wd).not_to have_received(:execute_script)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it 'returns correct containers without specifying tag_name' do
|
|
115
|
+
browser.goto(WatirSpec.url_for('collections.html'))
|
|
116
|
+
elements = browser.span(id: 'a_span').elements.to_a
|
|
117
|
+
expect(elements[0]).to be_a(Div)
|
|
118
|
+
expect(elements[-1]).to be_a(Span)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it 'Raises Exception if any element in collection continues to go stale' do
|
|
122
|
+
browser.goto(WatirSpec.url_for('collections.html'))
|
|
123
|
+
|
|
124
|
+
stale_exception = Selenium::WebDriver::Error::StaleElementReferenceError
|
|
125
|
+
allow(browser.wd).to receive(:execute_script).and_raise(stale_exception)
|
|
126
|
+
|
|
127
|
+
msg = 'Unable to locate element collection from {:xpath=>".//span"} due to changing page'
|
|
128
|
+
expect { browser.span.elements(xpath: './/span').to_a }.to raise_exception Exception::LocatorException, msg
|
|
129
|
+
expect(browser.wd).to have_received(:execute_script).exactly(3).times
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe DateField do
|
|
7
|
+
before do
|
|
8
|
+
browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Exists method
|
|
12
|
+
describe '#exists?' do
|
|
13
|
+
it 'returns true if the element exists' do
|
|
14
|
+
expect(browser.date_field(id: 'html5_date')).to exist
|
|
15
|
+
expect(browser.date_field(id: /html5_date/)).to exist
|
|
16
|
+
expect(browser.date_field(name: 'html5_date')).to exist
|
|
17
|
+
expect(browser.date_field(name: /html5_date/)).to exist
|
|
18
|
+
expect(browser.date_field(text: '')).to exist
|
|
19
|
+
expect(browser.date_field(text: //)).to exist
|
|
20
|
+
expect(browser.date_field(index: 0)).to exist
|
|
21
|
+
expect(browser.date_field(label: 'HTML5 Date')).to exist
|
|
22
|
+
expect(browser.date_field(label: /Date$/)).to exist
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'returns true when using xpath',
|
|
26
|
+
except: {browser: :ie, reason: 'Date type not recognized'} do
|
|
27
|
+
expect(browser.date_field(xpath: "//input[@id='html5_date']")).to exist
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'returns the date field if given no args' do
|
|
31
|
+
expect(browser.date_field).to exist
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'respects date fields types',
|
|
35
|
+
except: {browser: :ie, reason: 'Date type not recognized'} do
|
|
36
|
+
expect(browser.date_field.type).to eq('date')
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'returns false if the element does not exist' do
|
|
40
|
+
expect(browser.date_field(id: 'no_such_id')).not_to exist
|
|
41
|
+
expect(browser.date_field(id: /no_such_id/)).not_to exist
|
|
42
|
+
expect(browser.date_field(name: 'no_such_name')).not_to exist
|
|
43
|
+
expect(browser.date_field(name: /no_such_name/)).not_to exist
|
|
44
|
+
expect(browser.date_field(value: 'no_such_value')).not_to exist
|
|
45
|
+
expect(browser.date_field(value: /no_such_value/)).not_to exist
|
|
46
|
+
expect(browser.date_field(text: 'no_such_text')).not_to exist
|
|
47
|
+
expect(browser.date_field(text: /no_such_text/)).not_to exist
|
|
48
|
+
expect(browser.date_field(class: 'no_such_class')).not_to exist
|
|
49
|
+
expect(browser.date_field(class: /no_such_class/)).not_to exist
|
|
50
|
+
expect(browser.date_field(index: 1337)).not_to exist
|
|
51
|
+
expect(browser.date_field(xpath: "//input[@id='no_such_id']")).not_to exist
|
|
52
|
+
expect(browser.date_field(label: 'bad label')).not_to exist
|
|
53
|
+
expect(browser.date_field(label: /bad label/)).not_to exist
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "raises TypeError when 'what' argument is invalid" do
|
|
57
|
+
expect { browser.date_field(id: 3.14).exists? }.to raise_error(TypeError)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Attribute methods
|
|
62
|
+
describe '#id' do
|
|
63
|
+
it 'returns the id attribute if the date field exists' do
|
|
64
|
+
expect(browser.date_field(name: 'html5_date').id).to eq 'html5_date'
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "raises UnknownObjectException if the date field doesn't exist" do
|
|
68
|
+
expect { browser.date_field(index: 1337).id }.to raise_unknown_object_exception
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
describe '#name' do
|
|
73
|
+
it 'returns the name attribute if the date field exists' do
|
|
74
|
+
expect(browser.date_field(id: 'html5_date').name).to eq 'html5_date'
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "raises UnknownObjectException if the date field doesn't exist" do
|
|
78
|
+
expect { browser.date_field(index: 1337).name }.to raise_unknown_object_exception
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
describe '#type' do
|
|
83
|
+
it 'returns the type attribute if the date field exists',
|
|
84
|
+
except: {browser: :ie, reason: 'Date type not recognized'} do
|
|
85
|
+
expect(browser.date_field(id: 'html5_date').type).to eq 'date'
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it "raises UnknownObjectException if the date field doesn't exist" do
|
|
89
|
+
expect { browser.date_field(index: 1337).type }.to raise_unknown_object_exception
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
describe '#value' do
|
|
94
|
+
it 'returns the value attribute if the date field exists' do
|
|
95
|
+
expect(browser.date_field(id: 'html5_date').value).to eq ''
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it "raises UnknownObjectException if the date field doesn't exist" do
|
|
99
|
+
expect { browser.date_field(index: 1337).value }.to raise_unknown_object_exception
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
describe '#respond_to?' do
|
|
104
|
+
it 'returns true for all attribute methods' do
|
|
105
|
+
expect(browser.date_field).to respond_to(:class_name)
|
|
106
|
+
expect(browser.date_field).to respond_to(:id)
|
|
107
|
+
expect(browser.date_field).to respond_to(:name)
|
|
108
|
+
expect(browser.date_field).to respond_to(:title)
|
|
109
|
+
expect(browser.date_field).to respond_to(:type)
|
|
110
|
+
expect(browser.date_field).to respond_to(:value)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Access methods
|
|
115
|
+
describe '#enabled?' do
|
|
116
|
+
it 'returns true for enabled date fields' do
|
|
117
|
+
expect(browser.browser.date_field(id: 'html5_date')).to be_enabled
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it "raises UnknownObjectException if the date field doesn't exist" do
|
|
121
|
+
expect { browser.browser.date_field(id: 'no_such_id').enabled? }.to raise_unknown_object_exception
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Manipulation methods
|
|
126
|
+
describe '#value=' do
|
|
127
|
+
it 'sets the value of the element to a Date' do
|
|
128
|
+
date = browser.date_field(id: 'html5_date')
|
|
129
|
+
date.value = Date.today
|
|
130
|
+
expect(Date.parse(date.value)).to eq Date.today
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
it 'sets the value of the element to a Time' do
|
|
134
|
+
date = browser.date_field(id: 'html5_date')
|
|
135
|
+
date.value = ::Time.now
|
|
136
|
+
expect(Date.parse(date.value)).to eq Date.today
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
it 'sets the value of the element to an arbitrary class that responds to #strftime' do
|
|
140
|
+
instance_like_date = ::Object.new
|
|
141
|
+
def instance_like_date.strftime(_)
|
|
142
|
+
'2022-10-11'
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
date = browser.date_field(id: 'html5_date')
|
|
146
|
+
date.value = instance_like_date
|
|
147
|
+
expect(date.value).to eq '2022-10-11'
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
it 'sets the value when accessed through the enclosing Form' do
|
|
151
|
+
date_field = browser.form(id: 'new_user').date_field(id: 'html5_date')
|
|
152
|
+
date_field.value = Date.today
|
|
153
|
+
expect(Date.parse(date_field.value)).to eq Date.today
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
it "raises UnknownObjectException if the date field doesn't exist" do
|
|
157
|
+
expect { browser.date_field(id: 'no_such_id').value = Date.today }.to raise_unknown_object_exception
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
it 'raises ArgumentError if using non-Date parameter' do
|
|
161
|
+
expect { browser.date_field(id: 'no_such_id').value = 'foo' }.to raise_exception ArgumentError
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
describe '#set!' do
|
|
166
|
+
it 'sets the value of the element' do
|
|
167
|
+
date = browser.date_field(id: 'html5_date')
|
|
168
|
+
date.set!(Date.today)
|
|
169
|
+
expect(Date.parse(date.value)).to eq Date.today
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
it 'sets the value when accessed through the enclosing Form' do
|
|
173
|
+
date_field = browser.form(id: 'new_user').date_field(id: 'html5_date')
|
|
174
|
+
date_field.set!(Date.today)
|
|
175
|
+
expect(Date.parse(date_field.value)).to eq Date.today
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
it 'raises ArgumentError when no arguments are provided' do
|
|
179
|
+
expect { browser.date_field(id: 'html5_date').set! }.to raise_exception ArgumentError
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
it "raises UnknownObjectException if the date field doesn't exist" do
|
|
183
|
+
expect { browser.date_field(id: 'no_such_id').set!(Date.today) }.to raise_unknown_object_exception
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
describe '#set' do
|
|
188
|
+
it 'sets the value of the element' do
|
|
189
|
+
date = browser.date_field(id: 'html5_date')
|
|
190
|
+
date.set(Date.today)
|
|
191
|
+
expect(Date.parse(date.value)).to eq Date.today
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
it 'sets the value when accessed through the enclosing Form' do
|
|
195
|
+
date_field = browser.form(id: 'new_user').date_field(id: 'html5_date')
|
|
196
|
+
date_field.set(Date.today)
|
|
197
|
+
expect(Date.parse(date_field.value)).to eq Date.today
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
it 'raises ArgumentError when no arguments are provided' do
|
|
201
|
+
expect { browser.date_field(id: 'html5_date').set }.to raise_exception ArgumentError
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
it "raises UnknownObjectException if the date field doesn't exist" do
|
|
205
|
+
expect { browser.date_field(id: 'no_such_id').set(Date.today) }.to raise_unknown_object_exception
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe DateFieldCollection 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.date_fields(name: 'html5_date').to_a).to eq [browser.date_field(name: 'html5_date')]
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe '#length' do
|
|
18
|
+
it 'returns the number of date_fields' do
|
|
19
|
+
expect(browser.date_fields.length).to eq 1
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe '#[]' do
|
|
24
|
+
it 'returns the date_field at the given index' do
|
|
25
|
+
expect(browser.date_fields[0].id).to eq 'html5_date'
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe '#each' do
|
|
30
|
+
it 'iterates through date_fields correctly' do
|
|
31
|
+
count = 0
|
|
32
|
+
|
|
33
|
+
browser.date_fields.each_with_index do |c, index|
|
|
34
|
+
expect(c).to be_instance_of(DateField)
|
|
35
|
+
expect(c.name).to eq browser.date_field(index: index).name
|
|
36
|
+
expect(c.id).to eq browser.date_field(index: index).id
|
|
37
|
+
expect(c.value).to eq browser.date_field(index: index).value
|
|
38
|
+
|
|
39
|
+
count += 1
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
expect(count).to be > 0
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe DateTimeField do
|
|
7
|
+
before do
|
|
8
|
+
browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Exists method
|
|
12
|
+
describe '#exists?' do
|
|
13
|
+
it 'returns true if the element exists' do
|
|
14
|
+
expect(browser.date_time_field(id: 'html5_datetime-local')).to exist
|
|
15
|
+
expect(browser.date_time_field(id: /html5_datetime-local/)).to exist
|
|
16
|
+
expect(browser.date_time_field(name: 'html5_datetime-local')).to exist
|
|
17
|
+
expect(browser.date_time_field(name: /html5_datetime-local/)).to exist
|
|
18
|
+
expect(browser.date_time_field(text: '')).to exist
|
|
19
|
+
expect(browser.date_time_field(text: //)).to exist
|
|
20
|
+
expect(browser.date_time_field(index: 0)).to exist
|
|
21
|
+
expect(browser.date_time_field(label: 'HTML5 Datetime Local')).to exist
|
|
22
|
+
expect(browser.date_time_field(label: /Local$/)).to exist
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'returns true if the datetime-local element exists',
|
|
26
|
+
except: {browser: :ie, reason: 'Date type not recognized'} do
|
|
27
|
+
expect(browser.date_time_field(xpath: "//input[@id='html5_datetime-local']")).to exist
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'returns the date-time field if given no args' do
|
|
31
|
+
expect(browser.date_time_field).to exist
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'respects date-time fields types',
|
|
35
|
+
except: {browser: :ie, reason: 'Date type not recognized'} do
|
|
36
|
+
expect(browser.date_time_field.type).to eq('datetime-local')
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'returns false if the element does not exist' do
|
|
40
|
+
expect(browser.date_time_field(id: 'no_such_id')).not_to exist
|
|
41
|
+
expect(browser.date_time_field(id: /no_such_id/)).not_to exist
|
|
42
|
+
expect(browser.date_time_field(name: 'no_such_name')).not_to exist
|
|
43
|
+
expect(browser.date_time_field(name: /no_such_name/)).not_to exist
|
|
44
|
+
expect(browser.date_time_field(value: 'no_such_value')).not_to exist
|
|
45
|
+
expect(browser.date_time_field(value: /no_such_value/)).not_to exist
|
|
46
|
+
expect(browser.date_time_field(text: 'no_such_text')).not_to exist
|
|
47
|
+
expect(browser.date_time_field(text: /no_such_text/)).not_to exist
|
|
48
|
+
expect(browser.date_time_field(class: 'no_such_class')).not_to exist
|
|
49
|
+
expect(browser.date_time_field(class: /no_such_class/)).not_to exist
|
|
50
|
+
expect(browser.date_time_field(index: 1337)).not_to exist
|
|
51
|
+
expect(browser.date_time_field(xpath: "//input[@id='no_such_id']")).not_to exist
|
|
52
|
+
expect(browser.date_time_field(label: 'bad label')).not_to exist
|
|
53
|
+
expect(browser.date_time_field(label: /bad label/)).not_to exist
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "raises TypeError when 'what' argument is invalid" do
|
|
57
|
+
expect { browser.date_time_field(id: 3.14).exists? }.to raise_error(TypeError)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Attribute methods
|
|
62
|
+
describe '#id' do
|
|
63
|
+
it 'returns the id attribute if the date-time field exists' do
|
|
64
|
+
expect(browser.date_time_field(name: 'html5_datetime-local').id).to eq 'html5_datetime-local'
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "raises UnknownObjectException if the date-time field doesn't exist" do
|
|
68
|
+
expect { browser.date_time_field(index: 1337).id }.to raise_unknown_object_exception
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
describe '#name' do
|
|
73
|
+
it 'returns the name attribute if the date-time field exists' do
|
|
74
|
+
expect(browser.date_time_field(id: 'html5_datetime-local').name).to eq 'html5_datetime-local'
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "raises UnknownObjectException if the date-time field doesn't exist" do
|
|
78
|
+
expect { browser.date_time_field(index: 1337).name }.to raise_unknown_object_exception
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
describe '#type' do
|
|
83
|
+
it 'returns the type attribute if the date-time field exists',
|
|
84
|
+
except: {browser: :ie, reason: 'Date type not recognized'} do
|
|
85
|
+
expect(browser.date_time_field(id: 'html5_datetime-local').type).to eq 'datetime-local'
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it "raises UnknownObjectException if the date-time field doesn't exist" do
|
|
89
|
+
expect { browser.date_time_field(index: 1337).type }.to raise_unknown_object_exception
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
describe '#value' do
|
|
94
|
+
it 'returns the value attribute if the date-time field exists' do
|
|
95
|
+
expect(browser.date_time_field(id: 'html5_datetime-local').value).to eq ''
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it "raises UnknownObjectException if the date-time field doesn't exist" do
|
|
99
|
+
expect { browser.date_time_field(index: 1337).value }.to raise_unknown_object_exception
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
describe '#respond_to?' do
|
|
104
|
+
it 'returns true for all attribute methods' do
|
|
105
|
+
expect(browser.date_time_field).to respond_to(:class_name)
|
|
106
|
+
expect(browser.date_time_field).to respond_to(:id)
|
|
107
|
+
expect(browser.date_time_field).to respond_to(:name)
|
|
108
|
+
expect(browser.date_time_field).to respond_to(:title)
|
|
109
|
+
expect(browser.date_time_field).to respond_to(:type)
|
|
110
|
+
expect(browser.date_time_field).to respond_to(:value)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Access methods
|
|
115
|
+
describe '#enabled?' do
|
|
116
|
+
it 'returns true for enabled date-time fields' do
|
|
117
|
+
expect(browser.browser.date_time_field(id: 'html5_datetime-local')).to be_enabled
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it "raises UnknownObjectException if the date-time field doesn't exist" do
|
|
121
|
+
expect { browser.browser.date_time_field(id: 'no_such_id').enabled? }.to raise_unknown_object_exception
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Manipulation methods
|
|
126
|
+
describe '#value=' do
|
|
127
|
+
it 'sets the value of the element to a Time' do
|
|
128
|
+
date_time = ::Time.now
|
|
129
|
+
date_time_field = browser.date_time_field(id: 'html5_datetime-local')
|
|
130
|
+
date_time_field.value = date_time
|
|
131
|
+
expect(::Time.parse(date_time_field.value).strftime('%Y-%m-%dT%H:%M'))
|
|
132
|
+
.to eq date_time.strftime('%Y-%m-%dT%H:%M')
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
it 'sets the value of the element to a DateTime' do
|
|
136
|
+
date_time = DateTime.now
|
|
137
|
+
date_time_field = browser.date_time_field(id: 'html5_datetime-local')
|
|
138
|
+
date_time_field.value = date_time
|
|
139
|
+
expect(::Time.parse(date_time_field.value).strftime('%Y-%m-%dT%H:%M'))
|
|
140
|
+
.to eq date_time.strftime('%Y-%m-%dT%H:%M')
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
it 'sets the value of the element to an arbitrary class that responds to #strftime' do
|
|
144
|
+
date_time = ::Object.new
|
|
145
|
+
def date_time.strftime(_)
|
|
146
|
+
'2022-10-11T12:13'
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
date_time_field = browser.date_time_field(id: 'html5_datetime-local')
|
|
150
|
+
date_time_field.value = date_time
|
|
151
|
+
expect(date_time_field.value).to eq '2022-10-11T12:13'
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
it 'sets the value when accessed through the enclosing Form' do
|
|
155
|
+
date_time = ::Time.now
|
|
156
|
+
date_time_field = browser.form(id: 'new_user').date_time_field(id: 'html5_datetime-local')
|
|
157
|
+
date_time_field.value = date_time
|
|
158
|
+
expect(::Time.parse(date_time_field.value).strftime('%Y-%m-%dT%H:%M'))
|
|
159
|
+
.to eq date_time.strftime('%Y-%m-%dT%H:%M')
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
it "raises UnknownObjectException if the date-time field doesn't exist" do
|
|
163
|
+
expect { browser.date_time_field(id: 'no_such_id').value = ::Time.now }.to raise_unknown_object_exception
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
it 'raises ArgumentError if using non-Date parameter' do
|
|
167
|
+
expect { browser.date_time_field(id: 'no_such_id').value = 'foo' }.to raise_exception ArgumentError
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
describe '#set!' do
|
|
172
|
+
it 'sets the value of the element' do
|
|
173
|
+
date_time = ::Time.now
|
|
174
|
+
date_time_field = browser.date_time_field(id: 'html5_datetime-local')
|
|
175
|
+
date_time_field.set! date_time
|
|
176
|
+
expect(::Time.parse(date_time_field.value).strftime('%Y-%m-%dT%H:%M'))
|
|
177
|
+
.to eq date_time.strftime('%Y-%m-%dT%H:%M')
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
it 'sets the value when accessed through the enclosing Form' do
|
|
181
|
+
date_time = ::Time.now
|
|
182
|
+
date_time_field = browser.form(id: 'new_user').date_time_field(id: 'html5_datetime-local')
|
|
183
|
+
date_time_field.set! date_time
|
|
184
|
+
expect(::Time.parse(date_time_field.value).strftime('%Y-%m-%dT%H:%M'))
|
|
185
|
+
.to eq date_time.strftime('%Y-%m-%dT%H:%M')
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
it 'raises ArgumentError when no arguments are provided' do
|
|
189
|
+
expect { browser.date_time_field(id: 'html5_datetime-local').set! }.to raise_exception ArgumentError
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
it "raises UnknownObjectException if the date-time field doesn't exist" do
|
|
193
|
+
expect { browser.date_time_field(id: 'no_such_id').set!(::Time.now) }.to raise_unknown_object_exception
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
describe '#set' do
|
|
198
|
+
it 'sets the value of the element' do
|
|
199
|
+
date_time = ::Time.now
|
|
200
|
+
date_time_field = browser.date_time_field(id: 'html5_datetime-local')
|
|
201
|
+
date_time_field.set(date_time)
|
|
202
|
+
expect(::Time.parse(date_time_field.value).strftime('%Y-%m-%dT%H:%M'))
|
|
203
|
+
.to eq date_time.strftime('%Y-%m-%dT%H:%M')
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
it 'sets the value when accessed through the enclosing Form' do
|
|
207
|
+
date_time = ::Time.now
|
|
208
|
+
date_time_field = browser.form(id: 'new_user').date_time_field(id: 'html5_datetime-local')
|
|
209
|
+
date_time_field.set date_time
|
|
210
|
+
expect(::Time.parse(date_time_field.value).strftime('%Y-%m-%dT%H:%M'))
|
|
211
|
+
.to eq date_time.strftime('%Y-%m-%dT%H:%M')
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
it 'raises ArgumentError when no arguments are provided' do
|
|
215
|
+
expect { browser.date_time_field(id: 'html5_datetime-local').set }.to raise_exception ArgumentError
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
it "raises UnknownObjectException if the date-time field doesn't exist" do
|
|
219
|
+
expect { browser.date_time_field(id: 'no_such_id').set(::Time.now) }.to raise_unknown_object_exception
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe DateTimeFieldCollection 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
|
+
list = [browser.date_time_field(name: 'html5_datetime-local')]
|
|
14
|
+
expect(browser.date_time_fields(name: 'html5_datetime-local').to_a).to eq list
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe '#length' do
|
|
19
|
+
it 'returns the number of date_time_fields' do
|
|
20
|
+
expect(browser.date_time_fields.length).to eq 1
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
describe '#[]' do
|
|
25
|
+
it 'returns the date_time_field at the given index' do
|
|
26
|
+
expect(browser.date_time_fields[0].id).to eq 'html5_datetime-local'
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe '#each' do
|
|
31
|
+
it 'iterates through date_time_fields correctly' do
|
|
32
|
+
count = 0
|
|
33
|
+
|
|
34
|
+
browser.date_time_fields.each_with_index do |c, index|
|
|
35
|
+
expect(c).to be_instance_of(DateTimeField)
|
|
36
|
+
expect(c.name).to eq browser.date_time_field(index: index).name
|
|
37
|
+
expect(c.id).to eq browser.date_time_field(index: index).id
|
|
38
|
+
expect(c.value).to eq browser.date_time_field(index: index).value
|
|
39
|
+
|
|
40
|
+
count += 1
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
expect(count).to be > 0
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|