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,556 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'watirspec_helper'
4
+
5
+ Options = Selenium::WebDriver::Options
6
+ Service = Selenium::WebDriver::Service
7
+ Platform = Selenium::WebDriver::Platform
8
+ Remote = Selenium::WebDriver::Remote
9
+
10
+ class BrowserDouble
11
+ def closed?
12
+ false
13
+ end
14
+ end
15
+
16
+ module Watir
17
+ describe Browser do
18
+ let(:selenium_browser) { @browser.capabilities.selenium_browser }
19
+ let(:selenium_args) { @browser.capabilities.selenium_args }
20
+ let(:generated_options) { selenium_args[:options] }
21
+ let(:browser_symbol) { WatirSpec.implementation.browser_args.first }
22
+ let(:actual_capabilities) { @browser.wd.capabilities }
23
+ let(:actual_http) { @browser.wd.instance_variable_get(:@bridge).instance_variable_get(:@http) }
24
+ let(:actual_service) { @browser.wd.instance_variable_get(:@service_manager) }
25
+ let(:actual_listener) { @browser.wd.instance_variable_get(:@bridge).instance_variable_get(:@listener) }
26
+
27
+ before(:all) do
28
+ browser&.close
29
+ $browser = BrowserDouble.new
30
+ Watir.logger.ignore(:watir_client)
31
+ end
32
+
33
+ after { @browser&.close }
34
+
35
+ after(:all) { $browser = nil }
36
+
37
+ def browser_name
38
+ case browser_symbol
39
+ when :ie
40
+ 'internet explorer'
41
+ when :edge
42
+ 'MicrosoftEdge'
43
+ else
44
+ browser_symbol.to_s
45
+ end
46
+ end
47
+
48
+ # Options:
49
+ # :url Errors
50
+ # :listener (default nil; Selenium object)
51
+ # :service (default nil; Selenium object or Built from Hash)
52
+ # :http_client (default Generated; Selenium object, or Built from Hash)
53
+ # :proxy (default nil; Selenium object, or Built from Hash and added to :options)
54
+ # :options (default nil; Selenium object, or Built from Hash)
55
+ # :capabilities (default Generated; Selenium object, or built from Hash; incompatible with options)
56
+
57
+ context 'when local', exclusive: {driver: :local_driver} do
58
+ context 'when any browser' do
59
+ it 'accepts driver instance' do
60
+ driver = Selenium::WebDriver.for browser_symbol
61
+ @browser = described_class.new(driver)
62
+
63
+ expect(actual_http).not_to be_a(Watir::HttpClient)
64
+ end
65
+
66
+ it 'accepts watir capabilities object' do
67
+ service = Service.send(browser_symbol, port: 1234)
68
+ client = Remote::Http::Default.new
69
+ capabilities = Watir::Capabilities.new(browser_symbol, service: service, http_client: client)
70
+
71
+ @browser = described_class.new(capabilities)
72
+
73
+ expect(actual_service.instance_variable_get(:@port)).to eq 1234
74
+ expect(actual_http).to eq client
75
+ end
76
+
77
+ it 'browser symbol uses designated options and watir client without service' do
78
+ @browser = described_class.new(browser_symbol)
79
+
80
+ expect(generated_options).to be_a Options.send(browser_symbol).class
81
+ expect(selenium_args).not_to include(:service)
82
+ expect(actual_http).to be_a HttpClient
83
+ end
84
+
85
+ describe 'capabilities' do
86
+ it 'accepts namespaced value', except: {browser: :ie,
87
+ reason: 'IE is more strict'} do
88
+ options = {'key:value' => 'something'}
89
+ @browser = described_class.new(browser_symbol, options: options)
90
+
91
+ expect(generated_options.instance_variable_get(:@options)['key:value']).to eq 'something'
92
+ end
93
+
94
+ it 'just options object has options and watir client without capabilities or service' do
95
+ @browser = described_class.new(options: Options.send(browser_symbol))
96
+
97
+ expect(generated_options).to be_a Options.send(browser_symbol).class
98
+ expect(selenium_args).not_to include(:service)
99
+ expect(actual_http).to be_a HttpClient
100
+ end
101
+
102
+ it 'without browser argument, just Hash with options service and client' do
103
+ service = Service.send(browser_symbol, port: 1234)
104
+ client = Remote::Http::Default.new
105
+ options = {browser_name: browser_name, unhandled_prompt_behavior: :accept_and_notify}
106
+ @browser = described_class.new(options: options, service: service, http_client: client)
107
+
108
+ expect(generated_options).to be_a Options.send(browser_symbol).class
109
+ expect(selenium_args[:service]).to eq service
110
+ expect(actual_capabilities.unhandled_prompt_behavior).to eq 'accept and notify'
111
+ expect(actual_http).to eq client
112
+ end
113
+
114
+ it 'accepts page load and script timeouts in seconds' do
115
+ options = {page_load_timeout: 11,
116
+ script_timeout: 12}
117
+ @browser = described_class.new(browser_symbol, options: options)
118
+
119
+ expect(actual_capabilities.timeouts[:page_load]).to eq 11_000
120
+ expect(actual_capabilities.timeouts[:script]).to eq 12_000
121
+ end
122
+
123
+ it 'unhandled prompt behavior defaults to ignore' do
124
+ @browser = described_class.new(browser_symbol)
125
+
126
+ expect(actual_capabilities.unhandled_prompt_behavior).to eq 'ignore'
127
+ end
128
+
129
+ it 'unhandled prompt behavior can be overridden' do
130
+ @browser = described_class.new(browser_symbol, options: {unhandled_prompt_behavior: :accept_and_notify})
131
+
132
+ expect(actual_capabilities.unhandled_prompt_behavior).to eq 'accept and notify'
133
+ end
134
+
135
+ it 'generates options from Hash', except: {browser: :safari,
136
+ reason: 'Does not accept unrecognized args'} do
137
+ options = {page_load_strategy: 'eager', args: %w[--foo --bar]}
138
+ @browser = described_class.new(browser_symbol, options: options)
139
+
140
+ expect(generated_options).to be_a Options.send(browser_symbol).class
141
+ expect(generated_options.page_load_strategy).to eq 'eager'
142
+ expect(generated_options.args).to include '--foo', '--bar'
143
+ end
144
+ end
145
+
146
+ describe 'service' do
147
+ it 'uses provided service' do
148
+ service = Service.send(browser_symbol, port: 1234)
149
+ @browser = described_class.new(browser_symbol, service: service)
150
+
151
+ expect(selenium_browser).to eq browser_symbol
152
+ expect(selenium_args[:service]).to eq service
153
+ expect(actual_service.instance_variable_get(:@port)).to eq 1234
154
+ end
155
+
156
+ it 'builds service from a Hash' do
157
+ @service = {port: 1234}
158
+ @browser = described_class.new(browser_symbol, service: @service)
159
+
160
+ expect(selenium_browser).to eq browser_symbol
161
+ expect(selenium_args[:service]).to be_a Service
162
+ expect(actual_service.instance_variable_get(:@port)).to eq 1234
163
+ end
164
+ end
165
+
166
+ describe 'http_client' do
167
+ it 'uses default HTTP Client' do
168
+ @browser = described_class.new(browser_symbol)
169
+
170
+ expect(actual_http).to be_a HttpClient
171
+ end
172
+
173
+ it 'accepts an HTTP Client object' do
174
+ client = Remote::Http::Default.new
175
+ @browser = described_class.new(browser_symbol, http_client: client)
176
+
177
+ expect(actual_http).to eq client
178
+ end
179
+
180
+ it 'builds an HTTP Client from Hash' do
181
+ client_opts = {open_timeout: 9, read_timeout: 11}
182
+ @browser = described_class.new(browser_symbol, http_client: client_opts)
183
+
184
+ expect(actual_http).to be_a HttpClient
185
+ expect(actual_http.instance_variable_get(:@open_timeout)).to eq 9
186
+ expect(actual_http.instance_variable_get(:@read_timeout)).to eq 11
187
+ end
188
+ end
189
+
190
+ it 'uses a listener' do
191
+ listener = Selenium::WebDriver::Support::AbstractEventListener.new
192
+ @browser = described_class.new(browser_symbol, listener: listener)
193
+
194
+ expect(actual_listener).to eq listener
195
+ end
196
+
197
+ describe 'proxy', except: {browser: :ie,
198
+ reason: 'Bug in Selenium 4.11 Selenium Manager'} do
199
+ it 'adds Selenium Proxy to empty Options', except: {browser: :safari,
200
+ reason: 'Safari does not like proxies'} do
201
+ proxy = Selenium::WebDriver::Proxy.new(http: '127.0.0.1:8080', ssl: '127.0.0.1:443')
202
+ @browser = described_class.new(browser_symbol, proxy: proxy)
203
+
204
+ expect(actual_capabilities.proxy).to eq proxy
205
+ end
206
+
207
+ it 'builds a Proxy from Hash for Options', except: {browser: :safari,
208
+ reason: 'Safari does not like proxies'} do
209
+ proxy = {http: '127.0.0.1:8080', ssl: '127.0.0.1:443'}
210
+ @browser = described_class.new(browser_symbol, proxy: proxy)
211
+
212
+ expect(actual_capabilities.proxy).to be_a Selenium::WebDriver::Proxy
213
+ expect(actual_capabilities.proxy.type).to eq(:manual)
214
+ expect(actual_capabilities.proxy.http).to eq('127.0.0.1:8080')
215
+ expect(actual_capabilities.proxy.ssl).to eq('127.0.0.1:443')
216
+ end
217
+
218
+ it 'builds a Proxy from Hash and adds to Options Hash', except: {browser: :safari,
219
+ reason: 'Safari does not like proxies'} do
220
+ proxy = {http: '127.0.0.1:8080', ssl: '127.0.0.1:443'}
221
+ options = {unhandled_prompt_behavior: :accept,
222
+ page_load_strategy: :eager}
223
+
224
+ @browser = described_class.new(browser_symbol, options: options, proxy: proxy)
225
+
226
+ expect(actual_capabilities.proxy).to be_a Selenium::WebDriver::Proxy
227
+ expect(actual_capabilities.proxy.type).to eq(:manual)
228
+ expect(actual_capabilities.proxy.http).to eq('127.0.0.1:8080')
229
+ expect(actual_capabilities.proxy.ssl).to eq('127.0.0.1:443')
230
+ expect(actual_capabilities.unhandled_prompt_behavior).to eq 'accept'
231
+ expect(actual_capabilities.page_load_strategy).to eq 'eager'
232
+ end
233
+
234
+ it 'builds a Proxy from Hash and adds to Options Class', except: {browser: :safari,
235
+ reason: 'Safari does not like proxies'} do
236
+ proxy = {http: '127.0.0.1:8080', ssl: '127.0.0.1:443'}
237
+ options = Options.send(browser_symbol, unhandled_prompt_behavior: :accept, page_load_strategy: :eager)
238
+
239
+ @browser = described_class.new(browser_symbol, options: options, proxy: proxy)
240
+
241
+ expect(actual_capabilities.proxy).to be_a Selenium::WebDriver::Proxy
242
+ expect(actual_capabilities.proxy.type).to eq(:manual)
243
+ expect(actual_capabilities.proxy.http).to eq('127.0.0.1:8080')
244
+ expect(actual_capabilities.proxy.ssl).to eq('127.0.0.1:443')
245
+ expect(actual_capabilities.unhandled_prompt_behavior).to eq 'accept'
246
+ expect(actual_capabilities.page_load_strategy).to eq 'eager'
247
+ end
248
+ end
249
+ end
250
+
251
+ context 'when chrome', exclusive: {browser: :chrome} do
252
+ it 'by default uses chrome, has client, options, but not capabilities' do
253
+ @browser = described_class.new
254
+
255
+ expect(generated_options).to be_a Selenium::WebDriver::Chrome::Options
256
+ expect(actual_http).to be_a HttpClient
257
+ expect(selenium_args).not_to include(:service)
258
+ end
259
+
260
+ it 'sets headless by creating options' do
261
+ @browser = described_class.new(:chrome, headless: true)
262
+
263
+ expect(generated_options.args).to include '--headless'
264
+ end
265
+
266
+ it 'sets headless in existing options class' do
267
+ @browser = described_class.new(:chrome,
268
+ options: Options.chrome,
269
+ headless: true)
270
+
271
+ expect(generated_options.args).to include '--headless'
272
+ end
273
+
274
+ it 'sets headless when existing options is a Hash' do
275
+ options = {args: ['--foo']}
276
+ @browser = described_class.new(:chrome,
277
+ options: options,
278
+ headless: true)
279
+
280
+ expect(generated_options.args).to include '--headless'
281
+ end
282
+ end
283
+
284
+ context 'when edge', exclusive: {browser: :edge} do
285
+ it 'sets headless by creating options' do
286
+ @browser = described_class.new(:edge, headless: true)
287
+
288
+ expect(generated_options.args).to include '--headless'
289
+ end
290
+
291
+ it 'sets headless in existing options class' do
292
+ @browser = described_class.new(:edge,
293
+ options: Options.edge,
294
+ headless: true)
295
+
296
+ expect(generated_options.args).to include '--headless'
297
+ end
298
+
299
+ it 'sets headless when existing options is a Hash' do
300
+ options = {args: ['--foo']}
301
+ @browser = described_class.new(:edge,
302
+ options: options,
303
+ headless: true)
304
+
305
+ expect(generated_options.args).to include '--headless'
306
+ end
307
+ end
308
+
309
+ context 'when firefox', exclusive: {browser: :firefox} do
310
+ it 'puts Profile inside Options as Hash' do
311
+ profile = Selenium::WebDriver::Firefox::Profile.new
312
+ options = {args: ['--foo'], profile: profile}
313
+
314
+ @browser = described_class.new(:firefox, options: options)
315
+
316
+ expect(generated_options.args).to include '--foo'
317
+ expect(generated_options.profile).to eq profile
318
+ end
319
+
320
+ it 'sets headless by creating options' do
321
+ @browser = described_class.new(:firefox, headless: true)
322
+
323
+ expect(generated_options.args).to include '-headless'
324
+ end
325
+
326
+ it 'sets headless in existing options class' do
327
+ @browser = described_class.new(:firefox,
328
+ options: Options.firefox,
329
+ headless: true)
330
+
331
+ expect(generated_options.args).to include '-headless'
332
+ end
333
+
334
+ it 'sets headless when existing options is a Hash' do
335
+ options = {args: ['-foo']}
336
+ @browser = described_class.new(:firefox,
337
+ options: options,
338
+ headless: true)
339
+
340
+ expect(generated_options.args).to include '-headless', '-foo'
341
+ end
342
+ end
343
+
344
+ context 'when safari', exclusive: {browser: :safari} do
345
+ after { Selenium::WebDriver::Safari.use_technology_preview = false }
346
+
347
+ it 'sets Technology Preview', exclude: {browser: :safari,
348
+ reason: 'Broken in Selenium'} do
349
+ @browser = described_class.new(:safari, technology_preview: true)
350
+
351
+ expect(Selenium::WebDriver::Safari.technology_preview?).to be true
352
+ end
353
+
354
+ it 'generates options from Hash with custom option' do
355
+ options = {page_load_strategy: 'eager', automatic_inspection: true}
356
+ @browser = described_class.new(browser_symbol, options: options)
357
+
358
+ expect(generated_options).to be_a Options.send(browser_symbol).class
359
+ expect(actual_capabilities.page_load_strategy).to eq 'eager'
360
+ expect(actual_capabilities['safari:automaticInspection']).to be true
361
+ end
362
+ end
363
+ end
364
+
365
+ # Options:
366
+ # :url (Required)
367
+ # :service (Errors)
368
+ # :listener
369
+ # :http_client (Generated or Built from Hash)
370
+ # :proxy (Built from Hash and added to :options)
371
+ # :options (Generated or Built from Hash)
372
+ # :capabilities (incompatible with options)
373
+
374
+ context 'when remote', exclusive: {driver: :remote_driver} do
375
+ let(:url) { "#{WatirSpec.implementation.browser_args.last[:url]}/" }
376
+
377
+ it 'with just url' do
378
+ @browser = described_class.new(url: url)
379
+
380
+ expect(selenium_browser).to eq :remote
381
+ expect(selenium_args).not_to include(:service)
382
+ expect(generated_options).to be_a Options.send(browser_symbol).class
383
+ expect(actual_capabilities.browser_name).to eq browser_name
384
+ expect(actual_http).to be_a HttpClient
385
+ expect(actual_http.instance_variable_get(:@server_url).to_s).to eq url
386
+ end
387
+
388
+ it 'just url & browser name has options and client but not service' do
389
+ @browser = described_class.new(browser_symbol, url: url)
390
+
391
+ expect(selenium_browser).to eq :remote
392
+ expect(selenium_args).not_to include(:service)
393
+ expect(generated_options).to be_a Options.send(browser_symbol).class
394
+ expect(actual_capabilities.browser_name).to eq browser_name
395
+ expect(actual_http).to be_a HttpClient
396
+ expect(actual_http.instance_variable_get(:@server_url).to_s).to eq url
397
+ end
398
+
399
+ it 'accepts a listener' do
400
+ listener = Selenium::WebDriver::Support::AbstractEventListener.new
401
+ @browser = described_class.new(browser_symbol,
402
+ url: url,
403
+ listener: listener)
404
+
405
+ expect(actual_listener).to eq listener
406
+
407
+ expect(selenium_browser).to eq :remote
408
+ expect(selenium_args).not_to include(:service)
409
+ expect(generated_options).to be_a Options.send(browser_symbol).class
410
+ expect(actual_capabilities.browser_name).to eq browser_name
411
+ end
412
+
413
+ it 'accepts http client object' do
414
+ client = HttpClient.new
415
+ @browser = described_class.new(browser_symbol,
416
+ url: url,
417
+ http_client: client)
418
+
419
+ expect(actual_http).to eq client
420
+
421
+ expect(selenium_browser).to eq :remote
422
+ expect(selenium_args).not_to include(:service)
423
+ expect(generated_options).to be_a Options.send(browser_symbol).class
424
+ expect(actual_capabilities.browser_name).to eq browser_name
425
+ expect(actual_http.instance_variable_get(:@server_url).to_s).to eq url
426
+ end
427
+
428
+ it 'accepts http client Hash' do
429
+ @browser = described_class.new(browser_symbol,
430
+ url: url,
431
+ http_client: {read_timeout: 30})
432
+
433
+ expect(actual_http.instance_variable_get(:@read_timeout)).to eq 30
434
+
435
+ expect(selenium_browser).to eq :remote
436
+ expect(selenium_args).not_to include(:service)
437
+ expect(generated_options).to be_a Options.send(browser_symbol).class
438
+ expect(actual_capabilities.browser_name).to eq browser_name
439
+ expect(actual_http.instance_variable_get(:@server_url).to_s).to eq url
440
+ end
441
+
442
+ it 'accepts proxy object' do
443
+ proxy = Selenium::WebDriver::Proxy.new(http: '127.0.0.1:8080', ssl: '127.0.0.1:443')
444
+ @browser = described_class.new(browser_symbol,
445
+ url: url,
446
+ proxy: proxy)
447
+
448
+ expect(actual_capabilities.proxy).to eq proxy
449
+
450
+ expect(selenium_browser).to eq :remote
451
+ expect(selenium_args).not_to include(:service)
452
+ expect(generated_options).to be_a Options.send(browser_symbol).class
453
+ expect(actual_capabilities.browser_name).to eq browser_name
454
+ expect(actual_http).to be_a HttpClient
455
+ expect(actual_http.instance_variable_get(:@server_url).to_s).to eq url
456
+ end
457
+
458
+ it 'accepts proxy Hash' do
459
+ proxy = {http: '127.0.0.1:8080', ssl: '127.0.0.1:443'}
460
+ @browser = described_class.new(browser_symbol,
461
+ url: url,
462
+ proxy: proxy)
463
+
464
+ expect(actual_capabilities.proxy).to be_a Selenium::WebDriver::Proxy
465
+ expect(actual_capabilities.proxy.type).to eq(:manual)
466
+ expect(actual_capabilities.proxy.http).to eq('127.0.0.1:8080')
467
+ expect(actual_capabilities.proxy.ssl).to eq('127.0.0.1:443')
468
+
469
+ expect(selenium_browser).to eq :remote
470
+ expect(selenium_args).not_to include(:service)
471
+ expect(generated_options).to be_a Options.send(browser_symbol).class
472
+ expect(actual_capabilities.browser_name).to eq browser_name
473
+ expect(actual_http).to be_a HttpClient
474
+ expect(actual_http.instance_variable_get(:@server_url).to_s).to eq url
475
+ end
476
+
477
+ it 'accepts options object' do
478
+ @browser = described_class.new(browser_symbol,
479
+ url: url,
480
+ options: Options.send(browser_symbol, args: ['--foo']))
481
+
482
+ expect(generated_options.args).to include('--foo')
483
+
484
+ expect(selenium_browser).to eq :remote
485
+ expect(selenium_args).not_to include(:service)
486
+ expect(generated_options).to be_a Options.send(browser_symbol).class
487
+ expect(actual_capabilities.browser_name).to eq browser_name
488
+ expect(actual_http).to be_a HttpClient
489
+ expect(actual_http.instance_variable_get(:@server_url).to_s).to eq url
490
+ end
491
+
492
+ it 'accepts options hash' do
493
+ options = {prefs: {foo: 'bar'}}
494
+ @browser = described_class.new(browser_symbol,
495
+ url: url,
496
+ options: options)
497
+
498
+ expect(selenium_browser).to eq :remote
499
+ expect(selenium_args).not_to include(:service)
500
+ expect(generated_options).to be_a Options.send(browser_symbol).class
501
+ expect(generated_options.prefs).to eq(foo: 'bar')
502
+ expect(actual_capabilities.browser_name).to eq browser_name
503
+ expect(actual_http).to be_a HttpClient
504
+ expect(actual_http.instance_variable_get(:@server_url).to_s).to eq url
505
+ end
506
+
507
+ it 'accepts capabilities object' do
508
+ capabilities = Remote::Capabilities.send(browser_symbol)
509
+ @browser = described_class.new(browser_symbol,
510
+ url: url,
511
+ capabilities: capabilities)
512
+
513
+ expect(selenium_browser).to eq :remote
514
+ expect(selenium_args).not_to include(:service)
515
+ expect(selenium_args[:capabilities]).to eq(capabilities)
516
+ expect(actual_capabilities.browser_name).to eq browser_name
517
+ expect(actual_http).to be_a HttpClient
518
+ expect(actual_http.instance_variable_get(:@server_url).to_s).to eq url
519
+ end
520
+
521
+ it 'accepts http client & capabilities objects' do
522
+ client = HttpClient.new
523
+ capabilities = Remote::Capabilities.send(browser_symbol)
524
+ @browser = described_class.new(browser_symbol,
525
+ url: url,
526
+ capabilities: capabilities,
527
+ http_client: client)
528
+
529
+ expect(selenium_browser).to eq :remote
530
+ expect(selenium_args).not_to include(:service)
531
+ expect(selenium_args[:capabilities]).to eq capabilities
532
+ expect(actual_capabilities.browser_name).to eq browser_name
533
+ expect(actual_http).to be_a HttpClient
534
+ expect(actual_http.instance_variable_get(:@server_url).to_s).to eq url
535
+ end
536
+
537
+ it 'accepts http client & proxy & options objects' do
538
+ client = HttpClient.new
539
+ proxy = Selenium::WebDriver::Proxy.new(http: '127.0.0.1:8080', ssl: '127.0.0.1:443')
540
+ options = Options.send(browser_symbol, prefs: {foo: 'bar'})
541
+ @browser = described_class.new(browser_symbol,
542
+ url: url,
543
+ proxy: proxy,
544
+ options: options,
545
+ http_client: client)
546
+
547
+ expect(selenium_browser).to eq :remote
548
+ expect(selenium_args).not_to include :service
549
+ expect(generated_options).to eq options
550
+ expect(actual_capabilities.browser_name).to eq browser_name
551
+ expect(actual_capabilities.proxy).to eq proxy
552
+ expect(actual_http).to eq client
553
+ end
554
+ end
555
+ end
556
+ end