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.
Files changed (422) hide show
  1. checksums.yaml +7 -0
  2. data/.document +4 -0
  3. data/.github/ISSUE_TEMPLATE.md +16 -0
  4. data/.github/workflows/chrome.yml +55 -0
  5. data/.github/workflows/edge.yml +44 -0
  6. data/.github/workflows/firefox.yml +55 -0
  7. data/.github/workflows/ie.yml +30 -0
  8. data/.github/workflows/safari.yml +38 -0
  9. data/.github/workflows/unit.yml +60 -0
  10. data/.gitignore +21 -0
  11. data/.rubocop.yml +114 -0
  12. data/.rubocop_todo.yml +17 -0
  13. data/CHANGES.md +2212 -0
  14. data/Gemfile +15 -0
  15. data/LICENSE +24 -0
  16. data/README.md +113 -0
  17. data/Rakefile +173 -0
  18. data/lib/watir/adjacent.rb +128 -0
  19. data/lib/watir/after_hooks.rb +135 -0
  20. data/lib/watir/alert.rb +113 -0
  21. data/lib/watir/aliases.rb +8 -0
  22. data/lib/watir/attribute_helper.rb +97 -0
  23. data/lib/watir/browser.rb +323 -0
  24. data/lib/watir/capabilities.rb +179 -0
  25. data/lib/watir/cell_container.rb +25 -0
  26. data/lib/watir/container.rb +33 -0
  27. data/lib/watir/cookies.rb +130 -0
  28. data/lib/watir/element_collection.rb +223 -0
  29. data/lib/watir/elements/button.rb +28 -0
  30. data/lib/watir/elements/cell.rb +18 -0
  31. data/lib/watir/elements/checkbox.rb +56 -0
  32. data/lib/watir/elements/date_field.rb +42 -0
  33. data/lib/watir/elements/date_time_field.rb +42 -0
  34. data/lib/watir/elements/dlist.rb +12 -0
  35. data/lib/watir/elements/element.rb +807 -0
  36. data/lib/watir/elements/file_field.rb +43 -0
  37. data/lib/watir/elements/font.rb +26 -0
  38. data/lib/watir/elements/form.rb +16 -0
  39. data/lib/watir/elements/hidden.rb +26 -0
  40. data/lib/watir/elements/html_elements.rb +1981 -0
  41. data/lib/watir/elements/iframe.rb +156 -0
  42. data/lib/watir/elements/image.rb +22 -0
  43. data/lib/watir/elements/input.rb +15 -0
  44. data/lib/watir/elements/link.rb +8 -0
  45. data/lib/watir/elements/list.rb +51 -0
  46. data/lib/watir/elements/option.rb +60 -0
  47. data/lib/watir/elements/radio.rb +65 -0
  48. data/lib/watir/elements/row.rb +18 -0
  49. data/lib/watir/elements/select.rb +214 -0
  50. data/lib/watir/elements/svg_elements.rb +497 -0
  51. data/lib/watir/elements/table.rb +77 -0
  52. data/lib/watir/elements/table_cell.rb +32 -0
  53. data/lib/watir/elements/table_row.rb +34 -0
  54. data/lib/watir/elements/table_section.rb +17 -0
  55. data/lib/watir/elements/text_area.rb +7 -0
  56. data/lib/watir/elements/text_field.rb +39 -0
  57. data/lib/watir/exception.rb +16 -0
  58. data/lib/watir/extensions/nokogiri.rb +14 -0
  59. data/lib/watir/generator/base/generator.rb +114 -0
  60. data/lib/watir/generator/base/idl_sorter.rb +51 -0
  61. data/lib/watir/generator/base/spec_extractor.rb +158 -0
  62. data/lib/watir/generator/base/util.rb +21 -0
  63. data/lib/watir/generator/base/visitor.rb +133 -0
  64. data/lib/watir/generator/base.rb +12 -0
  65. data/lib/watir/generator/html/generator.rb +36 -0
  66. data/lib/watir/generator/html/spec_extractor.rb +52 -0
  67. data/lib/watir/generator/html/visitor.rb +23 -0
  68. data/lib/watir/generator/html.rb +17 -0
  69. data/lib/watir/generator/svg/generator.rb +38 -0
  70. data/lib/watir/generator/svg/spec_extractor.rb +55 -0
  71. data/lib/watir/generator/svg/visitor.rb +23 -0
  72. data/lib/watir/generator/svg.rb +9 -0
  73. data/lib/watir/generator.rb +5 -0
  74. data/lib/watir/has_window.rb +72 -0
  75. data/lib/watir/http_client.rb +11 -0
  76. data/lib/watir/js_execution.rb +165 -0
  77. data/lib/watir/js_snippets/attributeValues.js +11 -0
  78. data/lib/watir/js_snippets/backgroundColor.js +7 -0
  79. data/lib/watir/js_snippets/elementObscured.js +14 -0
  80. data/lib/watir/js_snippets/fireEvent.js +31 -0
  81. data/lib/watir/js_snippets/focus.js +3 -0
  82. data/lib/watir/js_snippets/getElementTags.js +3 -0
  83. data/lib/watir/js_snippets/getInnerHtml.js +19 -0
  84. data/lib/watir/js_snippets/getInnerText.js +19 -0
  85. data/lib/watir/js_snippets/getOuterHtml.js +20 -0
  86. data/lib/watir/js_snippets/getTextContent.js +19 -0
  87. data/lib/watir/js_snippets/isElementInViewport.js +20 -0
  88. data/lib/watir/js_snippets/isImageLoaded.js +3 -0
  89. data/lib/watir/js_snippets/selectOptionsLabel.js +10 -0
  90. data/lib/watir/js_snippets/selectOptionsText.js +10 -0
  91. data/lib/watir/js_snippets/selectOptionsValue.js +10 -0
  92. data/lib/watir/js_snippets/selectText.js +64 -0
  93. data/lib/watir/js_snippets/selectedOptions.js +11 -0
  94. data/lib/watir/js_snippets/selectedText.js +17 -0
  95. data/lib/watir/js_snippets/setText.js +3 -0
  96. data/lib/watir/js_snippets/setValue.js +3 -0
  97. data/lib/watir/js_snippets.rb +18 -0
  98. data/lib/watir/locators/anchor/selector_builder.rb +43 -0
  99. data/lib/watir/locators/button/matcher.rb +19 -0
  100. data/lib/watir/locators/button/selector_builder/xpath.rb +69 -0
  101. data/lib/watir/locators/button/selector_builder.rb +10 -0
  102. data/lib/watir/locators/cell/selector_builder/xpath.rb +23 -0
  103. data/lib/watir/locators/cell/selector_builder.rb +13 -0
  104. data/lib/watir/locators/element/locator.rb +81 -0
  105. data/lib/watir/locators/element/matcher.rb +118 -0
  106. data/lib/watir/locators/element/selector_builder/regexp_disassembler.rb +69 -0
  107. data/lib/watir/locators/element/selector_builder/xpath.rb +268 -0
  108. data/lib/watir/locators/element/selector_builder/xpath_support.rb +29 -0
  109. data/lib/watir/locators/element/selector_builder.rb +164 -0
  110. data/lib/watir/locators/option/matcher.rb +26 -0
  111. data/lib/watir/locators/option/selector_builder/xpath.rb +39 -0
  112. data/lib/watir/locators/option/selector_builder.rb +10 -0
  113. data/lib/watir/locators/row/selector_builder/xpath.rb +53 -0
  114. data/lib/watir/locators/row/selector_builder.rb +18 -0
  115. data/lib/watir/locators/text_area/selector_builder/xpath.rb +21 -0
  116. data/lib/watir/locators/text_area/selector_builder.rb +10 -0
  117. data/lib/watir/locators/text_field/matcher.rb +37 -0
  118. data/lib/watir/locators/text_field/selector_builder/xpath.rb +50 -0
  119. data/lib/watir/locators/text_field/selector_builder.rb +10 -0
  120. data/lib/watir/locators.rb +77 -0
  121. data/lib/watir/logger.rb +30 -0
  122. data/lib/watir/navigation.rb +51 -0
  123. data/lib/watir/radio_set.rb +230 -0
  124. data/lib/watir/row_container.rb +36 -0
  125. data/lib/watir/screenshot.rb +51 -0
  126. data/lib/watir/scroll.rb +95 -0
  127. data/lib/watir/search_context.rb +96 -0
  128. data/lib/watir/shadow_root.rb +60 -0
  129. data/lib/watir/user_editable.rb +85 -0
  130. data/lib/watir/version.rb +5 -0
  131. data/lib/watir/wait/timer.rb +52 -0
  132. data/lib/watir/wait.rb +171 -0
  133. data/lib/watir/window.rb +276 -0
  134. data/lib/watir/window_collection.rb +82 -0
  135. data/lib/watir.rb +108 -0
  136. data/lib/watirspec/guards.rb +65 -0
  137. data/lib/watirspec/implementation.rb +56 -0
  138. data/lib/watirspec/rake_tasks.rb +118 -0
  139. data/lib/watirspec/remote_server.rb +39 -0
  140. data/lib/watirspec/runner.rb +64 -0
  141. data/lib/watirspec/server/app.rb +86 -0
  142. data/lib/watirspec/server.rb +104 -0
  143. data/lib/watirspec.rb +93 -0
  144. data/spec/locator_spec_helper.rb +88 -0
  145. data/spec/spec_helper.rb +24 -0
  146. data/spec/unit/capabilities_spec.rb +670 -0
  147. data/spec/unit/element_locator_spec.rb +97 -0
  148. data/spec/unit/match_elements/button_spec.rb +76 -0
  149. data/spec/unit/match_elements/element_spec.rb +424 -0
  150. data/spec/unit/match_elements/text_field_spec.rb +84 -0
  151. data/spec/unit/selector_builder/anchor_spec.rb +59 -0
  152. data/spec/unit/selector_builder/button_spec.rb +217 -0
  153. data/spec/unit/selector_builder/cell_spec.rb +71 -0
  154. data/spec/unit/selector_builder/element_spec.rb +804 -0
  155. data/spec/unit/selector_builder/row_spec.rb +128 -0
  156. data/spec/unit/selector_builder/text_field_spec.rb +203 -0
  157. data/spec/unit/selector_builder/textarea_spec.rb +35 -0
  158. data/spec/unit/unit_helper.rb +4 -0
  159. data/spec/unit/wait_spec.rb +99 -0
  160. data/spec/watirspec/adjacent_spec.rb +256 -0
  161. data/spec/watirspec/after_hooks_spec.rb +204 -0
  162. data/spec/watirspec/alert_spec.rb +89 -0
  163. data/spec/watirspec/browser_spec.rb +536 -0
  164. data/spec/watirspec/capabilities_spec.rb +556 -0
  165. data/spec/watirspec/cookies_spec.rb +196 -0
  166. data/spec/watirspec/drag_and_drop_spec.rb +38 -0
  167. data/spec/watirspec/element_hidden_spec.rb +86 -0
  168. data/spec/watirspec/elements/area_spec.rb +69 -0
  169. data/spec/watirspec/elements/areas_spec.rb +44 -0
  170. data/spec/watirspec/elements/button_spec.rb +265 -0
  171. data/spec/watirspec/elements/buttons_spec.rb +57 -0
  172. data/spec/watirspec/elements/checkbox_spec.rb +290 -0
  173. data/spec/watirspec/elements/checkboxes_spec.rb +46 -0
  174. data/spec/watirspec/elements/collections_spec.rb +132 -0
  175. data/spec/watirspec/elements/date_field_spec.rb +209 -0
  176. data/spec/watirspec/elements/date_fields_spec.rb +46 -0
  177. data/spec/watirspec/elements/date_time_field_spec.rb +223 -0
  178. data/spec/watirspec/elements/date_time_fields_spec.rb +47 -0
  179. data/spec/watirspec/elements/dd_spec.rb +108 -0
  180. data/spec/watirspec/elements/dds_spec.rb +44 -0
  181. data/spec/watirspec/elements/del_spec.rb +113 -0
  182. data/spec/watirspec/elements/dels_spec.rb +42 -0
  183. data/spec/watirspec/elements/div_spec.rb +232 -0
  184. data/spec/watirspec/elements/divs_spec.rb +56 -0
  185. data/spec/watirspec/elements/dl_spec.rb +117 -0
  186. data/spec/watirspec/elements/dls_spec.rb +45 -0
  187. data/spec/watirspec/elements/dt_spec.rb +107 -0
  188. data/spec/watirspec/elements/dts_spec.rb +44 -0
  189. data/spec/watirspec/elements/element_spec.rb +1069 -0
  190. data/spec/watirspec/elements/elements_spec.rb +60 -0
  191. data/spec/watirspec/elements/em_spec.rb +85 -0
  192. data/spec/watirspec/elements/ems_spec.rb +45 -0
  193. data/spec/watirspec/elements/filefield_spec.rb +135 -0
  194. data/spec/watirspec/elements/filefields_spec.rb +45 -0
  195. data/spec/watirspec/elements/font_spec.rb +31 -0
  196. data/spec/watirspec/elements/form_spec.rb +70 -0
  197. data/spec/watirspec/elements/forms_spec.rb +46 -0
  198. data/spec/watirspec/elements/frame_spec.rb +117 -0
  199. data/spec/watirspec/elements/frames_spec.rb +43 -0
  200. data/spec/watirspec/elements/hidden_spec.rb +106 -0
  201. data/spec/watirspec/elements/hiddens_spec.rb +45 -0
  202. data/spec/watirspec/elements/hn_spec.rb +80 -0
  203. data/spec/watirspec/elements/hns_spec.rb +42 -0
  204. data/spec/watirspec/elements/iframe_spec.rb +244 -0
  205. data/spec/watirspec/elements/iframes_spec.rb +49 -0
  206. data/spec/watirspec/elements/image_spec.rb +160 -0
  207. data/spec/watirspec/elements/images_spec.rb +42 -0
  208. data/spec/watirspec/elements/input_spec.rb +17 -0
  209. data/spec/watirspec/elements/ins_spec.rb +113 -0
  210. data/spec/watirspec/elements/inses_spec.rb +42 -0
  211. data/spec/watirspec/elements/label_spec.rb +77 -0
  212. data/spec/watirspec/elements/labels_spec.rb +42 -0
  213. data/spec/watirspec/elements/li_spec.rb +99 -0
  214. data/spec/watirspec/elements/link_spec.rb +180 -0
  215. data/spec/watirspec/elements/links_spec.rb +66 -0
  216. data/spec/watirspec/elements/lis_spec.rb +44 -0
  217. data/spec/watirspec/elements/list_spec.rb +50 -0
  218. data/spec/watirspec/elements/map_spec.rb +78 -0
  219. data/spec/watirspec/elements/maps_spec.rb +43 -0
  220. data/spec/watirspec/elements/meta_spec.rb +27 -0
  221. data/spec/watirspec/elements/metas_spec.rb +42 -0
  222. data/spec/watirspec/elements/ol_spec.rb +63 -0
  223. data/spec/watirspec/elements/ols_spec.rb +42 -0
  224. data/spec/watirspec/elements/option_spec.rb +113 -0
  225. data/spec/watirspec/elements/p_spec.rb +102 -0
  226. data/spec/watirspec/elements/pre_spec.rb +100 -0
  227. data/spec/watirspec/elements/pres_spec.rb +42 -0
  228. data/spec/watirspec/elements/ps_spec.rb +42 -0
  229. data/spec/watirspec/elements/radio_spec.rb +259 -0
  230. data/spec/watirspec/elements/radios_spec.rb +45 -0
  231. data/spec/watirspec/elements/select_list_spec.rb +701 -0
  232. data/spec/watirspec/elements/select_lists_spec.rb +49 -0
  233. data/spec/watirspec/elements/span_spec.rb +119 -0
  234. data/spec/watirspec/elements/spans_spec.rb +42 -0
  235. data/spec/watirspec/elements/strong_spec.rb +78 -0
  236. data/spec/watirspec/elements/strongs_spec.rb +45 -0
  237. data/spec/watirspec/elements/table_spec.rb +210 -0
  238. data/spec/watirspec/elements/tables_spec.rb +44 -0
  239. data/spec/watirspec/elements/tbody_spec.rb +94 -0
  240. data/spec/watirspec/elements/tbodys_spec.rb +64 -0
  241. data/spec/watirspec/elements/td_spec.rb +92 -0
  242. data/spec/watirspec/elements/tds_spec.rb +55 -0
  243. data/spec/watirspec/elements/text_field_spec.rb +223 -0
  244. data/spec/watirspec/elements/text_fields_spec.rb +47 -0
  245. data/spec/watirspec/elements/textarea_spec.rb +30 -0
  246. data/spec/watirspec/elements/textareas_spec.rb +28 -0
  247. data/spec/watirspec/elements/tfoot_spec.rb +89 -0
  248. data/spec/watirspec/elements/tfoots_spec.rb +72 -0
  249. data/spec/watirspec/elements/thead_spec.rb +88 -0
  250. data/spec/watirspec/elements/theads_spec.rb +72 -0
  251. data/spec/watirspec/elements/tr_spec.rb +69 -0
  252. data/spec/watirspec/elements/trs_spec.rb +63 -0
  253. data/spec/watirspec/elements/ul_spec.rb +63 -0
  254. data/spec/watirspec/elements/uls_spec.rb +42 -0
  255. data/spec/watirspec/html/alerts.html +12 -0
  256. data/spec/watirspec/html/aria_attributes.html +9 -0
  257. data/spec/watirspec/html/child_frame.html +29 -0
  258. data/spec/watirspec/html/class_locator.html +11 -0
  259. data/spec/watirspec/html/clicks.html +19 -0
  260. data/spec/watirspec/html/closeable.html +21 -0
  261. data/spec/watirspec/html/collections.html +15 -0
  262. data/spec/watirspec/html/css/jquery-ui-1.8.17.custom.css +287 -0
  263. data/spec/watirspec/html/data_attributes.html +10 -0
  264. data/spec/watirspec/html/definition_lists.html +48 -0
  265. data/spec/watirspec/html/drag_and_drop.html +106 -0
  266. data/spec/watirspec/html/font.html +10 -0
  267. data/spec/watirspec/html/forms_with_input_elements.html +194 -0
  268. data/spec/watirspec/html/frame_1.html +22 -0
  269. data/spec/watirspec/html/frame_2.html +16 -0
  270. data/spec/watirspec/html/frames.html +11 -0
  271. data/spec/watirspec/html/iframe_1.html +22 -0
  272. data/spec/watirspec/html/iframes.html +15 -0
  273. data/spec/watirspec/html/images/button.png +0 -0
  274. data/spec/watirspec/html/images/circle.png +0 -0
  275. data/spec/watirspec/html/images/map.gif +0 -0
  276. data/spec/watirspec/html/images/map2.gif +0 -0
  277. data/spec/watirspec/html/images/originaltriangle.png +0 -0
  278. data/spec/watirspec/html/images/square.png +0 -0
  279. data/spec/watirspec/html/images/triangle.png +0 -0
  280. data/spec/watirspec/html/images.html +28 -0
  281. data/spec/watirspec/html/inner_outer.html +5 -0
  282. data/spec/watirspec/html/javascript/angular.min.js +332 -0
  283. data/spec/watirspec/html/javascript/helpers.js +16 -0
  284. data/spec/watirspec/html/javascript/jquery-1.7.1.min.js +4 -0
  285. data/spec/watirspec/html/javascript/jquery-ui-1.8.17.custom.min.js +68 -0
  286. data/spec/watirspec/html/keylogger.html +15 -0
  287. data/spec/watirspec/html/modal_dialog.html +9 -0
  288. data/spec/watirspec/html/multiple_ids.html +15 -0
  289. data/spec/watirspec/html/nested_elements.html +44 -0
  290. data/spec/watirspec/html/nested_frame_1.html +1 -0
  291. data/spec/watirspec/html/nested_frame_2.html +9 -0
  292. data/spec/watirspec/html/nested_frame_3.html +14 -0
  293. data/spec/watirspec/html/nested_frames.html +10 -0
  294. data/spec/watirspec/html/nested_iframe_2.html +12 -0
  295. data/spec/watirspec/html/nested_iframes.html +13 -0
  296. data/spec/watirspec/html/nested_tables.html +203 -0
  297. data/spec/watirspec/html/non_control_elements.html +145 -0
  298. data/spec/watirspec/html/obscured.html +36 -0
  299. data/spec/watirspec/html/removed_element.html +24 -0
  300. data/spec/watirspec/html/right_click.html +23 -0
  301. data/spec/watirspec/html/scroll.html +15 -0
  302. data/spec/watirspec/html/scroll_nested.html +17 -0
  303. data/spec/watirspec/html/scroll_nested_offscreen.html +18 -0
  304. data/spec/watirspec/html/shadow_dom.html +28 -0
  305. data/spec/watirspec/html/special_chars.html +15 -0
  306. data/spec/watirspec/html/sticky_elements.html +10 -0
  307. data/spec/watirspec/html/tables.html +121 -0
  308. data/spec/watirspec/html/timeout_window_location.html +19 -0
  309. data/spec/watirspec/html/uneven_table.html +20 -0
  310. data/spec/watirspec/html/wait.html +99 -0
  311. data/spec/watirspec/html/watirspec.css +0 -0
  312. data/spec/watirspec/html/window_switching.html +22 -0
  313. data/spec/watirspec/radio_set_spec.rb +346 -0
  314. data/spec/watirspec/screenshot_spec.rb +33 -0
  315. data/spec/watirspec/scroll_spec.rb +208 -0
  316. data/spec/watirspec/shadow_root_spec.rb +108 -0
  317. data/spec/watirspec/support/rspec_matchers.rb +161 -0
  318. data/spec/watirspec/user_editable_spec.rb +207 -0
  319. data/spec/watirspec/wait_spec.rb +345 -0
  320. data/spec/watirspec/window_switching_spec.rb +580 -0
  321. data/spec/watirspec_helper.rb +163 -0
  322. data/support/doctest_helper.rb +101 -0
  323. data/support/version_differ.rb +60 -0
  324. data/watir.gemspec +50 -0
  325. metadata +652 -148
  326. data/readme.rb +0 -211
  327. data/unittests/WindowLogonExample.rb +0 -30
  328. data/unittests/WindowLogonExtra.rb +0 -7
  329. data/unittests/all_tests.rb +0 -10
  330. data/unittests/all_tests_concurrent.rb +0 -57
  331. data/unittests/attachToExistingWindow_test.rb +0 -40
  332. data/unittests/buttons_test.rb +0 -131
  333. data/unittests/checkbox_test.rb +0 -149
  334. data/unittests/core_tests.rb +0 -9
  335. data/unittests/css_test.rb +0 -60
  336. data/unittests/div_test.rb +0 -179
  337. data/unittests/errorchecker_test.rb +0 -29
  338. data/unittests/filefield_test.rb +0 -35
  339. data/unittests/form_test.rb +0 -279
  340. data/unittests/frame_test.rb +0 -141
  341. data/unittests/html/blankpage.html +0 -12
  342. data/unittests/html/buttons1.html +0 -40
  343. data/unittests/html/checkboxes1.html +0 -69
  344. data/unittests/html/complex_table.html +0 -36
  345. data/unittests/html/cssTest.html +0 -42
  346. data/unittests/html/div.html +0 -105
  347. data/unittests/html/fileupload.html +0 -45
  348. data/unittests/html/formTest1.html +0 -39
  349. data/unittests/html/forms2.html +0 -45
  350. data/unittests/html/forms3.html +0 -132
  351. data/unittests/html/forms4.html +0 -27
  352. data/unittests/html/frame_buttons.html +0 -4
  353. data/unittests/html/frame_links.html +0 -4
  354. data/unittests/html/frame_multi.html +0 -5
  355. data/unittests/html/iframeTest.html +0 -13
  356. data/unittests/html/iframeTest1.html +0 -7
  357. data/unittests/html/iframeTest2.html +0 -6
  358. data/unittests/html/images/button.jpg +0 -0
  359. data/unittests/html/images/circle.jpg +0 -0
  360. data/unittests/html/images/originaltriangle.jpg +0 -0
  361. data/unittests/html/images/square.jpg +0 -0
  362. data/unittests/html/images/triangle.jpg +0 -0
  363. data/unittests/html/images1.html +0 -52
  364. data/unittests/html/javascriptevents.html +0 -39
  365. data/unittests/html/link_pass.html +0 -11
  366. data/unittests/html/links1.html +0 -37
  367. data/unittests/html/links2.html +0 -11
  368. data/unittests/html/nestedFrames.html +0 -6
  369. data/unittests/html/pass.html +0 -10
  370. data/unittests/html/popups1.html +0 -60
  371. data/unittests/html/radioButtons1.html +0 -71
  372. data/unittests/html/select_tealeaf.html +0 -54
  373. data/unittests/html/selectboxes1.html +0 -55
  374. data/unittests/html/simple_table.html +0 -26
  375. data/unittests/html/simple_table_buttons.html +0 -104
  376. data/unittests/html/simple_table_columns.html +0 -76
  377. data/unittests/html/table1.html +0 -142
  378. data/unittests/html/textarea.html +0 -30
  379. data/unittests/html/textfields1.html +0 -87
  380. data/unittests/html/textsearch.html +0 -44
  381. data/unittests/ie_mock.rb +0 -93
  382. data/unittests/ie_test.rb +0 -50
  383. data/unittests/images_test.rb +0 -179
  384. data/unittests/iostring.rb +0 -30
  385. data/unittests/iostring_test.rb +0 -48
  386. data/unittests/js_events_test.rb +0 -77
  387. data/unittests/jscriptExtraAlert.rb +0 -6
  388. data/unittests/jscriptExtraConfirmCancel.rb +0 -7
  389. data/unittests/jscriptExtraConfirmOk.rb +0 -7
  390. data/unittests/jscriptPushButton.rb +0 -5
  391. data/unittests/jscript_test.rb +0 -57
  392. data/unittests/links_test.rb +0 -169
  393. data/unittests/minmax_test.rb +0 -31
  394. data/unittests/navigate_test.rb +0 -56
  395. data/unittests/non_core_tests.rb +0 -9
  396. data/unittests/pagecontainstext_test.rb +0 -49
  397. data/unittests/popups_test.rb +0 -44
  398. data/unittests/radios_test.rb +0 -164
  399. data/unittests/screen_capture_test.rb +0 -53
  400. data/unittests/selectbox_test.rb +0 -197
  401. data/unittests/send_keys_test.rb +0 -29
  402. data/unittests/setup.rb +0 -47
  403. data/unittests/table_test.rb +0 -306
  404. data/unittests/textAreafields_test.rb +0 -81
  405. data/unittests/textfields_test.rb +0 -239
  406. data/watir/AutoItX3.dll +0 -0
  407. data/watir/WindowHelper.rb +0 -47
  408. data/watir/camel_case.rb +0 -37
  409. data/watir/clickJSDialog.rb +0 -19
  410. data/watir/cookiemanager.rb +0 -53
  411. data/watir/exceptions.rb +0 -60
  412. data/watir/screen_capture.rb +0 -115
  413. data/watir/setFileDialog.rb +0 -16
  414. data/watir/testUnitAddons.rb +0 -47
  415. data/watir/watir_simple.rb +0 -475
  416. data/watir/winClicker.rb +0 -505
  417. data/watir.rb +0 -3744
  418. /data/{unittests → spec/watirspec}/html/images/1.gif +0 -0
  419. /data/{unittests/html/images/2.GIF → spec/watirspec/html/images/2.gif} +0 -0
  420. /data/{unittests/html/images/3.GIF → spec/watirspec/html/images/3.gif} +0 -0
  421. /data/{unittests/html/images/minus.GIF → spec/watirspec/html/images/minus.gif} +0 -0
  422. /data/{unittests → spec/watirspec}/html/images/plus.gif +0 -0
@@ -0,0 +1,345 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'watirspec_helper'
4
+
5
+ module Watir
6
+ describe Wait do
7
+ before do
8
+ browser.goto WatirSpec.url_for('wait.html')
9
+ end
10
+
11
+ describe '#default_timeout' do
12
+ context 'when no timeout is specified' do
13
+ it 'is used by Wait#until' do
14
+ expect { described_class.until { false } }.to wait_and_raise_timeout_exception(timeout: 1)
15
+ end
16
+
17
+ it 'is used by Wait#while' do
18
+ expect { described_class.while { true } }.to wait_and_raise_timeout_exception(timeout: 1)
19
+ end
20
+
21
+ it 'ensures all checks happen once even if time has expired' do
22
+ Watir.default_timeout = -1
23
+ expect { browser.link.click }.not_to raise_exception
24
+ ensure
25
+ Watir.default_timeout = 5
26
+ end
27
+ end
28
+ end
29
+
30
+ context 'when acting on Element' do
31
+ describe '#wait_until' do
32
+ it 'returns element for additional actions' do
33
+ element = browser.div(id: 'foo')
34
+ expect(element.wait_until(&:exist?)).to eq element
35
+ end
36
+
37
+ it 'accepts self in block' do
38
+ element = browser.div(id: 'bar')
39
+ browser.a(id: 'show_bar').click
40
+ expect { element.wait_until { |el| el.text == 'bar' } }.not_to raise_exception
41
+ end
42
+
43
+ it 'accepts any values in block' do
44
+ element = browser.div(id: 'bar')
45
+ expect { element.wait_until { true } }.not_to raise_exception
46
+ end
47
+
48
+ it 'accepts just a timeout parameter' do
49
+ element = browser.div(id: 'bar')
50
+ expect { element.wait_until(timeout: 0) { true } }.not_to raise_exception
51
+ end
52
+
53
+ it 'accepts just a message parameter' do
54
+ element = browser.div(id: 'bar')
55
+ expect { element.wait_until(message: 'no') { true } }.not_to raise_exception
56
+ end
57
+
58
+ it 'accepts just an interval parameter' do
59
+ element = browser.div(id: 'bar')
60
+ expect { element.wait_until(interval: 0.1) { true } }.not_to raise_exception
61
+ end
62
+
63
+ context 'when accepting keywords instead of block' do
64
+ before { browser.refresh }
65
+
66
+ it 'accepts text keyword' do
67
+ element = browser.div(id: 'bar')
68
+ browser.a(id: 'show_bar').click
69
+ expect { element.wait_until(text: 'bar') }.not_to raise_exception
70
+ end
71
+
72
+ it 'accepts regular expression value' do
73
+ element = browser.div(id: 'bar')
74
+ browser.a(id: 'show_bar').click
75
+ expect { element.wait_until(style: /block/) }.not_to raise_exception
76
+ end
77
+
78
+ it 'accepts multiple keywords' do
79
+ element = browser.div(id: 'bar')
80
+ browser.a(id: 'show_bar').click
81
+ expect { element.wait_until(text: 'bar', style: /block/) }.not_to raise_exception
82
+ end
83
+
84
+ it 'accepts custom keyword' do
85
+ element = browser.div(id: 'bar')
86
+ browser.a(id: 'show_bar').click
87
+ expect { element.wait_until(custom: 'bar') }.not_to raise_exception
88
+ end
89
+
90
+ it 'times out when single keyword not met' do
91
+ element = browser.div(id: 'bar')
92
+ expect { element.wait_until(id: 'foo') }.to raise_timeout_exception
93
+ end
94
+
95
+ it 'times out when one of multiple keywords not met' do
96
+ element = browser.div(id: 'bar')
97
+ expect { element.wait_until(id: 'bar', text: 'foo') }.to raise_timeout_exception
98
+ end
99
+
100
+ it 'times out when a custom keywords not met' do
101
+ element = browser.div(id: 'bar')
102
+ expect { element.wait_until(custom: 'foo') }.to raise_timeout_exception
103
+ end
104
+ end
105
+ end
106
+
107
+ describe '#wait_while' do
108
+ it 'returns element for additional actions' do
109
+ element = browser.div(id: 'foo')
110
+ browser.a(id: 'hide_foo').click
111
+ expect(element.wait_while(&:present?)).to eq element
112
+ end
113
+
114
+ it 'accepts any values in block' do
115
+ element = browser.div(id: 'foo')
116
+ expect { element.wait_while { false } }.not_to raise_exception
117
+ end
118
+
119
+ it 'accepts just a timeout parameter' do
120
+ element = browser.div(id: 'foo')
121
+ expect { element.wait_while(timeout: 0) { false } }.not_to raise_exception
122
+ end
123
+
124
+ it 'accepts just a message parameter' do
125
+ element = browser.div(id: 'foo')
126
+ expect { element.wait_while(message: 'no') { false } }.not_to raise_exception
127
+ end
128
+
129
+ it 'accepts just an interval parameter' do
130
+ element = browser.div(id: 'foo')
131
+ expect { element.wait_while(interval: 0.1) { false } }.not_to raise_exception
132
+ end
133
+
134
+ context 'when accepting keywords instead of block' do
135
+ it 'accepts text keyword', except: {browser: :safari,
136
+ reason: 'Safari does not recognize date type'} do
137
+ element = browser.div(id: 'foo')
138
+ browser.a(id: 'hide_foo').click
139
+ expect { element.wait_while(text: 'foo') }.not_to raise_exception
140
+ end
141
+
142
+ it 'accepts regular expression value' do
143
+ element = browser.div(id: 'foo')
144
+ browser.a(id: 'hide_foo').click
145
+ expect { element.wait_while(style: /block/) }.not_to raise_exception
146
+ end
147
+
148
+ it 'accepts multiple keywords' do
149
+ element = browser.div(id: 'foo')
150
+ browser.a(id: 'hide_foo').click
151
+ expect { element.wait_while(text: 'foo', style: /block/) }.not_to raise_exception
152
+ end
153
+
154
+ it 'accepts custom attributes' do
155
+ element = browser.div(id: 'foo')
156
+ browser.a(id: 'hide_foo').click
157
+ expect { element.wait_while(custom: '') }.not_to raise_exception
158
+ end
159
+
160
+ it 'accepts keywords and block' do
161
+ element = browser.div(id: 'foo')
162
+ browser.a(id: 'hide_foo').click
163
+ expect { element.wait_while(custom: '', &:present?) }.not_to raise_exception
164
+ end
165
+
166
+ it 'browser accepts keywords' do
167
+ expect { browser.wait_until(title: 'wait test') }.not_to raise_exception
168
+ expect { browser.wait_until(title: 'wrong') }.to raise_timeout_exception
169
+ end
170
+
171
+ it 'alert accepts keywords' do
172
+ browser.goto WatirSpec.url_for('alerts.html')
173
+
174
+ begin
175
+ browser.button(id: 'alert').click
176
+ expect { browser.alert.wait_until(text: 'ok') }.not_to raise_exception
177
+ expect { browser.alert.wait_until(text: 'not ok') }.to raise_timeout_exception
178
+ ensure
179
+ browser.alert.ok
180
+ end
181
+ end
182
+
183
+ it 'window accepts keywords' do
184
+ expect { browser.window.wait_until(title: 'wait test') }.not_to raise_exception
185
+ expect { browser.window.wait_until(title: 'wrong') }.to raise_timeout_exception
186
+ end
187
+
188
+ it 'times out when single keyword not met' do
189
+ element = browser.div(id: 'foo')
190
+ expect { element.wait_while(id: 'foo') }.to raise_timeout_exception
191
+ end
192
+
193
+ it 'times out when one of multiple keywords not met' do
194
+ element = browser.div(id: 'foo')
195
+ browser.a(id: 'hide_foo').click
196
+ expect { element.wait_while(id: 'foo', style: /block/) }.to raise_timeout_exception
197
+ end
198
+
199
+ it 'times out when one of custom keywords not met' do
200
+ element = browser.div(id: 'foo')
201
+ expect { element.wait_while(custom: '') }.to raise_timeout_exception
202
+ end
203
+ end
204
+ end
205
+
206
+ context 'when acting on an element that is never present' do
207
+ it 'raises exception after timing out' do
208
+ element = browser.link(id: 'not_there')
209
+ expect { element.click }.to wait_and_raise_unknown_object_exception
210
+ end
211
+ end
212
+
213
+ context 'when acting on an element that is already present' do
214
+ it 'does not wait' do
215
+ expect { browser.link.click }.to execute_when_satisfied(max: 1)
216
+ end
217
+ end
218
+
219
+ context 'when acting on an element that eventually becomes present' do
220
+ it 'waits until element is present and then takes action' do
221
+ expect {
222
+ browser.a(id: 'show_bar').click
223
+ browser.div(id: 'bar').click
224
+ }.to execute_when_satisfied(min: 1, max: 4)
225
+ expect(browser.div(id: 'bar').text).to eq 'changed'
226
+ end
227
+
228
+ it 'waits until text field present and then takes action' do
229
+ expect {
230
+ browser.a(id: 'show_textfield').click
231
+ browser.text_field(id: 'textfield').set 'Foo'
232
+ }.to execute_when_satisfied(min: 1, max: 4)
233
+ end
234
+ end
235
+
236
+ context 'when acting on a read only text field' do
237
+ it 'waits and raises read only exception if never becomes writable' do
238
+ expect { browser.text_field(id: 'writable').set 'foo' }.to wait_and_raise_object_read_only_exception
239
+ end
240
+
241
+ it 'waits until writable' do
242
+ expect {
243
+ browser.a(id: 'make-writable').click
244
+ browser.text_field(id: 'writable').set 'foo'
245
+ }.to execute_when_satisfied(min: 1, max: 4)
246
+ end
247
+ end
248
+
249
+ context 'when acting on a disabled button' do
250
+ it 'waits and raises exception if it never becomes enabled' do
251
+ expect { browser.button(id: 'btn').click }.to wait_and_raise_object_disabled_exception
252
+ end
253
+
254
+ it 'waits until enabled' do
255
+ expect {
256
+ browser.a(id: 'enable_btn').click
257
+ browser.button(id: 'btn').click
258
+ }.to execute_when_satisfied(min: 1, max: 4)
259
+ end
260
+ end
261
+
262
+ context 'when acting on an element with a parent' do
263
+ it 'raises exception after timing out if parent never present' do
264
+ element = browser.link(id: 'not_there')
265
+ expect { element.element.click }.to wait_and_raise_unknown_object_exception
266
+ end
267
+
268
+ it 'raises exception after timing out when element from a collection whose parent is never present' do
269
+ element = browser.link(id: 'not_there')
270
+ expect { element.elements[2].click }.to wait_and_raise_unknown_object_exception
271
+ end
272
+
273
+ it 'does not wait for parent element to be present when querying child element' do
274
+ el = browser.element(id: 'not_there').element(id: 'doesnt_matter')
275
+ expect { el.present? }.to execute_when_satisfied(max: 1)
276
+ end
277
+ end
278
+ end
279
+
280
+ context 'when acting on Element Collection' do
281
+ describe '#wait_until' do
282
+ it 'returns collection' do
283
+ elements = browser.divs
284
+ expect(elements.wait_until(&:exist?)).to eq elements
285
+ end
286
+
287
+ it 'times out when waiting for non-empty collection' do
288
+ expect { browser.divs.wait_until(&:empty?) }.to raise_timeout_exception
289
+ end
290
+
291
+ it 'provides matching collection when exists' do
292
+ expect {
293
+ browser.a(id: 'add_foobar').click
294
+ browser.divs(id: 'foobar').wait_until(&:exists?)
295
+ }.to execute_when_satisfied(min: 1)
296
+ end
297
+
298
+ it 'accepts self in block' do
299
+ expect {
300
+ browser.a(id: 'add_foobar').click
301
+ browser.divs.wait_until { |els| els.size == 7 }
302
+ }.to execute_when_satisfied(min: 1)
303
+ end
304
+
305
+ it 'accepts attributes to evaluate' do
306
+ expect {
307
+ browser.a(id: 'add_foobar').click
308
+ browser.divs.wait_until(size: 7)
309
+ }.to execute_when_satisfied(min: 1)
310
+ end
311
+ end
312
+
313
+ describe '#wait_while' do
314
+ it 'returns collection' do
315
+ elements = browser.divs
316
+ expect(elements.wait_while(&:empty?)).to eq elements
317
+ end
318
+
319
+ it 'times out when waiting for non-empty collection' do
320
+ elements = browser.divs
321
+ expect { elements.wait_while(&:exists?) }.to raise_timeout_exception
322
+ end
323
+
324
+ it 'provides matching collection when exists' do
325
+ expect {
326
+ browser.a(id: 'remove_foo').click
327
+ browser.divs(id: 'foo').wait_while(&:exists?)
328
+ }.to execute_when_satisfied(min: 1)
329
+ end
330
+
331
+ it 'accepts self in block' do
332
+ expect {
333
+ browser.a(id: 'add_foobar').click
334
+ browser.divs.wait_while { |els| els.size == 6 }
335
+ }.to execute_when_satisfied(min: 1)
336
+ end
337
+ end
338
+
339
+ it 'waits for parent element to be present before locating' do
340
+ els = browser.element(id: /not|there/).elements(id: 'doesnt_matter')
341
+ expect { els.to_a }.to wait_and_raise_unknown_object_exception
342
+ end
343
+ end
344
+ end
345
+ end