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