selenium-webdriver 3.5.0 → 4.0.0-alpha.4

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 (366) hide show
  1. package/CHANGES.md +246 -0
  2. package/LICENSE +1 -1
  3. package/NOTICE +1 -1
  4. package/README.md +40 -40
  5. package/chrome.js +118 -134
  6. package/edge.js +43 -117
  7. package/example/chrome_android.js +8 -9
  8. package/example/chrome_mobile_emulation.js +8 -9
  9. package/example/firefox_channels.js +23 -19
  10. package/example/google_search.js +3 -3
  11. package/example/google_search_test.js +38 -27
  12. package/example/{chrome_headless.js → headless.js} +15 -7
  13. package/example/logging.js +40 -7
  14. package/firefox.js +789 -0
  15. package/http/index.js +62 -9
  16. package/http/util.js +11 -6
  17. package/ie.js +83 -97
  18. package/index.js +198 -114
  19. package/io/exec.js +29 -15
  20. package/io/index.js +1 -1
  21. package/io/zip.js +1 -1
  22. package/lib/actions.js +68 -63
  23. package/lib/atoms/get-attribute.js +86 -0
  24. package/lib/atoms/is-displayed.js +76 -76
  25. package/lib/by.js +7 -4
  26. package/lib/capabilities.js +310 -210
  27. package/lib/command.js +27 -51
  28. package/lib/error.js +100 -41
  29. package/lib/http.js +161 -120
  30. package/lib/input.js +1044 -8
  31. package/lib/logging.js +1 -5
  32. package/lib/promise.js +222 -3331
  33. package/lib/proxy.js +134 -39
  34. package/lib/session.js +2 -2
  35. package/lib/symbols.js +0 -0
  36. package/lib/until.js +1 -1
  37. package/lib/webdriver.js +717 -953
  38. package/net/index.js +21 -25
  39. package/net/portprober.js +51 -68
  40. package/package.json +17 -12
  41. package/proxy.js +0 -0
  42. package/remote/index.js +63 -44
  43. package/safari.js +41 -128
  44. package/testing/index.js +386 -315
  45. package/.npmignore +0 -2
  46. package/example/async_await_test.js +0 -68
  47. package/example/google_search_generator.js +0 -50
  48. package/example/parallel_flows.js +0 -54
  49. package/firefox/binary.js +0 -344
  50. package/firefox/extension.js +0 -224
  51. package/firefox/index.js +0 -626
  52. package/firefox/profile.js +0 -394
  53. package/lib/README +0 -5
  54. package/lib/atoms/getAttribute.js +0 -9
  55. package/lib/devmode.js +0 -34
  56. package/lib/events.js +0 -210
  57. package/lib/firefox/webdriver.json +0 -70
  58. package/lib/test/build.js +0 -151
  59. package/lib/test/data/ClickTest_testClicksASurroundingStrongTag.html +0 -11
  60. package/lib/test/data/Page.aspx +0 -17
  61. package/lib/test/data/Page.aspx.cs +0 -22
  62. package/lib/test/data/Redirect.aspx +0 -11
  63. package/lib/test/data/Redirect.aspx.cs +0 -9
  64. package/lib/test/data/Settings.StyleCop +0 -759
  65. package/lib/test/data/Web.Config +0 -59
  66. package/lib/test/data/actualXhtmlPage.xhtml +0 -14
  67. package/lib/test/data/ajaxy_page.html +0 -81
  68. package/lib/test/data/alerts.html +0 -85
  69. package/lib/test/data/banner.gif +0 -0
  70. package/lib/test/data/beach.jpg +0 -0
  71. package/lib/test/data/blank.html +0 -1
  72. package/lib/test/data/bodyTypingTest.html +0 -41
  73. package/lib/test/data/booleanAttributes.html +0 -19
  74. package/lib/test/data/child/childPage.html +0 -8
  75. package/lib/test/data/child/grandchild/grandchildPage.html +0 -8
  76. package/lib/test/data/clickEventPage.html +0 -26
  77. package/lib/test/data/click_frames.html +0 -10
  78. package/lib/test/data/click_jacker.html +0 -38
  79. package/lib/test/data/click_out_of_bounds.html +0 -23
  80. package/lib/test/data/click_out_of_bounds_overflow.html +0 -85
  81. package/lib/test/data/click_rtl.html +0 -19
  82. package/lib/test/data/click_source.html +0 -18
  83. package/lib/test/data/click_tests/click_iframe.html +0 -6
  84. package/lib/test/data/click_tests/click_in_iframe.html +0 -8
  85. package/lib/test/data/click_tests/disabled_element.html +0 -12
  86. package/lib/test/data/click_tests/disappearing_element.html +0 -62
  87. package/lib/test/data/click_tests/google_map.html +0 -15
  88. package/lib/test/data/click_tests/google_map.png +0 -0
  89. package/lib/test/data/click_tests/html5_submit_buttons.html +0 -16
  90. package/lib/test/data/click_tests/issue5237.html +0 -9
  91. package/lib/test/data/click_tests/issue5237_frame.html +0 -1
  92. package/lib/test/data/click_tests/issue5237_target.html +0 -10
  93. package/lib/test/data/click_tests/link_that_wraps.html +0 -11
  94. package/lib/test/data/click_tests/mapped_page1.html +0 -9
  95. package/lib/test/data/click_tests/mapped_page2.html +0 -9
  96. package/lib/test/data/click_tests/mapped_page3.html +0 -9
  97. package/lib/test/data/click_tests/overlapping_elements.html +0 -70
  98. package/lib/test/data/click_tests/partially_overlapping_elements.html +0 -124
  99. package/lib/test/data/click_tests/span_that_wraps.html +0 -11
  100. package/lib/test/data/click_tests/submitted_page.html +0 -9
  101. package/lib/test/data/click_tests/wrapped_overlapping_elements.html +0 -13
  102. package/lib/test/data/click_too_big.html +0 -10
  103. package/lib/test/data/click_too_big_in_frame.html +0 -11
  104. package/lib/test/data/clicks.html +0 -35
  105. package/lib/test/data/closeable_window.html +0 -8
  106. package/lib/test/data/cn-test.html +0 -156
  107. package/lib/test/data/colorPage.html +0 -20
  108. package/lib/test/data/cookies.html +0 -30
  109. package/lib/test/data/coordinates_tests/element_in_frame.html +0 -9
  110. package/lib/test/data/coordinates_tests/element_in_nested_frame.html +0 -9
  111. package/lib/test/data/coordinates_tests/page_with_element_out_of_view.html +0 -11
  112. package/lib/test/data/coordinates_tests/page_with_empty_element.html +0 -10
  113. package/lib/test/data/coordinates_tests/page_with_fixed_element.html +0 -12
  114. package/lib/test/data/coordinates_tests/page_with_hidden_element.html +0 -10
  115. package/lib/test/data/coordinates_tests/page_with_invisible_element.html +0 -10
  116. package/lib/test/data/coordinates_tests/page_with_transparent_element.html +0 -10
  117. package/lib/test/data/coordinates_tests/simple_page.html +0 -10
  118. package/lib/test/data/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  119. package/lib/test/data/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  120. package/lib/test/data/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  121. package/lib/test/data/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  122. package/lib/test/data/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  123. package/lib/test/data/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  124. package/lib/test/data/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  125. package/lib/test/data/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  126. package/lib/test/data/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  127. package/lib/test/data/css/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  128. package/lib/test/data/css/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  129. package/lib/test/data/css/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
  130. package/lib/test/data/css/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  131. package/lib/test/data/css/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  132. package/lib/test/data/css/ui-lightness/jquery-ui-1.8.10.custom.css +0 -573
  133. package/lib/test/data/cssTransform.html +0 -61
  134. package/lib/test/data/cssTransform2.html +0 -20
  135. package/lib/test/data/document_write_in_onload.html +0 -13
  136. package/lib/test/data/dragAndDropInsideScrolledDiv.html +0 -67
  137. package/lib/test/data/dragAndDropTest.html +0 -102
  138. package/lib/test/data/dragDropOverflow.html +0 -104
  139. package/lib/test/data/draggableLists.html +0 -67
  140. package/lib/test/data/droppableItems.html +0 -65
  141. package/lib/test/data/dynamic.html +0 -39
  142. package/lib/test/data/dynamicallyModifiedPage.html +0 -42
  143. package/lib/test/data/errors.html +0 -15
  144. package/lib/test/data/firefox/jetpack-sample.xpi +0 -0
  145. package/lib/test/data/firefox/sample.xpi +0 -0
  146. package/lib/test/data/firefox/webextension.xpi +0 -0
  147. package/lib/test/data/fixedFooterNoScroll.html +0 -13
  148. package/lib/test/data/fixedFooterNoScrollQuirksMode.html +0 -12
  149. package/lib/test/data/formPage.html +0 -175
  150. package/lib/test/data/formSelectionPage.html +0 -46
  151. package/lib/test/data/form_handling_js_submit.html +0 -30
  152. package/lib/test/data/framePage3.html +0 -7
  153. package/lib/test/data/frameScrollChild.html +0 -26
  154. package/lib/test/data/frameScrollPage.html +0 -14
  155. package/lib/test/data/frameScrollParent.html +0 -11
  156. package/lib/test/data/frameWithAnimals.html +0 -11
  157. package/lib/test/data/frame_switching_tests/bug4876.html +0 -9
  158. package/lib/test/data/frame_switching_tests/bug4876_iframe.html +0 -9
  159. package/lib/test/data/frame_switching_tests/deletingFrame.html +0 -29
  160. package/lib/test/data/frame_switching_tests/deletingFrame_iframe.html +0 -8
  161. package/lib/test/data/frame_switching_tests/deletingFrame_iframe2.html +0 -7
  162. package/lib/test/data/frameset.html +0 -14
  163. package/lib/test/data/framesetPage2.html +0 -7
  164. package/lib/test/data/framesetPage3.html +0 -4
  165. package/lib/test/data/globalscope.html +0 -15
  166. package/lib/test/data/hidden.html +0 -5
  167. package/lib/test/data/hidden_partially.html +0 -45
  168. package/lib/test/data/html5/blue.jpg +0 -0
  169. package/lib/test/data/html5/database.js +0 -84
  170. package/lib/test/data/html5/geolocation.js +0 -18
  171. package/lib/test/data/html5/green.jpg +0 -0
  172. package/lib/test/data/html5/red.jpg +0 -0
  173. package/lib/test/data/html5/status.html +0 -1
  174. package/lib/test/data/html5/test.appcache +0 -11
  175. package/lib/test/data/html5/yellow.jpg +0 -0
  176. package/lib/test/data/html5Page.html +0 -32
  177. package/lib/test/data/icon.gif +0 -0
  178. package/lib/test/data/idElements.html +0 -2
  179. package/lib/test/data/iframeAtBottom.html +0 -15
  180. package/lib/test/data/iframeWithAlert.html +0 -1
  181. package/lib/test/data/iframeWithIframe.html +0 -1
  182. package/lib/test/data/iframes.html +0 -11
  183. package/lib/test/data/injectableContent.html +0 -22
  184. package/lib/test/data/javascriptEnhancedForm.html +0 -30
  185. package/lib/test/data/javascriptPage.html +0 -285
  186. package/lib/test/data/jquery-1.3.2.js +0 -4376
  187. package/lib/test/data/js/jquery-1.4.4.min.js +0 -167
  188. package/lib/test/data/js/jquery-ui-1.8.10.custom.min.js +0 -782
  189. package/lib/test/data/js/skins/lightgray/content.inline.min.css +0 -1
  190. package/lib/test/data/js/skins/lightgray/content.min.css +0 -1
  191. package/lib/test/data/js/skins/lightgray/fonts/readme.md +0 -1
  192. package/lib/test/data/js/skins/lightgray/fonts/tinymce-small.dev.svg +0 -175
  193. package/lib/test/data/js/skins/lightgray/fonts/tinymce-small.eot +0 -0
  194. package/lib/test/data/js/skins/lightgray/fonts/tinymce-small.svg +0 -62
  195. package/lib/test/data/js/skins/lightgray/fonts/tinymce-small.ttf +0 -0
  196. package/lib/test/data/js/skins/lightgray/fonts/tinymce-small.woff +0 -0
  197. package/lib/test/data/js/skins/lightgray/fonts/tinymce.dev.svg +0 -153
  198. package/lib/test/data/js/skins/lightgray/fonts/tinymce.eot +0 -0
  199. package/lib/test/data/js/skins/lightgray/fonts/tinymce.svg +0 -63
  200. package/lib/test/data/js/skins/lightgray/fonts/tinymce.ttf +0 -0
  201. package/lib/test/data/js/skins/lightgray/fonts/tinymce.woff +0 -0
  202. package/lib/test/data/js/skins/lightgray/img/anchor.gif +0 -0
  203. package/lib/test/data/js/skins/lightgray/img/loader.gif +0 -0
  204. package/lib/test/data/js/skins/lightgray/img/object.gif +0 -0
  205. package/lib/test/data/js/skins/lightgray/img/trans.gif +0 -0
  206. package/lib/test/data/js/skins/lightgray/skin.ie7.min.css +0 -1
  207. package/lib/test/data/js/skins/lightgray/skin.min.css +0 -1
  208. package/lib/test/data/js/themes/modern/theme.min.js +0 -1
  209. package/lib/test/data/js/tinymce.min.js +0 -10
  210. package/lib/test/data/key_logger.html +0 -34
  211. package/lib/test/data/key_tests/remove_on_keypress.html +0 -36
  212. package/lib/test/data/keyboard_shortcut.html +0 -36
  213. package/lib/test/data/linked_image.html +0 -16
  214. package/lib/test/data/locators_tests/boolean_attribute_selected.html +0 -13
  215. package/lib/test/data/locators_tests/boolean_attribute_selected_html4.html +0 -13
  216. package/lib/test/data/longContentPage.html +0 -55
  217. package/lib/test/data/macbeth.html +0 -5255
  218. package/lib/test/data/map.png +0 -0
  219. package/lib/test/data/map_visibility.html +0 -8
  220. package/lib/test/data/markerTransparent.png +0 -0
  221. package/lib/test/data/messages.html +0 -15
  222. package/lib/test/data/meta-redirect.html +0 -11
  223. package/lib/test/data/missedJsReference.html +0 -11
  224. package/lib/test/data/modal_dialogs/modal_1.html +0 -21
  225. package/lib/test/data/modal_dialogs/modal_2.html +0 -21
  226. package/lib/test/data/modal_dialogs/modal_3.html +0 -15
  227. package/lib/test/data/modal_dialogs/modalindex.html +0 -21
  228. package/lib/test/data/mouseOver.html +0 -17
  229. package/lib/test/data/mousePositionTracker.html +0 -33
  230. package/lib/test/data/nestedElements.html +0 -164
  231. package/lib/test/data/overflow/x_auto_y_auto.html +0 -30
  232. package/lib/test/data/overflow/x_auto_y_hidden.html +0 -30
  233. package/lib/test/data/overflow/x_auto_y_scroll.html +0 -30
  234. package/lib/test/data/overflow/x_hidden_y_auto.html +0 -30
  235. package/lib/test/data/overflow/x_hidden_y_hidden.html +0 -30
  236. package/lib/test/data/overflow/x_hidden_y_scroll.html +0 -30
  237. package/lib/test/data/overflow/x_scroll_y_auto.html +0 -30
  238. package/lib/test/data/overflow/x_scroll_y_hidden.html +0 -30
  239. package/lib/test/data/overflow/x_scroll_y_scroll.html +0 -30
  240. package/lib/test/data/overflow-body.html +0 -15
  241. package/lib/test/data/pageWithOnBeforeUnloadMessage.html +0 -20
  242. package/lib/test/data/pageWithOnLoad.html +0 -6
  243. package/lib/test/data/pageWithOnUnload.html +0 -6
  244. package/lib/test/data/page_with_link_to_slow_loading_page.html +0 -6
  245. package/lib/test/data/plain.txt +0 -1
  246. package/lib/test/data/proxy/page1.html +0 -20
  247. package/lib/test/data/proxy/page2.html +0 -24
  248. package/lib/test/data/proxy/page3.html +0 -5
  249. package/lib/test/data/readOnlyPage.html +0 -24
  250. package/lib/test/data/rectangles.html +0 -40
  251. package/lib/test/data/resultPage.html +0 -25
  252. package/lib/test/data/rich_text.html +0 -161
  253. package/lib/test/data/safari/frames_benchmark.html +0 -31
  254. package/lib/test/data/screen/screen.css +0 -19
  255. package/lib/test/data/screen/screen.html +0 -72
  256. package/lib/test/data/screen/screen.js +0 -7
  257. package/lib/test/data/screen/screen_frame1.html +0 -72
  258. package/lib/test/data/screen/screen_frame2.html +0 -72
  259. package/lib/test/data/screen/screen_frames.html +0 -11
  260. package/lib/test/data/screen/screen_iframes.html +0 -12
  261. package/lib/test/data/screen/screen_too_long.html +0 -68
  262. package/lib/test/data/screen/screen_x_long.html +0 -72
  263. package/lib/test/data/screen/screen_x_too_long.html +0 -72
  264. package/lib/test/data/screen/screen_y_long.html +0 -72
  265. package/lib/test/data/screen/screen_y_too_long.html +0 -72
  266. package/lib/test/data/scroll.html +0 -27
  267. package/lib/test/data/scroll2.html +0 -21
  268. package/lib/test/data/scroll3.html +0 -8
  269. package/lib/test/data/scroll4.html +0 -7
  270. package/lib/test/data/scroll5.html +0 -18
  271. package/lib/test/data/scrolling_tests/frame_with_height_above_200.html +0 -26
  272. package/lib/test/data/scrolling_tests/frame_with_height_above_2000.html +0 -26
  273. package/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame.html +0 -11
  274. package/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html +0 -12
  275. package/lib/test/data/scrolling_tests/frame_with_small_height.html +0 -10
  276. package/lib/test/data/scrolling_tests/page_with_double_overflow_auto.html +0 -19
  277. package/lib/test/data/scrolling_tests/page_with_frame_out_of_view.html +0 -12
  278. package/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames.html +0 -11
  279. package/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames_out_of_view.html +0 -12
  280. package/lib/test/data/scrolling_tests/page_with_non_scrolling_frame.html +0 -11
  281. package/lib/test/data/scrolling_tests/page_with_scrolling_frame.html +0 -11
  282. package/lib/test/data/scrolling_tests/page_with_scrolling_frame_out_of_view.html +0 -12
  283. package/lib/test/data/scrolling_tests/page_with_tall_frame.html +0 -11
  284. package/lib/test/data/scrolling_tests/page_with_y_overflow_auto.html +0 -14
  285. package/lib/test/data/scrolling_tests/target_page.html +0 -9
  286. package/lib/test/data/selectPage.html +0 -58
  287. package/lib/test/data/selectableItems.html +0 -65
  288. package/lib/test/data/sessionCookie.html +0 -21
  289. package/lib/test/data/sessionCookieDest.html +0 -34
  290. package/lib/test/data/simple.xml +0 -5
  291. package/lib/test/data/simpleTest.html +0 -98
  292. package/lib/test/data/single_text_input.html +0 -12
  293. package/lib/test/data/slowLoadingAlert.html +0 -10
  294. package/lib/test/data/slowLoadingResourcePage.html +0 -12
  295. package/lib/test/data/slow_loading_iframes.html +0 -14
  296. package/lib/test/data/styledPage.html +0 -28
  297. package/lib/test/data/svgPiechart.xhtml +0 -81
  298. package/lib/test/data/svgTest.svg +0 -4
  299. package/lib/test/data/tables.html +0 -36
  300. package/lib/test/data/tinymce.html +0 -10
  301. package/lib/test/data/transformable.xml +0 -11
  302. package/lib/test/data/transformable.xsl +0 -37
  303. package/lib/test/data/transparentUpload.html +0 -70
  304. package/lib/test/data/underscore.html +0 -9
  305. package/lib/test/data/unicode_ltr.html +0 -8
  306. package/lib/test/data/upload.html +0 -45
  307. package/lib/test/data/userDefinedProperty.html +0 -8
  308. package/lib/test/data/veryLargeCanvas.html +0 -81
  309. package/lib/test/data/visibility-css.html +0 -21
  310. package/lib/test/data/win32frameset.html +0 -8
  311. package/lib/test/data/window_switching_tests/page_with_frame.html +0 -12
  312. package/lib/test/data/window_switching_tests/simple_page.html +0 -9
  313. package/lib/test/data/xhtmlFormPage.xhtml +0 -17
  314. package/lib/test/data/xhtmlTest.html +0 -76
  315. package/lib/test/fileserver.js +0 -321
  316. package/lib/test/httpserver.js +0 -120
  317. package/lib/test/index.js +0 -270
  318. package/lib/test/promise.js +0 -79
  319. package/lib/test/resources.js +0 -44
  320. package/opera.js +0 -405
  321. package/phantomjs.js +0 -282
  322. package/test/actions_test.js +0 -52
  323. package/test/chrome/options_test.js +0 -227
  324. package/test/chrome/service_test.js +0 -45
  325. package/test/cookie_test.js +0 -214
  326. package/test/element_finding_test.js +0 -426
  327. package/test/execute_script_test.js +0 -350
  328. package/test/fingerprint_test.js +0 -62
  329. package/test/firefox/extension_test.js +0 -120
  330. package/test/firefox/firefox_test.js +0 -261
  331. package/test/firefox/profile_test.js +0 -140
  332. package/test/http/http_test.js +0 -223
  333. package/test/http/util_test.js +0 -178
  334. package/test/io/io_test.js +0 -360
  335. package/test/io/zip_test.js +0 -128
  336. package/test/lib/by_test.js +0 -160
  337. package/test/lib/capabilities_test.js +0 -111
  338. package/test/lib/error_test.js +0 -305
  339. package/test/lib/events_test.js +0 -177
  340. package/test/lib/http_test.js +0 -696
  341. package/test/lib/logging_test.js +0 -272
  342. package/test/lib/promise_aplus_test.js +0 -78
  343. package/test/lib/promise_error_test.js +0 -884
  344. package/test/lib/promise_flow_test.js +0 -2288
  345. package/test/lib/promise_generator_test.js +0 -310
  346. package/test/lib/promise_test.js +0 -1109
  347. package/test/lib/testutil.js +0 -90
  348. package/test/lib/until_test.js +0 -478
  349. package/test/lib/webdriver_test.js +0 -2311
  350. package/test/logging_test.js +0 -167
  351. package/test/net/index_test.js +0 -60
  352. package/test/net/portprober_test.js +0 -128
  353. package/test/page_loading_test.js +0 -166
  354. package/test/phantomjs/execute_phantomjs_test.js +0 -59
  355. package/test/proxy_test.js +0 -180
  356. package/test/rect_test.js +0 -60
  357. package/test/remote_test.js +0 -117
  358. package/test/safari_test.js +0 -108
  359. package/test/session_test.js +0 -99
  360. package/test/stale_element_test.js +0 -63
  361. package/test/tag_name_test.js +0 -36
  362. package/test/testing/assert_test.js +0 -373
  363. package/test/testing/index_test.js +0 -224
  364. package/test/upload_test.js +0 -86
  365. package/test/window_test.js +0 -161
  366. package/testing/assert.js +0 -378
package/net/index.js CHANGED
@@ -17,11 +17,11 @@
17
17
 
18
18
  'use strict';
19
19
 
20
- var os = require('os');
20
+ const os = require('os');
21
21
 
22
22
 
23
23
  function getLoInterface() {
24
- var name;
24
+ let name;
25
25
  if (process.platform === 'darwin') {
26
26
  name = 'lo0';
27
27
  } else if (process.platform === 'linux') {
@@ -34,32 +34,28 @@ function getLoInterface() {
34
34
  /**
35
35
  * Queries the system network interfaces for an IP address.
36
36
  * @param {boolean} loopback Whether to find a loopback address.
37
- * @param {string=} opt_family The IP family (IPv4 or IPv6). Defaults to IPv4.
38
- * @return {string} The located IP address or undefined.
37
+ * @param {string} family The IP family (IPv4 or IPv6). Defaults to IPv4.
38
+ * @return {(string|undefined)} The located IP address or undefined.
39
39
  */
40
- function getAddress(loopback, opt_family) {
41
- var family = opt_family || 'IPv4';
42
- var addresses = [];
43
-
44
- var interfaces;
40
+ function getAddress(loopback, family) {
41
+ let interfaces;
45
42
  if (loopback) {
46
- var lo = getLoInterface();
43
+ let lo = getLoInterface();
47
44
  interfaces = lo ? [lo] : null;
48
45
  }
49
46
  interfaces = interfaces || os.networkInterfaces();
50
- for (var key in interfaces) {
47
+ for (let key in interfaces) {
51
48
  if (!interfaces.hasOwnProperty(key)) {
52
49
  continue;
53
50
  }
54
51
 
55
- interfaces[key].forEach(function(ipAddress) {
56
- if (ipAddress.family === family &&
57
- ipAddress.internal === loopback) {
58
- addresses.push(ipAddress.address);
52
+ for (let ipAddress of interfaces[key]) {
53
+ if (ipAddress.family === family && ipAddress.internal === loopback) {
54
+ return ipAddress.address;
59
55
  }
60
- });
56
+ }
61
57
  }
62
- return addresses[0];
58
+ return undefined;
63
59
  }
64
60
 
65
61
 
@@ -68,21 +64,21 @@ function getAddress(loopback, opt_family) {
68
64
 
69
65
  /**
70
66
  * Retrieves the external IP address for this host.
71
- * @param {string=} opt_family The IP family to retrieve. Defaults to "IPv4".
72
- * @return {string} The IP address or undefined if not available.
67
+ * @param {string=} family The IP family to retrieve. Defaults to "IPv4".
68
+ * @return {(string|undefined)} The IP address or undefined if not available.
73
69
  */
74
- exports.getAddress = function(opt_family) {
75
- return getAddress(false, opt_family);
70
+ exports.getAddress = function(family = 'IPv4') {
71
+ return getAddress(false, family);
76
72
  };
77
73
 
78
74
 
79
75
  /**
80
76
  * Retrieves a loopback address for this machine.
81
- * @param {string=} opt_family The IP family to retrieve. Defaults to "IPv4".
82
- * @return {string} The IP address or undefined if not available.
77
+ * @param {string=} family The IP family to retrieve. Defaults to "IPv4".
78
+ * @return {(string|undefined)} The IP address or undefined if not available.
83
79
  */
84
- exports.getLoopbackAddress = function(opt_family) {
85
- return getAddress(true, opt_family);
80
+ exports.getLoopbackAddress = function(family = 'IPv4') {
81
+ return getAddress(true, family);
86
82
  };
87
83
 
88
84
 
package/net/portprober.js CHANGED
@@ -17,9 +17,9 @@
17
17
 
18
18
  'use strict';
19
19
 
20
- var exec = require('child_process').exec,
21
- fs = require('fs'),
22
- net = require('net');
20
+ const fs = require('fs');
21
+ const net = require('net');
22
+ const {exec} = require('child_process');
23
23
 
24
24
 
25
25
  /**
@@ -34,9 +34,9 @@ const DEFAULT_IANA_RANGE = {min: 49152, max: 65535};
34
34
  /**
35
35
  * The epheremal port range for the current system. Lazily computed on first
36
36
  * access.
37
- * @type {Promise.<{min: number, max: number}>}
37
+ * @type {Promise<{min: number, max: number}>}
38
38
  */
39
- var systemRange = null;
39
+ let systemRange = null;
40
40
 
41
41
 
42
42
  /**
@@ -49,11 +49,10 @@ function findSystemPortRange() {
49
49
  if (systemRange) {
50
50
  return systemRange;
51
51
  }
52
- var range = process.platform === 'win32' ?
53
- findWindowsPortRange() : findUnixPortRange();
54
- return systemRange = range.catch(function() {
55
- return DEFAULT_IANA_RANGE;
56
- });
52
+ let range =
53
+ process.platform === 'win32'
54
+ ? findWindowsPortRange() : findUnixPortRange();
55
+ return systemRange = range.catch(() => DEFAULT_IANA_RANGE);
57
56
  }
58
57
 
59
58
 
@@ -81,7 +80,7 @@ function execute(cmd) {
81
80
  * @return {!Promise<{min: number, max: number}>} A promise that will resolve
82
81
  * with the ephemeral port range on the current system.
83
82
  */
84
- function findUnixPortRange() {
83
+ async function findUnixPortRange() {
85
84
  var cmd;
86
85
  if (process.platform === 'sunos') {
87
86
  cmd =
@@ -94,12 +93,17 @@ function findUnixPortRange() {
94
93
  ' | sed -e "s/.*:\\s*//"';
95
94
  }
96
95
 
97
- return execute(cmd).then(function(stdout) {
98
- if (!stdout || !stdout.length) return DEFAULT_IANA_RANGE;
99
- var range = stdout.trim().split(/\s+/).map(Number);
100
- if (range.some(isNaN)) return DEFAULT_IANA_RANGE;
101
- return {min: range[0], max: range[1]};
102
- });
96
+ let stdout = await execute(cmd);
97
+ if (!stdout || !stdout.length) {
98
+ return DEFAULT_IANA_RANGE;
99
+ };
100
+
101
+ let range = stdout.trim().split(/\s+/).map(Number);
102
+ if (range.some(isNaN)) {
103
+ return DEFAULT_IANA_RANGE;
104
+ };
105
+
106
+ return {min: range[0], max: range[1]};
103
107
  }
104
108
 
105
109
 
@@ -108,35 +112,29 @@ function findUnixPortRange() {
108
112
  * @return {!Promise<{min: number, max: number}>} A promise that will resolve
109
113
  * with the ephemeral port range on the current system.
110
114
  */
111
- function findWindowsPortRange() {
115
+ async function findWindowsPortRange() {
112
116
  // First, check if we're running on XP. If this initial command fails,
113
117
  // we just fallback on the default IANA range.
114
- return execute('cmd.exe /c ver').then(function(stdout) {
115
- if (/Windows XP/.test(stdout)) {
116
- // TODO: Try to read these values from the registry.
117
- return {min: 1025, max: 5000};
118
- } else {
119
- return execute('netsh int ipv4 show dynamicport tcp').
120
- then(function(stdout) {
121
- /* > netsh int ipv4 show dynamicport tcp
122
- Protocol tcp Dynamic Port Range
123
- ---------------------------------
124
- Start Port : 49152
125
- Number of Ports : 16384
126
- */
127
- var range = stdout.split(/\n/).filter(function(line) {
128
- return /.*:\s*\d+/.test(line);
129
- }).map(function(line) {
130
- return Number(line.split(/:\s*/)[1]);
131
- });
132
-
133
- return {
134
- min: range[0],
135
- max: range[0] + range[1]
136
- };
137
- });
138
- }
139
- });
118
+ let stdout = await execute('cmd.exe /c ver');
119
+ if (/Windows XP/.test(stdout)) {
120
+ // TODO: Try to read these values from the registry.
121
+ return {min: 1025, max: 5000};
122
+ } else {
123
+ stdout = await execute('netsh int ipv4 show dynamicport tcp');
124
+ /* > netsh int ipv4 show dynamicport tcp
125
+ Protocol tcp Dynamic Port Range
126
+ ---------------------------------
127
+ Start Port : 49152
128
+ Number of Ports : 16384
129
+ */
130
+ let range = stdout.split(/\n/)
131
+ .filter((line) => /.*:\s*\d+/.test(line))
132
+ .map((line) => Number(line.split(/:\s*/)[1]));
133
+ return {
134
+ min: range[0],
135
+ max: range[0] + range[1]
136
+ };
137
+ }
140
138
  }
141
139
 
142
140
 
@@ -171,30 +169,15 @@ function isFree(port, opt_host) {
171
169
  * @return {!Promise<number>} A promise that will resolve to a free port. If a
172
170
  * port cannot be found, the promise will be rejected.
173
171
  */
174
- function findFreePort(opt_host) {
175
- return findSystemPortRange().then(function(range) {
176
- var attempts = 0;
177
- return new Promise((resolve, reject) => {
178
- findPort();
179
-
180
- function findPort() {
181
- attempts += 1;
182
- if (attempts > 10) {
183
- reject(Error('Unable to find a free port'));
184
- }
185
-
186
- var port = Math.floor(
187
- Math.random() * (range.max - range.min) + range.min);
188
- isFree(port, opt_host).then(function(isFree) {
189
- if (isFree) {
190
- resolve(port);
191
- } else {
192
- findPort();
193
- }
194
- }, findPort);
195
- }
196
- });
197
- });
172
+ async function findFreePort(opt_host) {
173
+ let range = await findSystemPortRange();
174
+ for (let i = 0; i < 100; i++) {
175
+ let port = Math.floor(Math.random() * (range.max - range.min) + range.min);
176
+ if (await isFree(port, opt_host)) {
177
+ return port;
178
+ }
179
+ }
180
+ throw Error('Unable to find a free port');
198
181
  }
199
182
 
200
183
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "selenium-webdriver",
3
- "version": "3.5.0",
3
+ "version": "4.0.0-alpha.4",
4
4
  "description": "The official WebDriver JavaScript bindings from the Selenium project",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
@@ -20,23 +20,28 @@
20
20
  "url": "https://github.com/SeleniumHQ/selenium.git"
21
21
  },
22
22
  "engines": {
23
- "node": ">= 6.9.0"
23
+ "node": ">= 10.15.0"
24
24
  },
25
25
  "dependencies": {
26
- "jszip": "^3.1.3",
27
- "rimraf": "^2.5.4",
26
+ "jszip": "^3.1.5",
27
+ "rimraf": "^2.6.3",
28
28
  "tmp": "0.0.30",
29
- "xml2js": "^0.4.17"
29
+ "xml2js": "^0.4.19"
30
30
  },
31
31
  "devDependencies": {
32
- "express": "^4.14.0",
33
- "mocha": "^3.1.2",
34
- "multer": "^1.2.0",
35
- "promises-aplus-tests": "^2.1.2",
36
- "serve-index": "^1.8.0",
37
- "sinon": "^1.17.6"
32
+ "express": "^4.16.4",
33
+ "jasmine": "^3.3.1",
34
+ "mocha": "^5.2.0",
35
+ "multer": "^1.4.1",
36
+ "serve-index": "^1.9.1",
37
+ "sinon": "^7.2.3"
38
38
  },
39
39
  "scripts": {
40
- "test": "mocha -t 600000 --recursive test"
40
+ "test": "mocha -t 600000 --recursive test",
41
+ "test-jasmine": "jasmine JASMINE_CONFIG_PATH=jasmine.json"
42
+ },
43
+ "mocha": {
44
+ "recursive": true,
45
+ "timeout": 600000
41
46
  }
42
47
  }
package/proxy.js CHANGED
File without changes
package/remote/index.js CHANGED
@@ -28,7 +28,6 @@ const exec = require('../io/exec');
28
28
  const {Zip} = require('../io/zip');
29
29
  const cmd = require('../lib/command');
30
30
  const input = require('../lib/input');
31
- const promise = require('../lib/promise');
32
31
  const webdriver = require('../lib/webdriver');
33
32
  const net = require('../net');
34
33
  const portprober = require('../net/portprober');
@@ -253,7 +252,7 @@ class DriverService {
253
252
 
254
253
  httpUtil.waitForServer(serverUrl, timeout, cancelToken)
255
254
  .then(_ => fulfill(serverUrl), err => {
256
- if (err instanceof promise.CancellationError) {
255
+ if (err instanceof httpUtil.CancellationError) {
257
256
  fulfill(serverUrl);
258
257
  } else {
259
258
  reject(err);
@@ -278,19 +277,10 @@ class DriverService {
278
277
  if (!this.address_ || !this.command_) {
279
278
  return Promise.resolve(); // Not currently running.
280
279
  }
281
- return this.command_.then(function(command) {
282
- command.kill('SIGTERM');
283
- });
284
- }
285
-
286
- /**
287
- * Schedules a task in the current control flow to stop the server if it is
288
- * currently running.
289
- * @return {!promise.Thenable} A promise that will be resolved when
290
- * the server has been stopped.
291
- */
292
- stop() {
293
- return promise.controlFlow().execute(this.kill.bind(this));
280
+ let cmd = this.command_;
281
+ this.address_ = null;
282
+ this.command_ = null;
283
+ return cmd.then(c => c.kill('SIGTERM'));
294
284
  }
295
285
  }
296
286
 
@@ -510,35 +500,65 @@ class SeleniumServer extends DriverService {
510
500
 
511
501
 
512
502
  /**
513
- * Options for the Selenium server:
514
- *
515
- * - `loopback` - Whether the server should only be accessed on this host's
516
- * loopback address.
517
- * - `port` - The port to start the server on (must be > 0). If the port is
518
- * provided as a promise, the service will wait for the promise to resolve
519
- * before starting.
520
- * - `args` - The arguments to pass to the service. If a promise is provided,
521
- * the service will wait for it to resolve before starting.
522
- * - `jvmArgs` - The arguments to pass to the JVM. If a promise is provided,
523
- * the service will wait for it to resolve before starting.
524
- * - `env` - The environment variables that should be visible to the server
525
- * process. Defaults to inheriting the current process's environment.
526
- * - `stdio` - IO configuration for the spawned server process. For more
527
- * information, refer to the documentation of `child_process.spawn`.
503
+ * A record object describing configuration options for a {@link SeleniumServer}
504
+ * instance.
528
505
  *
529
- * @typedef {{
530
- * loopback: (boolean|undefined),
531
- * port: (number|!promise.Promise<number>),
532
- * args: !(Array<string>|promise.Promise<!Array<string>>),
533
- * jvmArgs: (!Array<string>|
534
- * !promise.Promise<!Array<string>>|
535
- * undefined),
536
- * env: (!Object<string, string>|undefined),
537
- * stdio: (string|!Array<string|number|!stream.Stream|null|undefined>|
538
- * undefined)
539
- * }}
506
+ * @record
540
507
  */
541
- SeleniumServer.Options;
508
+ SeleniumServer.Options = class {
509
+ constructor() {
510
+ /**
511
+ * Whether the server should only be accessible on this host's loopback
512
+ * address.
513
+ *
514
+ * @type {(boolean|undefined)}
515
+ */
516
+ this.loopback;
517
+
518
+ /**
519
+ * The port to start the server on (must be > 0). If the port is provided as
520
+ * a promise, the service will wait for the promise to resolve before
521
+ * starting.
522
+ *
523
+ * @type {(number|!IThenable<number>)}
524
+ */
525
+ this.port;
526
+
527
+ /**
528
+ * The arguments to pass to the service. If a promise is provided,
529
+ * the service will wait for it to resolve before starting.
530
+ *
531
+ * @type {!(Array<string>|IThenable<!Array<string>>)}
532
+ */
533
+ this.args;
534
+
535
+ /**
536
+ * The arguments to pass to the JVM. If a promise is provided,
537
+ * the service will wait for it to resolve before starting.
538
+ *
539
+ * @type {(!Array<string>|!IThenable<!Array<string>>|undefined)}
540
+ */
541
+ this.jvmArgs;
542
+
543
+ /**
544
+ * The environment variables that should be visible to the server
545
+ * process. Defaults to inheriting the current process's environment.
546
+ *
547
+ * @type {(!Object<string, string>|undefined)}
548
+ */
549
+ this.env;
550
+
551
+ /**
552
+ * IO configuration for the spawned server process. If unspecified, IO will
553
+ * be ignored.
554
+ *
555
+ * @type {(string|!Array<string|number|!stream.Stream|null|undefined>|
556
+ * undefined)}
557
+ * @see <https://nodejs.org/dist/latest-v8.x/docs/api/child_process.html#child_process_options_stdio>
558
+ */
559
+ this.stdio;
560
+ }
561
+ };
542
562
 
543
563
 
544
564
 
@@ -582,8 +602,7 @@ class FileDetector extends input.FileDetector {
582
602
  .then(encodedZip => {
583
603
  let command = new cmd.Command(cmd.Name.UPLOAD_FILE)
584
604
  .setParameter('file', encodedZip);
585
- return driver.schedule(command,
586
- 'remote.FileDetector.handleFile(' + file + ')');
605
+ return driver.execute(command);
587
606
  });
588
607
  }, function(err) {
589
608
  if (err.code === 'ENOENT') {