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,113 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe Option do
|
|
7
|
+
before do
|
|
8
|
+
browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe '#exists?' do
|
|
12
|
+
it 'returns true if the element exists (page context)' do
|
|
13
|
+
expect(browser.option(id: 'nor')).to exist
|
|
14
|
+
expect(browser.option(id: /nor/)).to exist
|
|
15
|
+
expect(browser.option(value: '2')).to exist
|
|
16
|
+
expect(browser.option(value: /2/)).to exist
|
|
17
|
+
expect(browser.option(text: 'Norway')).to exist
|
|
18
|
+
expect(browser.option(text: /Norway/)).to exist
|
|
19
|
+
expect(browser.option(class: 'scandinavia')).to exist
|
|
20
|
+
expect(browser.option(index: 1)).to exist
|
|
21
|
+
expect(browser.option(xpath: "//option[@id='nor']")).to exist
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'returns the first option if given no args' do
|
|
25
|
+
expect(browser.option).to exist
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'returns true if the element exists (select_list context)' do
|
|
29
|
+
expect(browser.select_list(name: 'new_user_country').option(id: 'nor')).to exist
|
|
30
|
+
expect(browser.select_list(name: 'new_user_country').option(id: /nor/)).to exist
|
|
31
|
+
expect(browser.select_list(name: 'new_user_country').option(value: '2')).to exist
|
|
32
|
+
expect(browser.select_list(name: 'new_user_country').option(value: /2/)).to exist
|
|
33
|
+
expect(browser.select_list(name: 'new_user_country').option(text: 'Norway')).to exist
|
|
34
|
+
expect(browser.select_list(name: 'new_user_country').option(text: /Norway/)).to exist
|
|
35
|
+
expect(browser.select_list(name: 'new_user_country').option(class: 'scandinavia')).to exist
|
|
36
|
+
expect(browser.select_list(name: 'new_user_country').option(index: 1)).to exist
|
|
37
|
+
expect(browser.select_list(name: 'new_user_country').option(xpath: "//option[@id='nor']")).to exist
|
|
38
|
+
expect(browser.select_list(name: 'new_user_country').option(label: 'Germany')).to exist
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'returns false if the element does not exist (page context)' do
|
|
42
|
+
expect(browser.option(id: 'no_such_id')).not_to exist
|
|
43
|
+
expect(browser.option(id: /no_such_id/)).not_to exist
|
|
44
|
+
expect(browser.option(value: 'no_such_value')).not_to exist
|
|
45
|
+
expect(browser.option(value: /no_such_value/)).not_to exist
|
|
46
|
+
expect(browser.option(text: 'no_such_text')).not_to exist
|
|
47
|
+
expect(browser.option(text: /no_such_text/)).not_to exist
|
|
48
|
+
expect(browser.option(class: 'no_such_class')).not_to exist
|
|
49
|
+
expect(browser.option(index: 1337)).not_to exist
|
|
50
|
+
expect(browser.option(xpath: "//option[@id='no_such_id']")).not_to exist
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'returns false if the element does not exist (select_list context)' do
|
|
54
|
+
expect(browser.select_list(name: 'new_user_country').option(id: 'no_such_id')).not_to exist
|
|
55
|
+
expect(browser.select_list(name: 'new_user_country').option(id: /no_such_id/)).not_to exist
|
|
56
|
+
expect(browser.select_list(name: 'new_user_country').option(value: 'no_such_value')).not_to exist
|
|
57
|
+
expect(browser.select_list(name: 'new_user_country').option(value: /no_such_value/)).not_to exist
|
|
58
|
+
expect(browser.select_list(name: 'new_user_country').option(text: 'no_such_text')).not_to exist
|
|
59
|
+
expect(browser.select_list(name: 'new_user_country').option(text: /no_such_text/)).not_to exist
|
|
60
|
+
expect(browser.select_list(name: 'new_user_country').option(class: 'no_such_class')).not_to exist
|
|
61
|
+
expect(browser.select_list(name: 'new_user_country').option(index: 1337)).not_to exist
|
|
62
|
+
expect(browser.select_list(name: 'new_user_country').option(xpath: "//option[@id='no_such_id']")).not_to exist
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "raises TypeError when 'what' argument is invalid" do
|
|
66
|
+
expect { browser.option(id: 3.14).exists? }.to raise_error(TypeError)
|
|
67
|
+
expect { browser.select_list(name: 'new_user_country').option(id: 3.14).exists? }.to raise_error(TypeError)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
describe '#select' do
|
|
72
|
+
it 'selects the chosen option (page context)' do
|
|
73
|
+
browser.option(text: 'Denmark').select
|
|
74
|
+
expect(browser.select_list(name: 'new_user_country').selected_options.map(&:text)).to eq ['Denmark']
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it 'selects the chosen option (select_list context)' do
|
|
78
|
+
browser.select_list(name: 'new_user_country').option(text: 'Denmark').select
|
|
79
|
+
expect(browser.select_list(name: 'new_user_country').selected_options.map(&:text)).to eq ['Denmark']
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it 'selects the option when found by text (page context)' do
|
|
83
|
+
browser.option(text: 'Sweden').select
|
|
84
|
+
expect(browser.option(text: 'Sweden')).to be_selected
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it 'selects the option when found by text (select_list context)' do
|
|
88
|
+
browser.select_list(name: 'new_user_country').option(text: 'Sweden').select
|
|
89
|
+
expect(browser.select_list(name: 'new_user_country').option(text: 'Sweden')).to be_selected
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it 'raises UnknownObjectException if the option does not exist (page context)' do
|
|
93
|
+
expect { browser.option(text: 'no_such_text').select }.to raise_unknown_object_exception
|
|
94
|
+
expect { browser.option(text: /missing/).select }.to raise_unknown_object_exception
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it 'raises UnknownObjectException if the option does not exist (select_list context)' do
|
|
98
|
+
expect { browser.select_list(name: 'new_user_country').option(text: 'no_such_text').select }
|
|
99
|
+
.to raise_unknown_object_exception
|
|
100
|
+
expect { browser.select_list(name: 'new_user_country').option(text: /missing/).select }
|
|
101
|
+
.to raise_unknown_object_exception
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
describe '#respond_to?' do
|
|
106
|
+
it 'returns true for all attribute methods' do
|
|
107
|
+
expect(browser.select_list(name: 'new_user_country').option(text: 'Sweden')).to respond_to(:class_name)
|
|
108
|
+
expect(browser.select_list(name: 'new_user_country').option(text: 'Sweden')).to respond_to(:id)
|
|
109
|
+
expect(browser.select_list(name: 'new_user_country').option(text: 'Sweden')).to respond_to(:text)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe Paragraph 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 'p' exists" do
|
|
14
|
+
expect(browser.p(id: 'lead')).to exist
|
|
15
|
+
expect(browser.p(id: /lead/)).to exist
|
|
16
|
+
expect(browser.p(text: 'Dubito, ergo cogito, ergo sum.')).to exist
|
|
17
|
+
expect(browser.p(text: /Dubito, ergo cogito, ergo sum/)).to exist
|
|
18
|
+
expect(browser.p(class: 'lead')).to exist
|
|
19
|
+
expect(browser.p(class: /lead/)).to exist
|
|
20
|
+
expect(browser.p(index: 0)).to exist
|
|
21
|
+
expect(browser.p(xpath: "//p[@id='lead']")).to exist
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'returns the first p if given no args' do
|
|
25
|
+
expect(browser.p).to exist
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "returns false if the 'p' doesn't exist" do
|
|
29
|
+
expect(browser.p(id: 'no_such_id')).not_to exist
|
|
30
|
+
expect(browser.p(id: /no_such_id/)).not_to exist
|
|
31
|
+
expect(browser.p(text: 'no_such_text')).not_to exist
|
|
32
|
+
expect(browser.p(text: /no_such_text/)).not_to exist
|
|
33
|
+
expect(browser.p(class: 'no_such_class')).not_to exist
|
|
34
|
+
expect(browser.p(class: /no_such_class/)).not_to exist
|
|
35
|
+
expect(browser.p(index: 1337)).not_to exist
|
|
36
|
+
expect(browser.p(xpath: "//p[@id='no_such_id']")).not_to exist
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "raises TypeError when 'what' argument is invalid" do
|
|
40
|
+
expect { browser.p(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.p(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.p(index: 2).id).to eq ''
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "raises UnknownObjectException if the p doesn't exist" do
|
|
55
|
+
expect { browser.p(id: 'no_such_id').id }.to raise_unknown_object_exception
|
|
56
|
+
expect { browser.p(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.p(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.p(index: 2).title).to eq ''
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "raises UnknownObjectException if the p doesn't exist" do
|
|
70
|
+
expect { browser.p(id: 'no_such_id').title }.to raise_unknown_object_exception
|
|
71
|
+
expect { browser.p(xpath: "//p[@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 p' do
|
|
77
|
+
msg = 'Sed pretium metus et quam. Nullam odio dolor, vestibulum non, tempor ut, vehicula sed, sapien. ' \
|
|
78
|
+
'Vestibulum placerat ligula at quam. Pellentesque habitant morbi tristique senectus et netus et ' \
|
|
79
|
+
'malesuada fames ac turpis egestas.'
|
|
80
|
+
expect(browser.p(index: 1).text).to eq msg
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it "returns an empty string if the element doesn't contain any text" do
|
|
84
|
+
expect(browser.p(index: 4).text).to eq ''
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "raises UnknownObjectException if the p doesn't exist" do
|
|
88
|
+
expect { browser.p(id: 'no_such_id').text }.to raise_unknown_object_exception
|
|
89
|
+
expect { browser.p(xpath: "//p[@id='no_such_id']").text }.to raise_unknown_object_exception
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
describe '#respond_to?' do
|
|
94
|
+
it 'returns true for all attribute methods' do
|
|
95
|
+
expect(browser.p(index: 0)).to respond_to(:class_name)
|
|
96
|
+
expect(browser.p(index: 0)).to respond_to(:id)
|
|
97
|
+
expect(browser.p(index: 0)).to respond_to(:title)
|
|
98
|
+
expect(browser.p(index: 0)).to respond_to(:text)
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe Pre 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 'p' exists" do
|
|
14
|
+
expect(browser.pre(id: 'rspec')).to exist
|
|
15
|
+
expect(browser.pre(id: /rspec/)).to exist
|
|
16
|
+
expect(browser.pre(text: 'browser.pre(id: "rspec").should exist')).to exist
|
|
17
|
+
expect(browser.pre(text: /browser\.pre/)).to exist
|
|
18
|
+
expect(browser.pre(class: 'ruby')).to exist
|
|
19
|
+
expect(browser.pre(class: /ruby/)).to exist
|
|
20
|
+
expect(browser.pre(index: 0)).to exist
|
|
21
|
+
expect(browser.pre(xpath: "//pre[@id='rspec']")).to exist
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'returns the first pre if given no args' do
|
|
25
|
+
expect(browser.pre).to exist
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "returns false if the 'p' doesn't exist" do
|
|
29
|
+
expect(browser.pre(id: 'no_such_id')).not_to exist
|
|
30
|
+
expect(browser.pre(id: /no_such_id/)).not_to exist
|
|
31
|
+
expect(browser.pre(text: 'no_such_text')).not_to exist
|
|
32
|
+
expect(browser.pre(text: /no_such_text/)).not_to exist
|
|
33
|
+
expect(browser.pre(class: 'no_such_class')).not_to exist
|
|
34
|
+
expect(browser.pre(class: /no_such_class/)).not_to exist
|
|
35
|
+
expect(browser.pre(index: 1337)).not_to exist
|
|
36
|
+
expect(browser.pre(xpath: "//pre[@id='no_such_id']")).not_to exist
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "raises TypeError when 'what' argument is invalid" do
|
|
40
|
+
expect { browser.pre(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.pre(class: 'ruby').id).to eq 'rspec'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "returns an empty string if the element exists and the attribute doesn't" do
|
|
51
|
+
expect(browser.pre(index: 0).id).to eq ''
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "raises UnknownObjectException if the pre doesn't exist" do
|
|
55
|
+
expect { browser.pre(id: 'no_such_id').id }.to raise_unknown_object_exception
|
|
56
|
+
expect { browser.pre(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
|
+
title = 'The brainfuck language is an esoteric programming language noted for its extreme minimalism'
|
|
63
|
+
expect(browser.pre(class: 'brainfuck').title).to eq title
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "returns an empty string if the element exists and the attribute doesn't" do
|
|
67
|
+
expect(browser.pre(index: 0).title).to eq ''
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "raises UnknownObjectException if the pre doesn't exist" do
|
|
71
|
+
expect { browser.pre(id: 'no_such_id').title }.to raise_unknown_object_exception
|
|
72
|
+
expect { browser.pre(xpath: "//pre[@id='no_such_id']").title }.to raise_unknown_object_exception
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
describe '#text' do
|
|
77
|
+
it 'returns the text of the pre' do
|
|
78
|
+
expect(browser.pre(class: 'haskell').text).to eq 'main = putStrLn "Hello World"'
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "returns an empty string if the element doesn't contain any text" do
|
|
82
|
+
expect(browser.pre(index: 0).text).to eq ''
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it "raises UnknownObjectException if the pre doesn't exist" do
|
|
86
|
+
expect { browser.pre(id: 'no_such_id').text }.to raise_unknown_object_exception
|
|
87
|
+
expect { browser.pre(xpath: "//pre[@id='no_such_id']").text }.to raise_unknown_object_exception
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
describe '#respond_to?' do
|
|
92
|
+
it 'returns true for all attribute methods' do
|
|
93
|
+
expect(browser.image(index: 0)).to respond_to(:class_name)
|
|
94
|
+
expect(browser.image(index: 0)).to respond_to(:id)
|
|
95
|
+
expect(browser.image(index: 0)).to respond_to(:title)
|
|
96
|
+
expect(browser.image(index: 0)).to respond_to(:text)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe PreCollection 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.pres(class: 'c-plus-plus').to_a).to eq [browser.pre(class: 'c-plus-plus')]
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe '#length' do
|
|
18
|
+
it 'returns the number of pres' do
|
|
19
|
+
expect(browser.pres.length).to eq 7
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe '#[]' do
|
|
24
|
+
it 'returns the pre at the given index' do
|
|
25
|
+
expect(browser.pres[1].id).to eq 'rspec'
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe '#each' do
|
|
30
|
+
it 'iterates through pres correctly' do
|
|
31
|
+
count = 0
|
|
32
|
+
|
|
33
|
+
browser.pres.each_with_index do |p, index|
|
|
34
|
+
expect(p.id).to eq browser.pre(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,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe ParagraphCollection 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.ps(class: 'lead').to_a).to eq [browser.p(class: 'lead')]
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe '#length' do
|
|
18
|
+
it 'returns the number of ps' do
|
|
19
|
+
expect(browser.ps.length).to eq 5
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe '#[]' do
|
|
24
|
+
it 'returns the p at the given index' do
|
|
25
|
+
expect(browser.ps[0].id).to eq 'lead'
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe '#each' do
|
|
30
|
+
it 'iterates through ps correctly' do
|
|
31
|
+
count = 0
|
|
32
|
+
|
|
33
|
+
browser.ps.each_with_index do |p, index|
|
|
34
|
+
expect(p.id).to eq browser.p(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,259 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'watirspec_helper'
|
|
4
|
+
|
|
5
|
+
module Watir
|
|
6
|
+
describe Radio 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 radio button exists' do
|
|
14
|
+
expect(browser.radio(id: 'new_user_newsletter_yes')).to exist
|
|
15
|
+
expect(browser.radio(id: /new_user_newsletter_yes/)).to exist
|
|
16
|
+
expect(browser.radio(name: 'new_user_newsletter')).to exist
|
|
17
|
+
expect(browser.radio(name: /new_user_newsletter/)).to exist
|
|
18
|
+
expect(browser.radio(value: 'yes')).to exist
|
|
19
|
+
expect(browser.radio(value: /yes/)).to exist
|
|
20
|
+
expect(browser.radio(text: 'Yes')).to exist
|
|
21
|
+
expect(browser.radio(text: /Yes/)).to exist
|
|
22
|
+
expect(browser.radio(class: 'huge')).to exist
|
|
23
|
+
expect(browser.radio(class: /huge/)).to exist
|
|
24
|
+
expect(browser.radio(index: 0)).to exist
|
|
25
|
+
expect(browser.radio(xpath: "//input[@id='new_user_newsletter_yes']")).to exist
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'returns the first radio if given no args' do
|
|
29
|
+
expect(browser.radio).to exist
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'returns true if the radio button exists (search by name and value)' do
|
|
33
|
+
expect(browser.radio(name: 'new_user_newsletter', value: 'yes')).to exist
|
|
34
|
+
browser.radio(xpath: "//input[@name='new_user_newsletter' and @value='yes']").set
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'returns true for element with upper case type' do
|
|
38
|
+
expect(browser.radio(id: 'new_user_newsletter_probably')).to exist
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'returns false if the radio button does not exist' do
|
|
42
|
+
expect(browser.radio(id: 'no_such_id')).not_to exist
|
|
43
|
+
expect(browser.radio(id: /no_such_id/)).not_to exist
|
|
44
|
+
expect(browser.radio(name: 'no_such_name')).not_to exist
|
|
45
|
+
expect(browser.radio(name: /no_such_name/)).not_to exist
|
|
46
|
+
expect(browser.radio(value: 'no_such_value')).not_to exist
|
|
47
|
+
expect(browser.radio(value: /no_such_value/)).not_to exist
|
|
48
|
+
expect(browser.radio(text: 'no_such_text')).not_to exist
|
|
49
|
+
expect(browser.radio(text: /no_such_text/)).not_to exist
|
|
50
|
+
expect(browser.radio(class: 'no_such_class')).not_to exist
|
|
51
|
+
expect(browser.radio(class: /no_such_class/)).not_to exist
|
|
52
|
+
expect(browser.radio(index: 1337)).not_to exist
|
|
53
|
+
expect(browser.radio(xpath: "input[@id='no_such_id']")).not_to exist
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'returns false if the radio button does not exist (search by name and value)' do
|
|
57
|
+
expect(browser.radio(name: 'new_user_newsletter', value: 'no_such_value')).not_to exist
|
|
58
|
+
expect(browser.radio(xpath: "//input[@name='new_user_newsletter' and @value='no_such_value']")).not_to exist
|
|
59
|
+
expect(browser.radio(name: 'no_such_name', value: 'yes')).not_to exist
|
|
60
|
+
expect(browser.radio(xpath: "//input[@name='no_such_name' and @value='yes']")).not_to exist
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'returns true for radios with a string value' do
|
|
64
|
+
expect(browser.radio(name: 'new_user_newsletter', value: 'yes')).to exist
|
|
65
|
+
expect(browser.radio(name: 'new_user_newsletter', value: 'no')).to exist
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "raises TypeError when 'what' argument is invalid" do
|
|
69
|
+
expect { browser.radio(id: 3.14).exists? }.to raise_error(TypeError)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Attribute methods
|
|
74
|
+
describe '#id' do
|
|
75
|
+
it 'returns the id attribute if the radio exists and has an attribute' do
|
|
76
|
+
expect(browser.radio(index: 0).id).to eq 'new_user_newsletter_yes'
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "returns an empty string if the radio exists and the attribute doesn't" do
|
|
80
|
+
expect(browser.radio(index: 2).id).to eq ''
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it "raises UnknownObjectException if the radio doesn't exist" do
|
|
84
|
+
expect { browser.radio(index: 1337).id }.to raise_unknown_object_exception
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
describe '#name' do
|
|
89
|
+
it 'returns the name attribute if the radio exists' do
|
|
90
|
+
expect(browser.radio(id: 'new_user_newsletter_yes').name).to eq 'new_user_newsletter'
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "returns an empty string if the radio exists and the attribute doesn't" do
|
|
94
|
+
expect(browser.radio(id: 'new_user_newsletter_absolutely').name).to eq ''
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it "raises UnknownObjectException if the radio doesn't exist" do
|
|
98
|
+
expect { browser.radio(index: 1337).name }.to raise_unknown_object_exception
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
describe '#text' do
|
|
103
|
+
it 'returns the text if the radio exists' do
|
|
104
|
+
expect(browser.radio(id: 'new_user_newsletter_yes').text).to eq 'Yes'
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "raises UnknownObjectException if the radio doesn't exist" do
|
|
108
|
+
expect { browser.radio(index: 1337).text }.to raise_unknown_object_exception
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it 'returns empty string when there is no label' do
|
|
112
|
+
form = browser.form(id: 'new_user')
|
|
113
|
+
expect(form.radio(index: 2).text).to eq ''
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
describe '#title' do
|
|
118
|
+
it 'returns the title attribute if the radio exists' do
|
|
119
|
+
expect(browser.radio(id: 'new_user_newsletter_no').title).to eq 'Traitor!'
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it "returns an empty string if the radio exists and the attribute doesn't" do
|
|
123
|
+
expect(browser.radio(id: 'new_user_newsletter_yes').title).to eq ''
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it "raises UnknownObjectException if the radio doesn't exist" do
|
|
127
|
+
expect { browser.radio(index: 1337).title }.to raise_unknown_object_exception
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
describe '#type' do
|
|
132
|
+
it 'returns the type attribute if the radio exists' do
|
|
133
|
+
expect(browser.radio(index: 0).type).to eq 'radio'
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
it "raises UnknownObjectException if the radio doesn't exist" do
|
|
137
|
+
expect { browser.radio(index: 1337).type }.to raise_unknown_object_exception
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
describe '#value' do
|
|
142
|
+
it 'returns the value attribute if the radio exists' do
|
|
143
|
+
expect(browser.radio(id: 'new_user_newsletter_yes').value).to eq 'yes'
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
it "raises UnknownObjectException if the radio doesn't exist" do
|
|
147
|
+
expect { browser.radio(index: 1337).value }.to raise_unknown_object_exception
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
describe '#respond_to?' do
|
|
152
|
+
it 'returns true for all attribute methods' do
|
|
153
|
+
expect(browser.radio(index: 0)).to respond_to(:class_name)
|
|
154
|
+
expect(browser.radio(index: 0)).to respond_to(:id)
|
|
155
|
+
expect(browser.radio(index: 0)).to respond_to(:name)
|
|
156
|
+
expect(browser.radio(index: 0)).to respond_to(:title)
|
|
157
|
+
expect(browser.radio(index: 0)).to respond_to(:type)
|
|
158
|
+
expect(browser.radio(index: 0)).to respond_to(:value)
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Access methods
|
|
163
|
+
describe '#enabled?' do
|
|
164
|
+
it 'returns true if the radio button is enabled' do
|
|
165
|
+
expect(browser.radio(id: 'new_user_newsletter_yes')).to be_enabled
|
|
166
|
+
expect(browser.radio(xpath: "//input[@id='new_user_newsletter_yes']")).to be_enabled
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
it 'returns false if the radio button is disabled' do
|
|
170
|
+
expect(browser.radio(id: 'new_user_newsletter_nah')).not_to be_enabled
|
|
171
|
+
expect(browser.radio(xpath: "//input[@id='new_user_newsletter_nah']")).not_to be_enabled
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
it "raises UnknownObjectException if the radio button doesn't exist" do
|
|
175
|
+
expect { browser.radio(id: 'no_such_id').enabled? }.to raise_unknown_object_exception
|
|
176
|
+
expect { browser.radio(xpath: "//input[@id='no_such_id']").enabled? }.to raise_unknown_object_exception
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
describe '#disabled?' do
|
|
181
|
+
it 'returns true if the radio is disabled' do
|
|
182
|
+
expect(browser.radio(id: 'new_user_newsletter_nah')).to be_disabled
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
it 'returns false if the radio is enabled' do
|
|
186
|
+
expect(browser.radio(id: 'new_user_newsletter_yes')).not_to be_disabled
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
it "raises UnknownObjectException if the radio doesn't exist" do
|
|
190
|
+
expect { browser.radio(index: 1337).disabled? }.to raise_unknown_object_exception
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
describe '#set' do
|
|
195
|
+
it 'sets the radio button' do
|
|
196
|
+
browser.radio(id: 'new_user_newsletter_no').set
|
|
197
|
+
expect(browser.radio(id: 'new_user_newsletter_no')).to be_set
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
it 'sets the radio button when found by :xpath' do
|
|
201
|
+
browser.radio(xpath: "//input[@id='new_user_newsletter_no']").set
|
|
202
|
+
expect(browser.radio(xpath: "//input[@id='new_user_newsletter_no']")).to be_set
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
it 'fires the onclick event' do
|
|
206
|
+
browser.radio(id: 'new_user_newsletter_no').set
|
|
207
|
+
browser.radio(id: 'new_user_newsletter_yes').set
|
|
208
|
+
expect(messages).to eq ['clicked: new_user_newsletter_no', 'clicked: new_user_newsletter_yes']
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
it 'fires the onchange event' do
|
|
212
|
+
browser.radio(value: 'certainly').set
|
|
213
|
+
expect(messages).to eq ['changed: new_user_newsletter']
|
|
214
|
+
|
|
215
|
+
browser.radio(value: 'certainly').set
|
|
216
|
+
expect(messages).to eq ['changed: new_user_newsletter'] # no event fired here - didn't change
|
|
217
|
+
|
|
218
|
+
browser.radio(value: 'yes').set
|
|
219
|
+
browser.radio(value: 'certainly').set
|
|
220
|
+
list = ['changed: new_user_newsletter', 'clicked: new_user_newsletter_yes', 'changed: new_user_newsletter']
|
|
221
|
+
expect(messages).to eq list
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
it "raises UnknownObjectException if the radio button doesn't exist" do
|
|
225
|
+
expect { browser.radio(name: 'no_such_name').set }.to raise_unknown_object_exception
|
|
226
|
+
expect { browser.radio(xpath: "//input[@name='no_such_name']").set }.to raise_unknown_object_exception
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
it 'raises ObjectDisabledException if the radio is disabled' do
|
|
230
|
+
expect { browser.radio(id: 'new_user_newsletter_nah').set }.to raise_object_disabled_exception
|
|
231
|
+
expect { browser.radio(xpath: "//input[@id='new_user_newsletter_nah']").set }.to raise_object_disabled_exception
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
# Other
|
|
236
|
+
describe '#set?' do
|
|
237
|
+
it 'returns true if the radio button is set' do
|
|
238
|
+
expect(browser.radio(id: 'new_user_newsletter_yes')).to be_set
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
it 'returns false if the radio button unset' do
|
|
242
|
+
expect(browser.radio(id: 'new_user_newsletter_no')).not_to be_set
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
it 'returns the state for radios with string values' do
|
|
246
|
+
expect(browser.radio(name: 'new_user_newsletter', value: 'no')).not_to be_set
|
|
247
|
+
browser.radio(name: 'new_user_newsletter', value: 'no').set
|
|
248
|
+
expect(browser.radio(name: 'new_user_newsletter', value: 'no')).to be_set
|
|
249
|
+
browser.radio(name: 'new_user_newsletter', value: 'yes').set
|
|
250
|
+
expect(browser.radio(name: 'new_user_newsletter', value: 'no')).not_to be_set
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
it "raises UnknownObjectException if the radio button doesn't exist" do
|
|
254
|
+
expect { browser.radio(id: 'no_such_id').set? }.to raise_unknown_object_exception
|
|
255
|
+
expect { browser.radio(xpath: "//input[@id='no_such_id']").set? }.to raise_unknown_object_exception
|
|
256
|
+
end
|
|
257
|
+
end
|
|
258
|
+
end
|
|
259
|
+
end
|