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