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,160 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'watirspec_helper'
4
+
5
+ module Watir
6
+ describe Image do
7
+ before do
8
+ browser.goto(WatirSpec.url_for('images.html'))
9
+ end
10
+
11
+ # Exists method
12
+ describe '#exists?' do
13
+ it 'returns true when the image exists' do
14
+ expect(browser.image(id: 'square')).to exist
15
+ expect(browser.image(id: /square/)).to exist
16
+ expect(browser.image(src: 'images/circle.png')).to exist
17
+ expect(browser.image(src: /circle/)).to exist
18
+ expect(browser.image(alt: 'circle')).to exist
19
+ expect(browser.image(alt: /cir/)).to exist
20
+ expect(browser.image(title: 'Circle')).to exist
21
+ end
22
+
23
+ it 'returns the first image if given no args' do
24
+ expect(browser.image).to exist
25
+ end
26
+
27
+ it "returns false when the image doesn't exist" do
28
+ expect(browser.image(id: 'no_such_id')).not_to exist
29
+ expect(browser.image(id: /no_such_id/)).not_to exist
30
+ expect(browser.image(src: 'no_such_src')).not_to exist
31
+ expect(browser.image(src: /no_such_src/)).not_to exist
32
+ expect(browser.image(alt: 'no_such_alt')).not_to exist
33
+ expect(browser.image(alt: /no_such_alt/)).not_to exist
34
+ expect(browser.image(title: 'no_such_title')).not_to exist
35
+ expect(browser.image(title: /no_such_title/)).not_to exist
36
+ end
37
+
38
+ it "raises TypeError when 'what' argument is invalid" do
39
+ expect { browser.image(id: 3.14).exists? }.to raise_error(TypeError)
40
+ end
41
+ end
42
+
43
+ # Attribute methods
44
+ describe '#alt' do
45
+ it 'returns the alt attribute of the image if the image exists' do
46
+ expect(browser.image(id: 'square').alt).to eq 'square'
47
+ expect(browser.image(title: 'Circle').alt).to eq 'circle'
48
+ end
49
+
50
+ it "returns an empty string if the image exists and the attribute doesn't" do
51
+ expect(browser.image(index: 0).alt).to eq ''
52
+ end
53
+
54
+ it "raises UnknownObjectException if the image doesn't exist" do
55
+ expect { browser.image(index: 1337).alt }.to raise_unknown_object_exception
56
+ end
57
+ end
58
+
59
+ describe '#id' do
60
+ it 'returns the id attribute of the image if the image exists' do
61
+ expect(browser.image(title: 'Square').id).to eq 'square'
62
+ end
63
+
64
+ it "returns an empty string if the image exists and the attribute doesn't" do
65
+ expect(browser.image(index: 0).id).to eq ''
66
+ end
67
+
68
+ it "raises UnknownObjectException if the image doesn't exist" do
69
+ expect { browser.image(index: 1337).id }.to raise_unknown_object_exception
70
+ end
71
+ end
72
+
73
+ describe '#src' do
74
+ it 'returns the src attribute of the image if the image exists' do
75
+ expect(browser.image(id: 'square').src).to include('square.png')
76
+ end
77
+
78
+ it "returns an empty string if the image exists and the attribute doesn't" do
79
+ expect(browser.image(index: 0).src).to eq ''
80
+ end
81
+
82
+ it "raises UnknownObjectException if the image doesn't exist" do
83
+ expect { browser.image(index: 1337).src }.to raise_unknown_object_exception
84
+ end
85
+ end
86
+
87
+ describe '#title' do
88
+ it 'returns the title attribute of the image if the image exists' do
89
+ expect(browser.image(id: 'square').title).to eq 'Square'
90
+ end
91
+
92
+ it "returns an empty string if the image exists and the attribute doesn't" do
93
+ expect(browser.image(index: 0).title).to eq ''
94
+ end
95
+
96
+ it "raises UnknownObjectException if the image doesn't exist" do
97
+ expect { browser.image(index: 1337).title }.to raise_unknown_object_exception
98
+ end
99
+ end
100
+
101
+ describe '#respond_to?' do
102
+ it 'returns true for all attribute methods' do
103
+ expect(browser.image(index: 0)).to respond_to(:class_name)
104
+ expect(browser.image(index: 0)).to respond_to(:id)
105
+ expect(browser.image(index: 0)).to respond_to(:style)
106
+ expect(browser.image(index: 0)).to respond_to(:text)
107
+ end
108
+ end
109
+
110
+ # Manipulation methods
111
+ describe '#click' do
112
+ it "raises UnknownObjectException when the image doesn't exist" do
113
+ expect { browser.image(id: 'missing_attribute').click }.to raise_unknown_object_exception
114
+ expect { browser.image(class: 'missing_attribute').click }.to raise_unknown_object_exception
115
+ expect { browser.image(src: 'missing_attribute').click }.to raise_unknown_object_exception
116
+ expect { browser.image(alt: 'missing_attribute').click }.to raise_unknown_object_exception
117
+ end
118
+ end
119
+
120
+ describe '#height' do
121
+ it 'returns the height of the image if the image exists' do
122
+ expect(browser.image(id: 'square').height).to eq 88
123
+ end
124
+
125
+ it "raises UnknownObjectException if the image doesn't exist" do
126
+ expect { browser.image(index: 1337).height }.to raise_unknown_object_exception
127
+ end
128
+ end
129
+
130
+ describe '#width' do
131
+ it 'returns the width of the image if the image exists' do
132
+ expect(browser.image(id: 'square').width).to eq 88
133
+ end
134
+
135
+ it "raises UnknownObjectException if the image doesn't exist" do
136
+ expect { browser.image(index: 1337).width }.to raise_unknown_object_exception
137
+ end
138
+ end
139
+
140
+ # Other
141
+ describe '#loaded?' do
142
+ it 'returns true if the image has been loaded' do
143
+ expect(browser.image(title: 'Circle')).to be_loaded
144
+ expect(browser.image(alt: 'circle')).to be_loaded
145
+ expect(browser.image(alt: /circle/)).to be_loaded
146
+ end
147
+
148
+ it 'returns false if the image has not been loaded' do
149
+ expect(browser.image(id: 'no_such_file')).not_to be_loaded
150
+ end
151
+
152
+ it "raises UnknownObjectException if the image doesn't exist" do
153
+ expect { browser.image(id: 'no_such_image').loaded? }.to raise_unknown_object_exception
154
+ expect { browser.image(src: 'no_such_image').loaded? }.to raise_unknown_object_exception
155
+ expect { browser.image(alt: 'no_such_image').loaded? }.to raise_unknown_object_exception
156
+ expect { browser.image(index: 1337).loaded? }.to raise_unknown_object_exception
157
+ end
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'watirspec_helper'
4
+
5
+ module Watir
6
+ describe ImageCollection do
7
+ before do
8
+ browser.goto(WatirSpec.url_for('images.html'))
9
+ end
10
+
11
+ describe 'with selectors' do
12
+ it 'returns the matching elements' do
13
+ expect(browser.images(alt: 'circle').to_a).to eq [browser.image(alt: 'circle')]
14
+ end
15
+ end
16
+
17
+ describe '#length' do
18
+ it 'returns the number of images' do
19
+ expect(browser.images.length).to eq 10
20
+ end
21
+ end
22
+
23
+ describe '#[]' do
24
+ it 'returns the image at the given index' do
25
+ expect(browser.images[5].id).to eq 'square'
26
+ end
27
+ end
28
+
29
+ describe '#each' do
30
+ it 'iterates through images correctly' do
31
+ count = 0
32
+
33
+ browser.images.each_with_index do |c, index|
34
+ expect(c.id).to eq browser.image(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,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'watirspec_helper'
4
+
5
+ module Watir
6
+ describe Input do
7
+ before do
8
+ browser.goto WatirSpec.url_for('forms_with_input_elements.html')
9
+ end
10
+
11
+ describe '#type' do
12
+ it 'returns an email type' do
13
+ expect(browser.input(name: 'html5_email').type).to eq 'email'
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,113 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'watirspec_helper'
4
+
5
+ module Watir
6
+ describe 'Ins' 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 'ins' exists" do
14
+ expect(browser.ins(id: 'lead')).to exist
15
+ expect(browser.ins(id: /lead/)).to exist
16
+ expect(browser.ins(text: 'This is an inserted text tag 1')).to exist
17
+ expect(browser.ins(text: /This is an inserted text tag 1/)).to exist
18
+ expect(browser.ins(class: 'lead')).to exist
19
+ expect(browser.ins(class: /lead/)).to exist
20
+ expect(browser.ins(index: 0)).to exist
21
+ expect(browser.ins(xpath: "//ins[@id='lead']")).to exist
22
+ end
23
+
24
+ it 'returns the first ins if given no args' do
25
+ expect(browser.ins).to exist
26
+ end
27
+
28
+ it "returns false if the element doesn't exist" do
29
+ expect(browser.ins(id: 'no_such_id')).not_to exist
30
+ expect(browser.ins(id: /no_such_id/)).not_to exist
31
+ expect(browser.ins(text: 'no_such_text')).not_to exist
32
+ expect(browser.ins(text: /no_such_text/)).not_to exist
33
+ expect(browser.ins(class: 'no_such_class')).not_to exist
34
+ expect(browser.ins(class: /no_such_class/)).not_to exist
35
+ expect(browser.ins(index: 1337)).not_to exist
36
+ expect(browser.ins(xpath: "//ins[@id='no_such_id']")).not_to exist
37
+ end
38
+
39
+ it "raises TypeError when 'what' argument is invalid" do
40
+ expect { browser.ins(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.ins(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.ins(index: 2).id).to eq ''
52
+ end
53
+
54
+ it "raises UnknownObjectException if the ins doesn't exist" do
55
+ expect { browser.ins(id: 'no_such_id').id }.to raise_unknown_object_exception
56
+ expect { browser.ins(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.ins(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.ins(index: 2).title).to eq ''
67
+ end
68
+
69
+ it "raises UnknownObjectException if the ins doesn't exist" do
70
+ expect { browser.ins(id: 'no_such_id').title }.to raise_unknown_object_exception
71
+ expect { browser.ins(xpath: "//ins[@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 ins' do
77
+ expect(browser.ins(index: 1).text).to eq 'This is an inserted text tag 2'
78
+ end
79
+
80
+ it "returns an empty string if the element doesn't contain any text" do
81
+ expect(browser.ins(index: 3).text).to eq ''
82
+ end
83
+
84
+ it "raises UnknownObjectException if the ins doesn't exist" do
85
+ expect { browser.ins(id: 'no_such_id').text }.to raise_unknown_object_exception
86
+ expect { browser.ins(xpath: "//ins[@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.ins(index: 0)).to respond_to(:class_name)
93
+ expect(browser.ins(index: 0)).to respond_to(:id)
94
+ expect(browser.ins(index: 0)).to respond_to(:title)
95
+ expect(browser.ins(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.ins(class: 'footer').text).not_to include('Javascript')
103
+ browser.ins(class: 'footer').click
104
+ expect(browser.ins(class: 'footer').text).to include('Javascript')
105
+ end
106
+
107
+ it "raises UnknownObjectException if the ins doesn't exist" do
108
+ expect { browser.ins(id: 'no_such_id').click }.to raise_unknown_object_exception
109
+ expect { browser.ins(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 'Inses' 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.inses(class: 'lead').to_a).to eq [browser.ins(class: 'lead')]
14
+ end
15
+ end
16
+
17
+ describe '#length' do
18
+ it 'returns the number of inses' do
19
+ expect(browser.inses.length).to eq 5
20
+ end
21
+ end
22
+
23
+ describe '#[]' do
24
+ it 'returns the ins at the given index' do
25
+ expect(browser.inses[0].id).to eq 'lead'
26
+ end
27
+ end
28
+
29
+ describe '#each' do
30
+ it 'iterates through inses correctly' do
31
+ count = 0
32
+
33
+ browser.inses.each_with_index do |s, index|
34
+ expect(s.id).to eq browser.ins(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,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'watirspec_helper'
4
+
5
+ module Watir
6
+ describe Label 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 element exists' do
14
+ expect(browser.label(id: 'first_label')).to exist
15
+ expect(browser.label(id: /first_label/)).to exist
16
+ expect(browser.label(for: 'new_user_first_name')).to exist
17
+ expect(browser.label(for: /new_user_first_name/)).to exist
18
+ expect(browser.label(text: 'First name')).to exist
19
+ expect(browser.label(text: /First name/)).to exist
20
+ expect(browser.label(index: 0)).to exist
21
+ expect(browser.label(xpath: "//label[@id='first_label']")).to exist
22
+ end
23
+
24
+ it 'returns the first label if given no args' do
25
+ expect(browser.label).to exist
26
+ end
27
+
28
+ it 'returns false if the element does not exist' do
29
+ expect(browser.label(id: 'no_such_id')).not_to exist
30
+ expect(browser.label(id: /no_such_id/)).not_to exist
31
+ expect(browser.label(text: 'no_such_text')).not_to exist
32
+ expect(browser.label(text: /no_such_text/)).not_to exist
33
+ expect(browser.label(index: 1337)).not_to exist
34
+ expect(browser.label(xpath: "//input[@id='no_such_id']")).not_to exist
35
+ end
36
+
37
+ it "raises TypeError when 'what' argument is invalid" do
38
+ expect { browser.label(id: 3.14).exists? }.to raise_error(TypeError)
39
+ end
40
+ end
41
+
42
+ describe 'click' do
43
+ it 'fires the onclick event' do
44
+ browser.label(id: 'first_label').click
45
+ expect(messages.first).to eq 'label'
46
+ end
47
+ end
48
+
49
+ # Attribute methods
50
+ describe '#id' do
51
+ it 'returns the id attribute if the label exists' do
52
+ expect(browser.label(index: 0).id).to eq 'first_label'
53
+ end
54
+
55
+ it "raises UnknownObjectException if the label doesn't exist" do
56
+ expect { browser.label(index: 1337).id }.to raise_unknown_object_exception
57
+ end
58
+ end
59
+
60
+ describe '#for' do
61
+ it "returns the 'for' attribute if the label exists" do
62
+ expect(browser.label(index: 0).for).to eq 'new_user_first_name'
63
+ end
64
+
65
+ it "raises UnknownObjectException if the label doesn't exist" do
66
+ expect { browser.label(index: 1337).for }.to raise_unknown_object_exception
67
+ end
68
+ end
69
+
70
+ describe '#respond_to?' do
71
+ it 'returns true for all attribute methods' do
72
+ expect(browser.label(index: 0)).to respond_to(:id)
73
+ expect(browser.label(index: 0)).to respond_to(:for)
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'watirspec_helper'
4
+
5
+ module Watir
6
+ describe LabelCollection 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.labels(for: 'new_user_first_name').to_a).to eq [browser.label(for: 'new_user_first_name')]
14
+ end
15
+ end
16
+
17
+ describe '#length' do
18
+ it 'returns the number of labels' do
19
+ expect(browser.labels.length).to eq 45
20
+ end
21
+ end
22
+
23
+ describe '#[]' do
24
+ it 'returns the label at the given index' do
25
+ expect(browser.labels[0].id).to eq 'first_label'
26
+ end
27
+ end
28
+
29
+ describe '#each' do
30
+ it 'iterates through labels correctly' do
31
+ count = 0
32
+
33
+ browser.labels.each_with_index do |l, index|
34
+ expect(l.id).to eq browser.label(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,99 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'watirspec_helper'
4
+
5
+ module Watir
6
+ describe LI 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 'li' exists" do
14
+ expect(browser.li(id: 'non_link_1')).to exist
15
+ expect(browser.li(id: /non_link_1/)).to exist
16
+ expect(browser.li(text: 'Non-link 3')).to exist
17
+ expect(browser.li(text: /Non-link 3/)).to exist
18
+ expect(browser.li(class: 'nonlink')).to exist
19
+ expect(browser.li(class: /nonlink/)).to exist
20
+ expect(browser.li(index: 0)).to exist
21
+ expect(browser.li(xpath: "//li[@id='non_link_1']")).to exist
22
+ end
23
+
24
+ it 'returns the first element if given no args' do
25
+ expect(browser.li).to exist
26
+ end
27
+
28
+ it "returns false if the 'li' doesn't exist" do
29
+ expect(browser.li(id: 'no_such_id')).not_to exist
30
+ expect(browser.li(id: /no_such_id/)).not_to exist
31
+ expect(browser.li(text: 'no_such_text')).not_to exist
32
+ expect(browser.li(text: /no_such_text/)).not_to exist
33
+ expect(browser.li(class: 'no_such_class')).not_to exist
34
+ expect(browser.li(class: /no_such_class/)).not_to exist
35
+ expect(browser.li(index: 1337)).not_to exist
36
+ expect(browser.li(xpath: "//li[@id='no_such_id']")).not_to exist
37
+ end
38
+
39
+ it "raises TypeError when 'what' argument is invalid" do
40
+ expect { browser.li(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.li(class: 'nonlink').id).to eq 'non_link_1'
48
+ end
49
+
50
+ it "returns an empty string if the element exists and the attribute doesn't" do
51
+ expect(browser.li(index: 0).id).to eq ''
52
+ end
53
+
54
+ it "raises UnknownObjectException if the li doesn't exist" do
55
+ expect { browser.li(id: 'no_such_id').id }.to raise_unknown_object_exception
56
+ expect { browser.li(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.li(id: 'non_link_1').title).to eq 'This is not a link!'
63
+ end
64
+
65
+ it "returns an empty string if the element exists and the attribute doesn't" do
66
+ expect(browser.li(index: 0).title).to eq ''
67
+ end
68
+
69
+ it "raises UnknownObjectException if the li doesn't exist" do
70
+ expect { browser.li(id: 'no_such_id').title }.to raise_unknown_object_exception
71
+ expect { browser.li(xpath: "//li[@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 li' do
77
+ expect(browser.li(id: 'non_link_1').text).to eq 'Non-link 1'
78
+ end
79
+
80
+ it "returns an empty string if the element doesn't contain any text" do
81
+ expect(browser.li(index: 0).text).to eq ''
82
+ end
83
+
84
+ it "raises UnknownObjectException if the li doesn't exist" do
85
+ expect { browser.li(id: 'no_such_id').text }.to raise_unknown_object_exception
86
+ expect { browser.li(xpath: "//li[@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.li(index: 0)).to respond_to(:class_name)
93
+ expect(browser.li(index: 0)).to respond_to(:id)
94
+ expect(browser.li(index: 0)).to respond_to(:text)
95
+ expect(browser.li(index: 0)).to respond_to(:title)
96
+ end
97
+ end
98
+ end
99
+ end