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,106 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'watirspec_helper'
4
+
5
+ module Watir
6
+ describe Hidden do
7
+ before do
8
+ browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
9
+ end
10
+
11
+ # Exist method
12
+ describe '#exists?' do
13
+ it 'returns true if the element exists' do
14
+ expect(browser.hidden(id: 'new_user_interests_dolls')).to exist
15
+ expect(browser.hidden(id: /new_user_interests_dolls/)).to exist
16
+ expect(browser.hidden(name: 'new_user_interests')).to exist
17
+ expect(browser.hidden(name: /new_user_interests/)).to exist
18
+ expect(browser.hidden(value: 'dolls')).to exist
19
+ expect(browser.hidden(value: /dolls/)).to exist
20
+ expect(browser.hidden(class: 'fun')).to exist
21
+ expect(browser.hidden(class: /fun/)).to exist
22
+ expect(browser.hidden(index: 0)).to exist
23
+ expect(browser.hidden(xpath: "//input[@id='new_user_interests_dolls']")).to exist
24
+ end
25
+
26
+ it 'returns the first hidden if given no args' do
27
+ expect(browser.hidden).to exist
28
+ end
29
+
30
+ it 'returns false if the element does not exist' do
31
+ expect(browser.hidden(id: 'no_such_id')).not_to exist
32
+ expect(browser.hidden(id: /no_such_id/)).not_to exist
33
+ expect(browser.hidden(name: 'no_such_name')).not_to exist
34
+ expect(browser.hidden(name: /no_such_name/)).not_to exist
35
+ expect(browser.hidden(value: 'no_such_value')).not_to exist
36
+ expect(browser.hidden(value: /no_such_value/)).not_to exist
37
+ expect(browser.hidden(text: 'no_such_text')).not_to exist
38
+ expect(browser.hidden(text: /no_such_text/)).not_to exist
39
+ expect(browser.hidden(class: 'no_such_class')).not_to exist
40
+ expect(browser.hidden(class: /no_such_class/)).not_to exist
41
+ expect(browser.hidden(index: 1337)).not_to exist
42
+ expect(browser.hidden(xpath: "//input[@id='no_such_id']")).not_to exist
43
+ end
44
+
45
+ it "raises TypeError when 'what' argument is invalid" do
46
+ expect { browser.hidden(id: 3.14).exists? }.to raise_error(TypeError)
47
+ end
48
+ end
49
+
50
+ # Attribute methods
51
+ describe '#id' do
52
+ it 'returns the id attribute if the text field exists' do
53
+ expect(browser.hidden(index: 1).id).to eq 'new_user_interests_dolls'
54
+ end
55
+
56
+ it "raises UnknownObjectException if the text field doesn't exist" do
57
+ expect { browser.hidden(index: 1337).id }.to raise_unknown_object_exception
58
+ end
59
+ end
60
+
61
+ describe '#name' do
62
+ it 'returns the name attribute if the text field exists' do
63
+ expect(browser.hidden(index: 1).name).to eq 'new_user_interests'
64
+ end
65
+
66
+ it "raises UnknownObjectException if the text field doesn't exist" do
67
+ expect { browser.hidden(index: 1337).name }.to raise_unknown_object_exception
68
+ end
69
+ end
70
+
71
+ describe '#type' do
72
+ it 'returns the type attribute if the text field exists' do
73
+ expect(browser.hidden(index: 1).type).to eq 'hidden'
74
+ end
75
+
76
+ it "raises UnknownObjectException if the text field doesn't exist" do
77
+ expect { browser.hidden(index: 1337).type }.to raise_unknown_object_exception
78
+ end
79
+ end
80
+
81
+ describe '#value' do
82
+ it 'returns the value attribute if the text field exists' do
83
+ expect(browser.hidden(index: 1).value).to eq 'dolls'
84
+ end
85
+
86
+ it "raises UnknownObjectException if the text field doesn't exist" do
87
+ expect { browser.hidden(index: 1337).value }.to raise_unknown_object_exception
88
+ end
89
+ end
90
+
91
+ describe '#click' do
92
+ it 'raises ObjectDisabledException when attempting to click' do
93
+ expect { browser.hidden(index: 1337).click }.to raise_object_disabled_exception
94
+ end
95
+ end
96
+
97
+ describe '#respond_to?' do
98
+ it 'returns true for all attribute methods' do
99
+ expect(browser.hidden(index: 1)).to respond_to(:id)
100
+ expect(browser.hidden(index: 1)).to respond_to(:name)
101
+ expect(browser.hidden(index: 1)).to respond_to(:type)
102
+ expect(browser.hidden(index: 1)).to respond_to(:value)
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'watirspec_helper'
4
+
5
+ module Watir
6
+ describe HiddenCollection do
7
+ before do
8
+ browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
9
+ end
10
+
11
+ describe 'with selectors' do
12
+ it 'returns the matching elements' do
13
+ expect(browser.hiddens(value: 'dolls').to_a).to eq [browser.hidden(value: 'dolls')]
14
+ end
15
+ end
16
+
17
+ describe '#length' do
18
+ it 'returns the number of hiddens' do
19
+ expect(browser.hiddens.length).to eq 2
20
+ end
21
+ end
22
+
23
+ describe '#[]' do
24
+ it 'returns the Hidden at the given index' do
25
+ expect(browser.hiddens[1].id).to eq 'new_user_interests_dolls'
26
+ end
27
+ end
28
+
29
+ describe '#each' do
30
+ it 'iterates through hiddens correctly' do
31
+ count = 0
32
+
33
+ browser.hiddens.each_with_index do |h, index|
34
+ expect(h.name).to eq browser.hidden(index: index).name
35
+ expect(h.id).to eq browser.hidden(index: index).id
36
+ expect(h.value).to eq browser.hidden(index: index).value
37
+
38
+ count += 1
39
+ end
40
+
41
+ expect(count).to be > 0
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'watirspec_helper'
4
+
5
+ module Watir
6
+ describe Heading 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 element exists' do
14
+ expect(browser.h1(id: 'header1')).to exist
15
+ expect(browser.h2(id: /header2/)).to exist
16
+ expect(browser.h3(text: 'Header 3')).to exist
17
+ expect(browser.h4(text: /Header 4/)).to exist
18
+ expect(browser.h5(index: 0)).to exist
19
+ expect(browser.h6(index: 0)).to exist
20
+ expect(browser.h1(xpath: "//h1[@id='first_header']")).to exist
21
+ end
22
+
23
+ it 'returns the first h1 if given no args' do
24
+ expect(browser.h1).to exist
25
+ end
26
+
27
+ it 'returns false if the element does not exist' do
28
+ expect(browser.h1(id: 'no_such_id')).not_to exist
29
+ expect(browser.h1(id: /no_such_id/)).not_to exist
30
+ expect(browser.h1(text: 'no_such_text')).not_to exist
31
+ expect(browser.h1(text: /no_such_text 1/)).not_to exist
32
+ expect(browser.h1(index: 1337)).not_to exist
33
+ expect(browser.h1(xpath: "//p[@id='no_such_id']")).not_to exist
34
+ end
35
+
36
+ it "raises TypeError when 'what' argument is invalid" do
37
+ expect { browser.h1(id: 3.14).exists? }.to raise_error(TypeError)
38
+ end
39
+ end
40
+
41
+ # Attribute methods
42
+ describe '#id' do
43
+ it 'returns the id attribute' do
44
+ expect(browser.h1(index: 0).id).to eq 'first_header'
45
+ end
46
+
47
+ it "returns an empty string if the element exists and the attribute doesn't" do
48
+ expect(browser.h3(index: 0).id).to eq ''
49
+ end
50
+
51
+ it "raises UnknownObjectException if the p doesn't exist" do
52
+ expect { browser.h1(id: 'no_such_id').id }.to raise_unknown_object_exception
53
+ expect { browser.h1(index: 1337).id }.to raise_unknown_object_exception
54
+ end
55
+ end
56
+
57
+ describe '#text' do
58
+ it 'returns the text of the element' do
59
+ expect(browser.h1(index: 0).text).to eq 'Header 1'
60
+ end
61
+
62
+ it "returns an empty string if the element doesn't contain any text" do
63
+ expect(browser.h6(id: 'empty_header').text).to eq ''
64
+ end
65
+
66
+ it "raises UnknownObjectException if the p doesn't exist" do
67
+ expect { browser.h1(id: 'no_such_id').text }.to raise_unknown_object_exception
68
+ expect { browser.h1(xpath: "//h1[@id='no_such_id']").text }.to raise_unknown_object_exception
69
+ end
70
+ end
71
+
72
+ describe '#respond_to?' do
73
+ it 'returns true for all attribute methods' do
74
+ expect(browser.h1(index: 0)).to respond_to(:class_name)
75
+ expect(browser.h1(index: 0)).to respond_to(:id)
76
+ expect(browser.h1(index: 0)).to respond_to(:text)
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'watirspec_helper'
4
+
5
+ module Watir
6
+ describe HeadingCollection 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.h1s(class: 'primary').to_a).to eq [browser.h1(class: 'primary')]
14
+ end
15
+ end
16
+
17
+ describe '#length' do
18
+ it 'returns the number of h1s' do
19
+ expect(browser.h2s.length).to eq 9
20
+ end
21
+ end
22
+
23
+ describe '#[]' do
24
+ it 'returns the h1 at the given index' do
25
+ expect(browser.h1s[0].id).to eq 'first_header'
26
+ end
27
+ end
28
+
29
+ describe '#each' do
30
+ it 'iterates through header collections correctly' do
31
+ lengths = (1..6).collect do |i|
32
+ collection = browser.send(:"h#{i}s")
33
+ collection.each_with_index do |h, index|
34
+ expect(h.id).to eq browser.send(:"h#{i}", index: index).id
35
+ end
36
+ collection.length
37
+ end
38
+ expect(lengths).to eq [2, 9, 2, 1, 1, 2]
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,244 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'watirspec_helper'
4
+
5
+ #
6
+ # TODO: fix duplication with frame_spec
7
+ #
8
+
9
+ module Watir
10
+ describe IFrame do
11
+ before do
12
+ browser.goto(WatirSpec.url_for('iframes.html'))
13
+ end
14
+
15
+ it 'handles crossframe javascript' do
16
+ browser.goto WatirSpec.url_for('iframes.html')
17
+
18
+ expect(browser.iframe(id: 'iframe_1').text_field(name: 'senderElement').value).to eq 'send_this_value'
19
+ expect(browser.iframe(id: 'iframe_2').text_field(name: 'recieverElement').value).to eq 'old_value'
20
+ browser.iframe(id: 'iframe_1').button(id: 'send').click
21
+ expect(browser.iframe(id: 'iframe_2').text_field(name: 'recieverElement').value).to eq 'send_this_value'
22
+ end
23
+
24
+ it 'locates an element defined by Selenium Element' do
25
+ iframe = browser.iframe(id: 'iframe_1').locate
26
+ se_element = iframe.instance_variable_get(:@element)
27
+ iframe2 = browser.element(element: se_element).to_subtype
28
+ expect(iframe2).to eq iframe
29
+ end
30
+
31
+ describe '#wd' do
32
+ it 'returns a Watir::FramedDriver instance' do
33
+ iframe = browser.iframe(id: 'iframe_1')
34
+ expect(iframe.wd).to be_a(Watir::FramedDriver)
35
+ end
36
+
37
+ it 'properly delegates driver commands' do
38
+ iframe = browser.iframe(id: 'iframe_1')
39
+ expect(iframe.wd.title).to eq 'Iframes'
40
+ end
41
+
42
+ it 'properly delegates element commands' do
43
+ iframe = browser.iframe(id: 'iframe_1')
44
+ expect(iframe.wd.attribute('id')).to eq 'iframe_1'
45
+ end
46
+ end
47
+
48
+ describe '#exist?' do
49
+ it 'returns true if the iframe exists' do
50
+ expect(browser.iframe(id: 'iframe_1')).to exist
51
+ expect(browser.iframe(name: 'iframe1')).to exist
52
+ expect(browser.iframe(index: 0)).to exist
53
+ expect(browser.iframe(class: 'half')).to exist
54
+ expect(browser.iframe(xpath: "//iframe[@id='iframe_1']")).to exist
55
+ expect(browser.iframe(src: 'iframe_1.html')).to exist
56
+ expect(browser.iframe(id: /iframe/)).to exist
57
+ expect(browser.iframe(name: /iframe/)).to exist
58
+ expect(browser.iframe(src: /iframe_1/)).to exist
59
+ expect(browser.iframe(class: /half/)).to exist
60
+ end
61
+
62
+ it 'returns the first iframe if given no args' do
63
+ expect(browser.iframe).to exist
64
+ end
65
+
66
+ it "returns false if the iframe doesn't exist" do
67
+ expect(browser.iframe(id: 'no_such_id')).not_to exist
68
+ expect(browser.iframe(name: 'no_such_text')).not_to exist
69
+ expect(browser.iframe(index: 1337)).not_to exist
70
+ expect(browser.iframe(src: 'no_such_src')).not_to exist
71
+ expect(browser.iframe(class: 'no_such_class')).not_to exist
72
+ expect(browser.iframe(id: /no_such_id/)).not_to exist
73
+ expect(browser.iframe(name: /no_such_text/)).not_to exist
74
+ expect(browser.iframe(src: /no_such_src/)).not_to exist
75
+ expect(browser.iframe(class: /no_such_class/)).not_to exist
76
+ expect(browser.iframe(xpath: "//iframe[@id='no_such_id']")).not_to exist
77
+ end
78
+
79
+ it 'returns true if an element in an iframe does exist' do
80
+ expect(browser.iframe.element(css: '#senderElement')).to exist
81
+ expect(browser.iframe.element(id: 'senderElement')).to exist
82
+ end
83
+
84
+ it 'returns true for multiple elements that exist in an iframe with a parent selector' do
85
+ expect(browser.div(class: 'wrapper').iframe.element(id: 'first_grandson')).to exist
86
+ expect(browser.div(class: 'wrapper').iframe.element(id: 'second_grandson')).to exist
87
+ end
88
+
89
+ it 'returns false if an element in an iframe does not exist' do
90
+ expect(browser.iframe.element(css: '#no_such_id')).not_to exist
91
+ expect(browser.iframe.element(id: 'no_such_id')).not_to exist
92
+ end
93
+
94
+ it 'returns true if an element outside an iframe exists after checking for one inside that does exist' do
95
+ existing_element = browser.element(css: '#iframe_1')
96
+ expect(existing_element).to exist
97
+ expect(browser.iframe.element(css: '#senderElement')).to exist
98
+ expect(existing_element).to exist
99
+ end
100
+
101
+ it 'returns true if an element outside an iframe exists after checking for one inside that does not exist' do
102
+ existing_element = browser.element(css: '#iframe_1')
103
+ expect(existing_element).to exist
104
+ expect(browser.iframe.element(css: '#no_such_id')).not_to exist
105
+ expect(existing_element).to exist
106
+ end
107
+
108
+ it 'returns true if an element exists in a frame generated in a collection' do
109
+ nested_element = browser.body.iframes.first.div
110
+ expect(nested_element).to exist
111
+ end
112
+
113
+ it 'returns false for sub-element of a non-existing iframe' do
114
+ expect(browser.iframe(id: 'no_such_id').element).not_to exist
115
+ end
116
+
117
+ it 'handles nested iframes' do
118
+ browser.goto(WatirSpec.url_for('nested_iframes.html'))
119
+ browser.iframe(id: 'two').iframe(id: 'three').link(id: 'four').click
120
+
121
+ expect {
122
+ browser.wait_until { |b| b.title == 'definition_lists' }
123
+ }.not_to raise_exception
124
+ end
125
+
126
+ it "raises TypeError when 'what' argument is invalid" do
127
+ expect { browser.iframe(id: 3.14).exists? }.to raise_error(TypeError)
128
+ end
129
+ end
130
+
131
+ it 'handles all locators for element which do not exist' do
132
+ expect(browser.iframe(index: 0).div(id: 'invalid')).not_to exist
133
+ end
134
+
135
+ describe '#present?' do
136
+ it 'returns true if the iframe present' do
137
+ expect(browser.iframe(id: 'iframe_1')).to be_present
138
+ end
139
+
140
+ it 'returns false if the iframe is not present' do
141
+ expect(browser.iframe(id: 'no_such_id')).not_to be_present
142
+ end
143
+ end
144
+
145
+ it 'switches between iframe and parent when needed' do
146
+ expect {
147
+ browser.iframe(id: 'iframe_1').elements.each do |element|
148
+ element.text
149
+ browser.h1.text
150
+ end
151
+ }.not_to raise_exception
152
+ end
153
+
154
+ it 'switches when the frame is created by subtype' do
155
+ subtype = browser.iframe.to_subtype
156
+ expect { subtype.element.locate }.not_to raise_exception
157
+ end
158
+
159
+ it 'switches back to top level browsing context' do
160
+ # Point driver to browsing context of first iframe
161
+ browser.iframes.first.ps.locate
162
+
163
+ expect(browser.h1s.first.text).to be == 'Iframes'
164
+ end
165
+
166
+ it 'raises UnknownFrameException when accessing elements inside non-existing iframe' do
167
+ expect { browser.iframe(name: 'no_such_name').p(index: 0).id }.to raise_unknown_frame_exception
168
+ end
169
+
170
+ it 'raises UnknownFrameException when accessing a non-existing iframe' do
171
+ expect { browser.iframe(name: 'no_such_name').id }.to raise_unknown_frame_exception
172
+ end
173
+
174
+ it 'raises UnknownFrameException when accessing a non-existing subframe' do
175
+ expect { browser.iframe(name: 'iframe1').iframe(name: 'no_such_name').id }.to raise_unknown_frame_exception
176
+ end
177
+
178
+ it 'raises UnknownObjectException when accessing a non-existing element inside an existing iframe' do
179
+ expect { browser.iframe(index: 0).p(index: 1337).id }.to raise_unknown_object_exception
180
+ end
181
+
182
+ it "raises NoMethodError when trying to access attributes it doesn't have" do
183
+ expect { browser.iframe(index: 0).foo }.to raise_error(NoMethodError)
184
+ end
185
+
186
+ it 'is able to set a field' do
187
+ browser.iframe(index: 0).text_field(name: 'senderElement').set('new value')
188
+ expect(browser.iframe(index: 0).text_field(name: 'senderElement').value).to eq 'new value'
189
+ end
190
+
191
+ it 'will suggest looking in an iframe when iframes exist' do
192
+ msg = 'Maybe look in an iframe?'
193
+ expect { browser.text_field(name: 'senderElement').set('no') }.to raise_unknown_object_exception(msg)
194
+ end
195
+
196
+ it 'will suggest looking in a nested iframe when iframes exist' do
197
+ browser.goto(WatirSpec.url_for('nested_iframes.html'))
198
+ top = browser.iframe(id: 'two')
199
+ expect { top.link(id: 'four').click }.to raise_unknown_object_exception('Maybe look in an iframe?')
200
+ end
201
+
202
+ describe '#execute_script' do
203
+ it 'executes the given javascript in the specified frame',
204
+ except: {browser: :safari, reason: 'Safari does not strip text'} do
205
+ frame = browser.iframe(index: 0)
206
+ expect(frame.div(id: 'set_by_js').text).to eq ''
207
+ inner_html = 'Art consists of limitation. The most beautiful part of every picture is the frame.'
208
+ script = "document.getElementById('set_by_js').innerHTML = '#{inner_html}'"
209
+ frame.execute_script script
210
+ text = 'Art consists of limitation. The most beautiful part of every picture is the frame.'
211
+ expect(frame.div(id: 'set_by_js').text).to eq text
212
+ end
213
+ end
214
+
215
+ describe '#html' do
216
+ it 'returns the full HTML source of the iframe' do
217
+ browser.goto WatirSpec.url_for('iframes.html')
218
+ expect(browser.iframe.html.downcase).to include('<title>iframe 1</title>')
219
+ end
220
+ end
221
+
222
+ describe '#text' do
223
+ it 'returns the text inside the iframe' do
224
+ browser.goto WatirSpec.url_for('iframes.html')
225
+ expect(browser.iframe.text).to include('Frame 1')
226
+ end
227
+ end
228
+ end
229
+
230
+ describe FramedDriver do
231
+ it 'raises name error if method is not defined on driver or element' do
232
+ browser.goto WatirSpec.url_for('iframes.html')
233
+ expect(browser.iframe(id: 'iframe_1').wd).not_to respond_to :foo
234
+ expect { browser.iframe(id: 'iframe_1').wd.foo }.to raise_exception NoMethodError
235
+ end
236
+
237
+ it 'raises exception when attempting to switch to a non-frame element' do
238
+ browser.goto WatirSpec.url_for('iframes.html')
239
+ element = browser.h1.wd
240
+ fd = described_class.new(element, browser)
241
+ expect { fd.switch! }.to raise_exception Watir::Exception::UnknownFrameException
242
+ end
243
+ end
244
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'watirspec_helper'
4
+
5
+ module Watir
6
+ describe IFrameCollection do
7
+ before do
8
+ browser.goto(WatirSpec.url_for('iframes.html'))
9
+ end
10
+
11
+ describe 'with selectors' do
12
+ it 'returns the matching elements' do
13
+ expect(browser.iframes(id: 'iframe_2').to_a).to eq [browser.iframe(id: 'iframe_2')]
14
+ end
15
+ end
16
+
17
+ describe 'eql?' do
18
+ it 'matches equality of iframe with that from a collection' do
19
+ expect(browser.iframes.last).to eq browser.iframe(id: 'iframe_3')
20
+ end
21
+ end
22
+
23
+ describe '#length' do
24
+ it 'returns the correct number of iframes' do
25
+ expect(browser.iframes.length).to eq 3
26
+ end
27
+ end
28
+
29
+ describe '#[]' do
30
+ it 'returns the iframe at the given index' do
31
+ expect(browser.iframes[0].id).to eq 'iframe_1'
32
+ end
33
+ end
34
+
35
+ describe '#each' do
36
+ it 'iterates through frames correctly' do
37
+ count = 0
38
+
39
+ browser.iframes.each_with_index do |f, index|
40
+ expect(f.name).to eq browser.iframe(index: index).name
41
+ expect(f.id).to eq browser.iframe(index: index).id
42
+ count += 1
43
+ end
44
+
45
+ expect(count).to be > 0
46
+ end
47
+ end
48
+ end
49
+ end