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,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WatirSpec
4
+ class RemoteServer
5
+ include Watir::Exception
6
+
7
+ attr_reader :server
8
+
9
+ def start(port = 4444, args: [])
10
+ require 'selenium/server'
11
+
12
+ @server ||= Selenium::Server.new(jar,
13
+ port: Selenium::WebDriver::PortProber.above(port),
14
+ log: !!$DEBUG,
15
+ background: true,
16
+ timeout: 60)
17
+ args.each { |arg| @server << arg }
18
+ @server.start
19
+ at_exit { @server.stop }
20
+ end
21
+
22
+ private
23
+
24
+ def jar
25
+ if File.exist?(ENV['REMOTE_SERVER_BINARY'] || '')
26
+ ENV.fetch('REMOTE_SERVER_BINARY', nil)
27
+ elsif ENV['LOCAL_SELENIUM']
28
+ File.expand_path('../selenium/bazel-bin/java/server/src/org/openqa/selenium/grid/selenium_server_deploy.jar')
29
+ elsif !Dir.glob('*selenium*.jar').empty?
30
+ Dir.glob('*selenium*.jar').first
31
+ else
32
+ Selenium::Server.download
33
+ end
34
+ rescue SocketError
35
+ # not connected to internet
36
+ raise Error, 'unable to find or download selenium-server jar'
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WatirSpec
4
+ module Runner
5
+ module BrowserHelper
6
+ def browser
7
+ $browser
8
+ end
9
+ end
10
+
11
+ module MessagesHelper
12
+ def messages
13
+ browser.div(id: 'messages').divs.map(&:text)
14
+ end
15
+
16
+ def event_log
17
+ browser.div(id: 'log').wait_until(&:present?).ps.map(&:text)
18
+ end
19
+ end
20
+
21
+ module_function
22
+
23
+ @execute = true
24
+
25
+ def execute=(bool)
26
+ @execute = bool
27
+ end
28
+
29
+ def execute
30
+ start_server unless ENV['WATIR_PUBLIC_SERVER']
31
+ configure
32
+ add_guard_hook
33
+
34
+ @executed = true
35
+ end
36
+
37
+ def execute_if_necessary
38
+ execute if (!defined?(@executed) || !@executed) && @execute
39
+ end
40
+
41
+ def configure
42
+ Thread.abort_on_exception = true
43
+ return unless defined?(RSpec)
44
+
45
+ RSpec.configure do |config|
46
+ config.include(BrowserHelper)
47
+ config.include(MessagesHelper)
48
+
49
+ config.before(:suite) { $browser = WatirSpec.new_browser }
50
+ config.after(:suite) { $browser&.close }
51
+ end
52
+ end
53
+
54
+ def start_server
55
+ WatirSpec::Server.run!
56
+ end
57
+
58
+ def add_guard_hook
59
+ return if WatirSpec.unguarded?
60
+
61
+ at_exit { WatirSpec::Guards.report }
62
+ end
63
+ end # Runner
64
+ end # WatirSpec
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WatirSpec
4
+ class Server
5
+ class App
6
+ def response(path, data = nil)
7
+ case path
8
+ when '/'
9
+ respond(self.class.name)
10
+ when '/post_to_me'
11
+ respond("You posted the following content:\n#{data}")
12
+ when '/plain_text'
13
+ respond('This is text/plain', 'Content-Type' => 'text/plain')
14
+ when %r{/set_cookie}
15
+ body = "<html>C is for cookie, it's good enough for me</html>"
16
+ respond(body, 'Content-Type' => 'text/html', 'Set-Cookie' => 'monster=1')
17
+ when static_file?
18
+ respond_to_file(path)
19
+ else
20
+ respond('')
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def respond_to_file(path)
27
+ case path
28
+ when css_file?
29
+ respond(file_read(path), 'Content-Type' => 'text/css')
30
+ when js_file?
31
+ respond(file_read(path), 'Content-Type' => 'application/javascript')
32
+ when png_file?
33
+ respond(file_binread(path), 'Content-Type' => 'image/png')
34
+ when gif_file?
35
+ respond(file_read(path), 'Content-Type' => 'image/gif')
36
+ else
37
+ respond(file_read(path))
38
+ end
39
+ end
40
+
41
+ def respond(body, headers = {}, status = '200 OK')
42
+ [status, headers, body]
43
+ end
44
+
45
+ def css_file?
46
+ proc { |path| static_file(path) && path.end_with?('.css') }
47
+ end
48
+
49
+ def js_file?
50
+ proc { |path| static_file(path) && path.end_with?('.js') }
51
+ end
52
+
53
+ def png_file?
54
+ proc { |path| static_file(path) && path.end_with?('.png') }
55
+ end
56
+
57
+ def gif_file?
58
+ proc { |path| static_file(path) && path.end_with?('.gif') }
59
+ end
60
+
61
+ def static_file?
62
+ proc { |path| static_file(path) }
63
+ end
64
+
65
+ def static_files
66
+ WatirSpec.htmls.flat_map do |html|
67
+ Dir["#{html}/**/*"]
68
+ end
69
+ end
70
+
71
+ def static_file(path)
72
+ static_files.find do |file|
73
+ file.end_with?(path)
74
+ end
75
+ end
76
+
77
+ def file_read(path)
78
+ File.read(static_file(path))
79
+ end
80
+
81
+ def file_binread(path)
82
+ File.binread(static_file(path))
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,104 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'socket'
4
+ require 'watirspec/server/app'
5
+
6
+ module WatirSpec
7
+ class Server
8
+ class << self
9
+ def run!
10
+ return if running?
11
+
12
+ Thread.new do
13
+ run_server
14
+ wait_for_connection
15
+ end
16
+ end
17
+
18
+ def port
19
+ @port ||= Selenium::WebDriver::PortProber.above(8180)
20
+ end
21
+
22
+ def bind
23
+ @bind ||= Selenium::WebDriver::Platform.windows? ? '127.0.0.1' : '0.0.0.0'
24
+ end
25
+
26
+ private
27
+
28
+ def running?
29
+ defined?(@running) && @running
30
+ end
31
+
32
+ def run_server
33
+ server = TCPServer.new(bind, port)
34
+ @running = true
35
+ loop do
36
+ Thread.start(server.accept) { |client| accept_client(client) }
37
+ end
38
+ end
39
+
40
+ def wait_for_connection
41
+ socket_poller = Selenium::WebDriver::SocketPoller.new(bind, port, 30)
42
+ return if socket_poller.connected?
43
+
44
+ raise 'Cannot start WatirSpec server.'
45
+ end
46
+
47
+ def app
48
+ @app ||= App.new
49
+ end
50
+
51
+ def accept_client(client)
52
+ start_line = client.gets
53
+ return unless start_line
54
+
55
+ _, path = start_line.split
56
+ status, headers, body = app.response(path, read_body(client))
57
+ headers = prepare_headers(headers, body)
58
+
59
+ client.write(response(status, headers, body))
60
+ rescue Errno::ECONNRESET
61
+ Watir.logger.warn 'Client reset connection, skipping.', id: [:reset_connection]
62
+ ensure
63
+ client.close
64
+ end
65
+
66
+ def read_body(client)
67
+ request_headers = read_headers(client)
68
+ client.read(request_headers['Content-Length'].to_i)
69
+ end
70
+
71
+ def read_headers(client)
72
+ headers = {}
73
+ while (line = client.gets.split(' ', 2))
74
+ break if line[0] == ''
75
+
76
+ headers[line[0].chop] = line[1].strip
77
+ end
78
+
79
+ headers
80
+ end
81
+
82
+ def prepare_headers(headers, body)
83
+ headers = default_headers.merge(headers)
84
+ headers['Content-Length'] = body.size.to_s
85
+ headers.to_a.map { |array| array.join(': ') }
86
+ end
87
+
88
+ def default_headers
89
+ {
90
+ 'Cache-Control' => 'no-cache',
91
+ 'Connection' => 'close',
92
+ 'Content-Type' => 'text/html; charset=UTF-8',
93
+ 'Server' => 'watirspec'
94
+ }
95
+ end
96
+
97
+ def response(status, headers, body)
98
+ response = ["HTTP/1.1 #{status}"] + headers
99
+ response = response.join("\r\n")
100
+ response << "\r\n\r\n#{body}\r\n"
101
+ end
102
+ end # class << Server
103
+ end # Server
104
+ end # WatirSpec
data/lib/watirspec.rb ADDED
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'tmpdir'
4
+ require 'watirspec/guards'
5
+ require 'watirspec/implementation'
6
+ require 'watirspec/runner'
7
+ require 'watirspec/server'
8
+
9
+ module WatirSpec
10
+ class << self
11
+ attr_accessor :browser_args, :unguarded
12
+
13
+ def htmls
14
+ @htmls ||= [File.expand_path('../spec/watirspec/html', __dir__)]
15
+ end
16
+
17
+ def run!
18
+ load_support
19
+ WatirSpec::Runner.execute_if_necessary
20
+ end
21
+
22
+ def url_for(str)
23
+ File.join(host, str)
24
+ end
25
+
26
+ def host
27
+ @host ||= ENV['WATIR_PUBLIC_SERVER'] ? 'http://watir.com/examples' : "http://#{Server.bind}:#{Server.port}"
28
+ end
29
+
30
+ def unguarded?
31
+ @unguarded ||= false
32
+ end
33
+
34
+ def load_support
35
+ root = File.expand_path('../spec/watirspec', __dir__)
36
+ Dir.glob("#{root}/support/**/*.rb").each do |file|
37
+ require file
38
+ end
39
+ end
40
+
41
+ def implementation
42
+ @implementation ||= begin
43
+ imp = WatirSpec::Implementation.new
44
+ yield imp if block_given?
45
+
46
+ imp
47
+ end
48
+ end
49
+
50
+ def implementation=(imp)
51
+ unless imp.is_a?(WatirSpec::Implementation)
52
+ raise TypeError, "expected WatirSpec::Implementation, got #{imp.class}"
53
+ end
54
+
55
+ @implementation = imp
56
+ end
57
+
58
+ def new_browser(pause = 1)
59
+ sleep pause
60
+
61
+ klass = WatirSpec.implementation.browser_class
62
+ args = Array(WatirSpec.implementation.browser_args).map { |e| e.is_a?(Hash) ? e.dup : e }
63
+
64
+ instance = klass.new(*args)
65
+ print_browser_info_once(instance)
66
+ instance.window.maximize
67
+
68
+ instance
69
+ end
70
+
71
+ private
72
+
73
+ def print_browser_info_once(instance)
74
+ return if defined?(@did_print_browser_info) && @did_print_browser_info
75
+
76
+ @did_print_browser_info = true
77
+
78
+ info = []
79
+ info << instance.class.name
80
+
81
+ caps = instance.driver.capabilities
82
+
83
+ info << caps.browser_name.to_s
84
+ info << caps.browser_version.to_s
85
+ info << @implementation.driver_info
86
+
87
+ Watir.logger.warn "running watirspec against #{info.join ' '} using:\n#{WatirSpec.implementation.inspect_args}",
88
+ id: [:browser_info]
89
+ rescue StandardError => e
90
+ Watir.logger.warn("Unable to print browser info: #{e}")
91
+ end
92
+ end # class << WatirSpec
93
+ end # WatirSpec
@@ -0,0 +1,88 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LocatorSpecHelper
4
+ def browser
5
+ @browser ||= instance_double(Watir::Browser, wd: driver)
6
+ allow(@browser).to receive_messages(browser: @browser, locator_namespace: @locator_namespace || Watir::Locators)
7
+ allow(@browser).to receive(:is_a?).with(Watir::Browser).and_return(true)
8
+ @browser
9
+ end
10
+
11
+ def driver
12
+ @driver ||= instance_double(Selenium::WebDriver::Driver)
13
+ end
14
+
15
+ def selector_builder
16
+ @built ||= {xpath: ''}
17
+ @selector_builder = instance_double(Watir::Locators::Element::SelectorBuilder)
18
+ allow(@selector_builder).to receive(:build).and_return(@built)
19
+ @selector_builder
20
+ end
21
+
22
+ def attributes
23
+ @attributes ||= Watir::HTMLElement.attribute_list
24
+ end
25
+
26
+ def query_scope
27
+ @query_scope ||= browser
28
+ end
29
+
30
+ def element_matcher
31
+ @element_matcher ||= instance_double(Watir::Locators::Element::Matcher)
32
+ allow(@element_matcher).to receive_messages(query_scope: browser, selector: @locator || {})
33
+ @element_matcher
34
+ end
35
+
36
+ def locator
37
+ Watir::Locators::Element::Locator.new(element_matcher)
38
+ end
39
+
40
+ def locate_one(selector = nil)
41
+ selector ||= @locator || {}
42
+ locator.locate ordered_hash(selector)
43
+ end
44
+
45
+ def locate_all(selector = nil)
46
+ selector ||= @locator || {}
47
+ locator.locate_all ordered_hash(selector)
48
+ end
49
+
50
+ def selector_build(selector)
51
+ selector_builder.build(selector)
52
+ end
53
+
54
+ def element(opts = {})
55
+ raise unless opts.delete(:attributes).nil?
56
+
57
+ klass = opts.delete(:watir_element) || Watir::HTMLElement
58
+ el = instance_double(klass, opts)
59
+
60
+ allow(el).to receive_messages(enabled?: true, selector_builder: selector_builder, selector: @selector || {})
61
+ allow(el).to receive(:wd).and_return wd_element unless opts.key?(:wd)
62
+ el
63
+ end
64
+
65
+ def wd_element(opts = {})
66
+ attrs = opts.delete(:attributes)
67
+ el = instance_double(Selenium::WebDriver::Element, opts)
68
+ attrs&.each do |key, value|
69
+ allow(el).to receive(:attribute).with(key.to_s).and_return(value)
70
+ end
71
+ el
72
+ end
73
+
74
+ def el
75
+ @el ||= wd_element
76
+ end
77
+
78
+ def ordered_hash(selector)
79
+ case selector
80
+ when Hash
81
+ selector
82
+ when Array
83
+ Hash[*selector]
84
+ else
85
+ raise ArgumentError, "couldn't create hash for #{selector.inspect}"
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+
6
+ if ENV['COVERAGE']
7
+ require 'coveralls'
8
+ require 'simplecov'
9
+ require 'simplecov-console'
10
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new [Coveralls::SimpleCov::Formatter,
11
+ SimpleCov::Formatter::HTMLFormatter,
12
+ SimpleCov::Formatter::Console]
13
+ SimpleCov.start do
14
+ add_filter %r{/spec/}
15
+ add_filter 'lib/watir/elements/html_elements.rb'
16
+ add_filter 'lib/watir/elements/svg_elements.rb'
17
+ add_filter 'lib/watirspec'
18
+ refuse_coverage_drop
19
+ end
20
+ end
21
+
22
+ require 'watir'
23
+ require 'locator_spec_helper'
24
+ require 'rspec'