selenium-webdriver 2.48.2 → 2.53.3

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 (534) hide show
  1. package/CHANGES.md +116 -0
  2. package/NOTICE +1 -1
  3. package/README.md +59 -9
  4. package/builder.js +375 -358
  5. package/chrome.js +549 -586
  6. package/edge.js +378 -0
  7. package/error.js +9 -6
  8. package/example/google_search.js +1 -1
  9. package/example/google_search_generator.js +2 -4
  10. package/example/logging.js +6 -2
  11. package/example/sample.js +21 -0
  12. package/executors.js +11 -27
  13. package/firefox/binary.js +149 -98
  14. package/firefox/extension.js +15 -19
  15. package/firefox/index.js +256 -163
  16. package/firefox/profile.js +223 -243
  17. package/http/index.js +487 -81
  18. package/http/util.js +40 -36
  19. package/ie.js +288 -309
  20. package/index.js +34 -125
  21. package/io/exec.js +58 -39
  22. package/io/index.js +72 -60
  23. package/lib/README +4 -0
  24. package/lib/actions.js +596 -0
  25. package/lib/by.js +277 -0
  26. package/lib/capabilities.js +450 -0
  27. package/lib/{webdriver/command.js → command.js} +91 -72
  28. package/lib/{webdriver/button.js → devmode.js} +13 -8
  29. package/lib/error.js +690 -0
  30. package/lib/events.js +212 -0
  31. package/lib/firefox/amd64/libnoblur64.so +0 -0
  32. package/lib/firefox/i386/libnoblur.so +0 -0
  33. package/lib/firefox/webdriver.json +5 -1
  34. package/lib/firefox/webdriver.xpi +0 -0
  35. package/lib/{webdriver/key.js → input.js} +84 -2
  36. package/lib/logging.js +670 -0
  37. package/lib/{webdriver/promise.js → promise.js} +817 -644
  38. package/lib/safari/client.js +266 -214
  39. package/lib/session.js +80 -0
  40. package/lib/{webdriver/serializable.js → symbols.js} +16 -19
  41. package/lib/test/build.js +4 -4
  42. package/lib/test/data/click_tests/html5_submit_buttons.html +2 -1
  43. package/lib/test/data/click_tests/overlapping_elements.html +15 -4
  44. package/lib/test/data/click_tests/partially_overlapping_elements.html +124 -0
  45. package/lib/test/data/click_tests/wrapped_overlapping_elements.html +13 -0
  46. package/lib/test/data/hidden_partially.html +45 -0
  47. package/lib/test/data/readOnlyPage.html +1 -1
  48. package/lib/test/data/selectPage.html +18 -2
  49. package/lib/test/fileserver.js +3 -4
  50. package/lib/test/index.js +7 -3
  51. package/lib/test/resources.js +1 -1
  52. package/lib/until.js +376 -0
  53. package/lib/webdriver.js +2440 -0
  54. package/net/index.js +4 -0
  55. package/net/portprober.js +16 -12
  56. package/opera.js +295 -314
  57. package/package.json +6 -5
  58. package/phantomjs.js +144 -147
  59. package/proxy.js +10 -6
  60. package/remote/index.js +289 -238
  61. package/safari.js +326 -311
  62. package/test/chrome/options_test.js +11 -9
  63. package/test/element_finding_test.js +51 -13
  64. package/test/execute_script_test.js +17 -3
  65. package/test/firefox/firefox_test.js +0 -32
  66. package/test/http/http_test.js +671 -61
  67. package/test/http/util_test.js +25 -23
  68. package/test/io_test.js +67 -1
  69. package/test/lib/by_test.js +139 -0
  70. package/test/lib/capabilities_test.js +111 -0
  71. package/test/lib/error_test.js +325 -0
  72. package/test/lib/events_test.js +177 -0
  73. package/test/lib/logging_test.js +272 -0
  74. package/test/{promise_aplus_test.js → lib/promise_aplus_test.js} +4 -13
  75. package/test/lib/promise_error_test.js +808 -0
  76. package/test/lib/promise_flow_test.js +2282 -0
  77. package/test/lib/promise_generator_test.js +308 -0
  78. package/test/lib/promise_test.js +996 -0
  79. package/test/lib/testutil.js +90 -0
  80. package/test/lib/until_test.js +400 -0
  81. package/test/lib/webdriver_test.js +2157 -0
  82. package/test/page_loading_test.js +7 -9
  83. package/test/remote_test.js +50 -3
  84. package/test/session_test.js +53 -0
  85. package/test/stale_element_test.js +2 -2
  86. package/test/testing/assert_test.js +374 -0
  87. package/test/testing/index_test.js +9 -11
  88. package/testing/assert.js +334 -17
  89. package/testing/index.js +12 -2
  90. package/_base.js +0 -200
  91. package/docs/Changes.html +0 -356
  92. package/docs/class_bot_Error.html +0 -15
  93. package/docs/class_webdriver_ActionSequence.html +0 -115
  94. package/docs/class_webdriver_Alert.html +0 -24
  95. package/docs/class_webdriver_AlertPromise.html +0 -92
  96. package/docs/class_webdriver_Capabilities.html +0 -60
  97. package/docs/class_webdriver_Command.html +0 -15
  98. package/docs/class_webdriver_EventEmitter.html +0 -35
  99. package/docs/class_webdriver_FileDetector.html +0 -21
  100. package/docs/class_webdriver_Locator.html +0 -12
  101. package/docs/class_webdriver_Serializable.html +0 -9
  102. package/docs/class_webdriver_Session.html +0 -13
  103. package/docs/class_webdriver_TouchSequence.html +0 -49
  104. package/docs/class_webdriver_UnhandledAlertError.html +0 -18
  105. package/docs/class_webdriver_WebDriver.html +0 -313
  106. package/docs/class_webdriver_WebDriver_Logs.html +0 -15
  107. package/docs/class_webdriver_WebDriver_Navigation.html +0 -16
  108. package/docs/class_webdriver_WebDriver_Options.html +0 -41
  109. package/docs/class_webdriver_WebDriver_TargetLocator.html +0 -38
  110. package/docs/class_webdriver_WebDriver_Timeouts.html +0 -29
  111. package/docs/class_webdriver_WebDriver_Window.html +0 -27
  112. package/docs/class_webdriver_WebElement.html +0 -223
  113. package/docs/class_webdriver_WebElementPromise.html +0 -274
  114. package/docs/class_webdriver_http_Executor.html +0 -22
  115. package/docs/class_webdriver_http_Request.html +0 -12
  116. package/docs/class_webdriver_http_Response.html +0 -13
  117. package/docs/class_webdriver_logging_Entry.html +0 -15
  118. package/docs/class_webdriver_logging_Level.html +0 -55
  119. package/docs/class_webdriver_logging_LogRecord.html +0 -45
  120. package/docs/class_webdriver_logging_Logger.html +0 -119
  121. package/docs/class_webdriver_logging_Preferences.html +0 -8
  122. package/docs/class_webdriver_promise_CancellationError.html +0 -17
  123. package/docs/class_webdriver_promise_ControlFlow.html +0 -153
  124. package/docs/class_webdriver_promise_Deferred.html +0 -84
  125. package/docs/class_webdriver_promise_MultipleUnhandledRejectionError.html +0 -14
  126. package/docs/class_webdriver_promise_Promise.html +0 -75
  127. package/docs/class_webdriver_stacktrace_Frame.html +0 -20
  128. package/docs/class_webdriver_stacktrace_Snapshot.html +0 -6
  129. package/docs/class_webdriver_testing_Assertion.html +0 -99
  130. package/docs/class_webdriver_testing_Assertion_DelegatingMatcher_.html +0 -13
  131. package/docs/class_webdriver_testing_ContainsMatcher.html +0 -11
  132. package/docs/class_webdriver_testing_NegatedAssertion.html +0 -97
  133. package/docs/class_webdriver_until_Condition.html +0 -7
  134. package/docs/dossier.css +0 -1
  135. package/docs/dossier.js +0 -86
  136. package/docs/enum_bot_ErrorCode.html +0 -3
  137. package/docs/enum_bot_Error_State.html +0 -2
  138. package/docs/enum_webdriver_Browser.html +0 -2
  139. package/docs/enum_webdriver_Button.html +0 -2
  140. package/docs/enum_webdriver_Capability.html +0 -33
  141. package/docs/enum_webdriver_CommandName.html +0 -3
  142. package/docs/enum_webdriver_Key.html +0 -12
  143. package/docs/enum_webdriver_logging_Type.html +0 -6
  144. package/docs/enum_webdriver_promise_ControlFlow_EventType.html +0 -9
  145. package/docs/index.html +0 -125
  146. package/docs/interface_webdriver_CommandExecutor.html +0 -9
  147. package/docs/interface_webdriver_http_Client.html +0 -10
  148. package/docs/interface_webdriver_promise_Thenable.html +0 -77
  149. package/docs/module_selenium-webdriver.html +0 -23
  150. package/docs/module_selenium-webdriver__base.html +0 -23
  151. package/docs/module_selenium-webdriver__base_class_Context.html +0 -5
  152. package/docs/module_selenium-webdriver_builder.html +0 -2
  153. package/docs/module_selenium-webdriver_builder_class_Builder.html +0 -138
  154. package/docs/module_selenium-webdriver_chrome.html +0 -90
  155. package/docs/module_selenium-webdriver_chrome_class_Driver.html +0 -280
  156. package/docs/module_selenium-webdriver_chrome_class_Options.html +0 -127
  157. package/docs/module_selenium-webdriver_chrome_class_ServiceBuilder.html +0 -46
  158. package/docs/module_selenium-webdriver_class_ActionSequence.html +0 -115
  159. package/docs/module_selenium-webdriver_class_Builder.html +0 -138
  160. package/docs/module_selenium-webdriver_class_Capabilities.html +0 -60
  161. package/docs/module_selenium-webdriver_class_Command.html +0 -15
  162. package/docs/module_selenium-webdriver_class_EventEmitter.html +0 -35
  163. package/docs/module_selenium-webdriver_class_FileDetector.html +0 -21
  164. package/docs/module_selenium-webdriver_class_Serializable.html +0 -9
  165. package/docs/module_selenium-webdriver_class_Session.html +0 -13
  166. package/docs/module_selenium-webdriver_class_WebDriver.html +0 -313
  167. package/docs/module_selenium-webdriver_class_WebElement.html +0 -223
  168. package/docs/module_selenium-webdriver_class_WebElementPromise.html +0 -274
  169. package/docs/module_selenium-webdriver_enum_Browser.html +0 -2
  170. package/docs/module_selenium-webdriver_enum_Button.html +0 -2
  171. package/docs/module_selenium-webdriver_enum_Capability.html +0 -33
  172. package/docs/module_selenium-webdriver_enum_CommandName.html +0 -3
  173. package/docs/module_selenium-webdriver_enum_Key.html +0 -12
  174. package/docs/module_selenium-webdriver_error.html +0 -4
  175. package/docs/module_selenium-webdriver_error_class_Error.html +0 -15
  176. package/docs/module_selenium-webdriver_error_enum_ErrorCode.html +0 -3
  177. package/docs/module_selenium-webdriver_executors.html +0 -10
  178. package/docs/module_selenium-webdriver_executors_class_DeferredExecutor.html +0 -12
  179. package/docs/module_selenium-webdriver_firefox.html +0 -68
  180. package/docs/module_selenium-webdriver_firefox_binary.html +0 -5
  181. package/docs/module_selenium-webdriver_firefox_binary_class_Binary.html +0 -20
  182. package/docs/module_selenium-webdriver_firefox_class_Binary.html +0 -20
  183. package/docs/module_selenium-webdriver_firefox_class_Driver.html +0 -276
  184. package/docs/module_selenium-webdriver_firefox_class_Options.html +0 -19
  185. package/docs/module_selenium-webdriver_firefox_class_Profile.html +0 -50
  186. package/docs/module_selenium-webdriver_firefox_extension.html +0 -8
  187. package/docs/module_selenium-webdriver_firefox_profile.html +0 -13
  188. package/docs/module_selenium-webdriver_firefox_profile_class_Profile.html +0 -50
  189. package/docs/module_selenium-webdriver_http.html +0 -9
  190. package/docs/module_selenium-webdriver_http_class_Executor.html +0 -22
  191. package/docs/module_selenium-webdriver_http_class_HttpClient.html +0 -16
  192. package/docs/module_selenium-webdriver_http_class_Request.html +0 -12
  193. package/docs/module_selenium-webdriver_http_class_Response.html +0 -13
  194. package/docs/module_selenium-webdriver_http_util.html +0 -17
  195. package/docs/module_selenium-webdriver_ie.html +0 -11
  196. package/docs/module_selenium-webdriver_ie_class_Driver.html +0 -274
  197. package/docs/module_selenium-webdriver_ie_class_Options.html +0 -89
  198. package/docs/module_selenium-webdriver_ie_enum_Level.html +0 -1
  199. package/docs/module_selenium-webdriver_io.html +0 -37
  200. package/docs/module_selenium-webdriver_io_exec.html +0 -6
  201. package/docs/module_selenium-webdriver_namespace_By.html +0 -56
  202. package/docs/module_selenium-webdriver_namespace_error.html +0 -4
  203. package/docs/module_selenium-webdriver_namespace_logging.html +0 -18
  204. package/docs/module_selenium-webdriver_namespace_promise.html +0 -163
  205. package/docs/module_selenium-webdriver_namespace_stacktrace.html +0 -17
  206. package/docs/module_selenium-webdriver_namespace_until.html +0 -82
  207. package/docs/module_selenium-webdriver_net.html +0 -7
  208. package/docs/module_selenium-webdriver_net_portprober.html +0 -12
  209. package/docs/module_selenium-webdriver_opera.html +0 -62
  210. package/docs/module_selenium-webdriver_opera_class_Driver.html +0 -276
  211. package/docs/module_selenium-webdriver_opera_class_Options.html +0 -44
  212. package/docs/module_selenium-webdriver_opera_class_ServiceBuilder.html +0 -35
  213. package/docs/module_selenium-webdriver_phantomjs.html +0 -2
  214. package/docs/module_selenium-webdriver_phantomjs_class_Driver.html +0 -299
  215. package/docs/module_selenium-webdriver_proxy.html +0 -28
  216. package/docs/module_selenium-webdriver_remote.html +0 -8
  217. package/docs/module_selenium-webdriver_remote_class_DriverService.html +0 -32
  218. package/docs/module_selenium-webdriver_remote_class_FileDetector.html +0 -22
  219. package/docs/module_selenium-webdriver_remote_class_SeleniumServer.html +0 -41
  220. package/docs/module_selenium-webdriver_safari.html +0 -9
  221. package/docs/module_selenium-webdriver_safari_class_Driver.html +0 -279
  222. package/docs/module_selenium-webdriver_safari_class_Options.html +0 -23
  223. package/docs/module_selenium-webdriver_testing.html +0 -74
  224. package/docs/module_selenium-webdriver_testing_assert.html +0 -9
  225. package/docs/namespace_bot.html +0 -4
  226. package/docs/namespace_bot_json.html +0 -20
  227. package/docs/namespace_bot_response.html +0 -18
  228. package/docs/namespace_bot_userAgent.html +0 -33
  229. package/docs/namespace_webdriver.html +0 -30
  230. package/docs/namespace_webdriver_By.html +0 -56
  231. package/docs/namespace_webdriver_http.html +0 -6
  232. package/docs/namespace_webdriver_logging.html +0 -70
  233. package/docs/namespace_webdriver_promise.html +0 -688
  234. package/docs/namespace_webdriver_stacktrace.html +0 -17
  235. package/docs/namespace_webdriver_testing.html +0 -7
  236. package/docs/namespace_webdriver_testing_assert.html +0 -9
  237. package/docs/namespace_webdriver_testing_asserts.html +0 -18
  238. package/docs/namespace_webdriver_until.html +0 -82
  239. package/docs/source/_base.js.src.html +0 -1
  240. package/docs/source/builder.js.src.html +0 -1
  241. package/docs/source/chrome.js.src.html +0 -1
  242. package/docs/source/error.js.src.html +0 -1
  243. package/docs/source/executors.js.src.html +0 -1
  244. package/docs/source/firefox/binary.js.src.html +0 -1
  245. package/docs/source/firefox/extension.js.src.html +0 -1
  246. package/docs/source/firefox/index.js.src.html +0 -1
  247. package/docs/source/firefox/profile.js.src.html +0 -1
  248. package/docs/source/http/index.js.src.html +0 -1
  249. package/docs/source/http/util.js.src.html +0 -1
  250. package/docs/source/ie.js.src.html +0 -1
  251. package/docs/source/index.js.src.html +0 -1
  252. package/docs/source/io/exec.js.src.html +0 -1
  253. package/docs/source/io/index.js.src.html +0 -1
  254. package/docs/source/lib/atoms/error.js.src.html +0 -1
  255. package/docs/source/lib/atoms/json.js.src.html +0 -1
  256. package/docs/source/lib/atoms/response.js.src.html +0 -1
  257. package/docs/source/lib/atoms/userAgent.js.src.html +0 -1
  258. package/docs/source/lib/goog/array/array.js.src.html +0 -1
  259. package/docs/source/lib/goog/asserts/asserts.js.src.html +0 -1
  260. package/docs/source/lib/goog/async/freelist.js.src.html +0 -1
  261. package/docs/source/lib/goog/async/nexttick.js.src.html +0 -1
  262. package/docs/source/lib/goog/async/run.js.src.html +0 -1
  263. package/docs/source/lib/goog/async/workqueue.js.src.html +0 -1
  264. package/docs/source/lib/goog/base.js.src.html +0 -1
  265. package/docs/source/lib/goog/debug/debug.js.src.html +0 -1
  266. package/docs/source/lib/goog/debug/entrypointregistry.js.src.html +0 -1
  267. package/docs/source/lib/goog/debug/error.js.src.html +0 -1
  268. package/docs/source/lib/goog/debug/logbuffer.js.src.html +0 -1
  269. package/docs/source/lib/goog/debug/logger.js.src.html +0 -1
  270. package/docs/source/lib/goog/debug/logrecord.js.src.html +0 -1
  271. package/docs/source/lib/goog/deps.js.src.html +0 -1
  272. package/docs/source/lib/goog/disposable/disposable.js.src.html +0 -1
  273. package/docs/source/lib/goog/disposable/idisposable.js.src.html +0 -1
  274. package/docs/source/lib/goog/dom/browserfeature.js.src.html +0 -1
  275. package/docs/source/lib/goog/dom/dom.js.src.html +0 -1
  276. package/docs/source/lib/goog/dom/nodetype.js.src.html +0 -1
  277. package/docs/source/lib/goog/dom/safe.js.src.html +0 -1
  278. package/docs/source/lib/goog/dom/tagname.js.src.html +0 -1
  279. package/docs/source/lib/goog/dom/tags.js.src.html +0 -1
  280. package/docs/source/lib/goog/dom/vendor.js.src.html +0 -1
  281. package/docs/source/lib/goog/events/browserevent.js.src.html +0 -1
  282. package/docs/source/lib/goog/events/browserfeature.js.src.html +0 -1
  283. package/docs/source/lib/goog/events/event.js.src.html +0 -1
  284. package/docs/source/lib/goog/events/eventid.js.src.html +0 -1
  285. package/docs/source/lib/goog/events/events.js.src.html +0 -1
  286. package/docs/source/lib/goog/events/eventtarget.js.src.html +0 -1
  287. package/docs/source/lib/goog/events/eventtype.js.src.html +0 -1
  288. package/docs/source/lib/goog/events/keycodes.js.src.html +0 -1
  289. package/docs/source/lib/goog/events/listenable.js.src.html +0 -1
  290. package/docs/source/lib/goog/events/listener.js.src.html +0 -1
  291. package/docs/source/lib/goog/events/listenermap.js.src.html +0 -1
  292. package/docs/source/lib/goog/fs/url.js.src.html +0 -1
  293. package/docs/source/lib/goog/functions/functions.js.src.html +0 -1
  294. package/docs/source/lib/goog/html/safehtml.js.src.html +0 -1
  295. package/docs/source/lib/goog/html/safescript.js.src.html +0 -1
  296. package/docs/source/lib/goog/html/safestyle.js.src.html +0 -1
  297. package/docs/source/lib/goog/html/safestylesheet.js.src.html +0 -1
  298. package/docs/source/lib/goog/html/safeurl.js.src.html +0 -1
  299. package/docs/source/lib/goog/html/trustedresourceurl.js.src.html +0 -1
  300. package/docs/source/lib/goog/html/uncheckedconversions.js.src.html +0 -1
  301. package/docs/source/lib/goog/i18n/bidi.js.src.html +0 -1
  302. package/docs/source/lib/goog/iter/iter.js.src.html +0 -1
  303. package/docs/source/lib/goog/json/json.js.src.html +0 -1
  304. package/docs/source/lib/goog/labs/testing/assertthat.js.src.html +0 -1
  305. package/docs/source/lib/goog/labs/testing/logicmatcher.js.src.html +0 -1
  306. package/docs/source/lib/goog/labs/testing/matcher.js.src.html +0 -1
  307. package/docs/source/lib/goog/labs/testing/numbermatcher.js.src.html +0 -1
  308. package/docs/source/lib/goog/labs/testing/objectmatcher.js.src.html +0 -1
  309. package/docs/source/lib/goog/labs/testing/stringmatcher.js.src.html +0 -1
  310. package/docs/source/lib/goog/labs/useragent/browser.js.src.html +0 -1
  311. package/docs/source/lib/goog/labs/useragent/engine.js.src.html +0 -1
  312. package/docs/source/lib/goog/labs/useragent/platform.js.src.html +0 -1
  313. package/docs/source/lib/goog/labs/useragent/util.js.src.html +0 -1
  314. package/docs/source/lib/goog/log/log.js.src.html +0 -1
  315. package/docs/source/lib/goog/math/box.js.src.html +0 -1
  316. package/docs/source/lib/goog/math/coordinate.js.src.html +0 -1
  317. package/docs/source/lib/goog/math/math.js.src.html +0 -1
  318. package/docs/source/lib/goog/math/rect.js.src.html +0 -1
  319. package/docs/source/lib/goog/math/size.js.src.html +0 -1
  320. package/docs/source/lib/goog/net/wrapperxmlhttpfactory.js.src.html +0 -1
  321. package/docs/source/lib/goog/net/xhrlike.js.src.html +0 -1
  322. package/docs/source/lib/goog/net/xmlhttp.js.src.html +0 -1
  323. package/docs/source/lib/goog/net/xmlhttpfactory.js.src.html +0 -1
  324. package/docs/source/lib/goog/object/object.js.src.html +0 -1
  325. package/docs/source/lib/goog/promise/promise.js.src.html +0 -1
  326. package/docs/source/lib/goog/promise/resolver.js.src.html +0 -1
  327. package/docs/source/lib/goog/promise/thenable.js.src.html +0 -1
  328. package/docs/source/lib/goog/reflect/reflect.js.src.html +0 -1
  329. package/docs/source/lib/goog/string/const.js.src.html +0 -1
  330. package/docs/source/lib/goog/string/string.js.src.html +0 -1
  331. package/docs/source/lib/goog/string/typedstring.js.src.html +0 -1
  332. package/docs/source/lib/goog/structs/collection.js.src.html +0 -1
  333. package/docs/source/lib/goog/structs/map.js.src.html +0 -1
  334. package/docs/source/lib/goog/structs/set.js.src.html +0 -1
  335. package/docs/source/lib/goog/structs/structs.js.src.html +0 -1
  336. package/docs/source/lib/goog/style/style.js.src.html +0 -1
  337. package/docs/source/lib/goog/testing/asserts.js.src.html +0 -1
  338. package/docs/source/lib/goog/testing/events/events.js.src.html +0 -1
  339. package/docs/source/lib/goog/testing/functionmock.js.src.html +0 -1
  340. package/docs/source/lib/goog/testing/jsunit.js.src.html +0 -1
  341. package/docs/source/lib/goog/testing/loosemock.js.src.html +0 -1
  342. package/docs/source/lib/goog/testing/mock.js.src.html +0 -1
  343. package/docs/source/lib/goog/testing/mockclock.js.src.html +0 -1
  344. package/docs/source/lib/goog/testing/mockcontrol.js.src.html +0 -1
  345. package/docs/source/lib/goog/testing/mockinterface.js.src.html +0 -1
  346. package/docs/source/lib/goog/testing/mockmatchers.js.src.html +0 -1
  347. package/docs/source/lib/goog/testing/objectpropertystring.js.src.html +0 -1
  348. package/docs/source/lib/goog/testing/propertyreplacer.js.src.html +0 -1
  349. package/docs/source/lib/goog/testing/recordfunction.js.src.html +0 -1
  350. package/docs/source/lib/goog/testing/stacktrace.js.src.html +0 -1
  351. package/docs/source/lib/goog/testing/strictmock.js.src.html +0 -1
  352. package/docs/source/lib/goog/testing/testcase.js.src.html +0 -1
  353. package/docs/source/lib/goog/testing/testrunner.js.src.html +0 -1
  354. package/docs/source/lib/goog/uri/uri.js.src.html +0 -1
  355. package/docs/source/lib/goog/uri/utils.js.src.html +0 -1
  356. package/docs/source/lib/goog/useragent/product.js.src.html +0 -1
  357. package/docs/source/lib/goog/useragent/product_isversion.js.src.html +0 -1
  358. package/docs/source/lib/goog/useragent/useragent.js.src.html +0 -1
  359. package/docs/source/lib/webdriver/actionsequence.js.src.html +0 -1
  360. package/docs/source/lib/webdriver/button.js.src.html +0 -1
  361. package/docs/source/lib/webdriver/capabilities.js.src.html +0 -1
  362. package/docs/source/lib/webdriver/command.js.src.html +0 -1
  363. package/docs/source/lib/webdriver/events.js.src.html +0 -1
  364. package/docs/source/lib/webdriver/http/http.js.src.html +0 -1
  365. package/docs/source/lib/webdriver/key.js.src.html +0 -1
  366. package/docs/source/lib/webdriver/locators.js.src.html +0 -1
  367. package/docs/source/lib/webdriver/logging.js.src.html +0 -1
  368. package/docs/source/lib/webdriver/promise.js.src.html +0 -1
  369. package/docs/source/lib/webdriver/serializable.js.src.html +0 -1
  370. package/docs/source/lib/webdriver/session.js.src.html +0 -1
  371. package/docs/source/lib/webdriver/stacktrace.js.src.html +0 -1
  372. package/docs/source/lib/webdriver/testing/asserts.js.src.html +0 -1
  373. package/docs/source/lib/webdriver/touchsequence.js.src.html +0 -1
  374. package/docs/source/lib/webdriver/until.js.src.html +0 -1
  375. package/docs/source/lib/webdriver/webdriver.js.src.html +0 -1
  376. package/docs/source/net/index.js.src.html +0 -1
  377. package/docs/source/net/portprober.js.src.html +0 -1
  378. package/docs/source/opera.js.src.html +0 -1
  379. package/docs/source/phantomjs.js.src.html +0 -1
  380. package/docs/source/proxy.js.src.html +0 -1
  381. package/docs/source/remote/index.js.src.html +0 -1
  382. package/docs/source/safari.js.src.html +0 -1
  383. package/docs/source/testing/assert.js.src.html +0 -1
  384. package/docs/source/testing/index.js.src.html +0 -1
  385. package/docs/types.js +0 -1
  386. package/lib/atoms/error.js +0 -202
  387. package/lib/atoms/json.js +0 -80
  388. package/lib/atoms/response.js +0 -110
  389. package/lib/atoms/userAgent.js +0 -257
  390. package/lib/goog/LICENSE +0 -176
  391. package/lib/goog/array/array.js +0 -1654
  392. package/lib/goog/asserts/asserts.js +0 -365
  393. package/lib/goog/async/freelist.js +0 -88
  394. package/lib/goog/async/nexttick.js +0 -241
  395. package/lib/goog/async/run.js +0 -133
  396. package/lib/goog/async/workqueue.js +0 -139
  397. package/lib/goog/base.js +0 -2548
  398. package/lib/goog/debug/debug.js +0 -653
  399. package/lib/goog/debug/entrypointregistry.js +0 -158
  400. package/lib/goog/debug/error.js +0 -63
  401. package/lib/goog/debug/logbuffer.js +0 -148
  402. package/lib/goog/debug/logger.js +0 -873
  403. package/lib/goog/debug/logrecord.js +0 -242
  404. package/lib/goog/deps.js +0 -151
  405. package/lib/goog/disposable/disposable.js +0 -307
  406. package/lib/goog/disposable/idisposable.js +0 -45
  407. package/lib/goog/dom/browserfeature.js +0 -72
  408. package/lib/goog/dom/dom.js +0 -2991
  409. package/lib/goog/dom/nodetype.js +0 -48
  410. package/lib/goog/dom/safe.js +0 -347
  411. package/lib/goog/dom/tagname.js +0 -160
  412. package/lib/goog/dom/tags.js +0 -41
  413. package/lib/goog/dom/vendor.js +0 -96
  414. package/lib/goog/events/browserevent.js +0 -400
  415. package/lib/goog/events/browserfeature.js +0 -85
  416. package/lib/goog/events/event.js +0 -143
  417. package/lib/goog/events/eventid.js +0 -47
  418. package/lib/goog/events/events.js +0 -984
  419. package/lib/goog/events/eventtarget.js +0 -394
  420. package/lib/goog/events/eventtype.js +0 -237
  421. package/lib/goog/events/keycodes.js +0 -427
  422. package/lib/goog/events/listenable.js +0 -335
  423. package/lib/goog/events/listener.js +0 -131
  424. package/lib/goog/events/listenermap.js +0 -308
  425. package/lib/goog/fs/url.js +0 -109
  426. package/lib/goog/functions/functions.js +0 -442
  427. package/lib/goog/html/safehtml.js +0 -757
  428. package/lib/goog/html/safescript.js +0 -234
  429. package/lib/goog/html/safestyle.js +0 -442
  430. package/lib/goog/html/safestylesheet.js +0 -276
  431. package/lib/goog/html/safeurl.js +0 -398
  432. package/lib/goog/html/trustedresourceurl.js +0 -224
  433. package/lib/goog/html/uncheckedconversions.js +0 -232
  434. package/lib/goog/i18n/bidi.js +0 -908
  435. package/lib/goog/iter/iter.js +0 -1302
  436. package/lib/goog/json/json.js +0 -363
  437. package/lib/goog/labs/testing/assertthat.js +0 -58
  438. package/lib/goog/labs/testing/logicmatcher.js +0 -212
  439. package/lib/goog/labs/testing/matcher.js +0 -80
  440. package/lib/goog/labs/testing/numbermatcher.js +0 -346
  441. package/lib/goog/labs/testing/objectmatcher.js +0 -317
  442. package/lib/goog/labs/testing/stringmatcher.js +0 -415
  443. package/lib/goog/labs/useragent/browser.js +0 -341
  444. package/lib/goog/labs/useragent/engine.js +0 -160
  445. package/lib/goog/labs/useragent/platform.js +0 -160
  446. package/lib/goog/labs/useragent/util.js +0 -148
  447. package/lib/goog/log/log.js +0 -197
  448. package/lib/goog/math/box.js +0 -398
  449. package/lib/goog/math/coordinate.js +0 -268
  450. package/lib/goog/math/math.js +0 -451
  451. package/lib/goog/math/rect.js +0 -476
  452. package/lib/goog/math/size.js +0 -227
  453. package/lib/goog/net/wrapperxmlhttpfactory.js +0 -71
  454. package/lib/goog/net/xhrlike.js +0 -124
  455. package/lib/goog/net/xmlhttp.js +0 -246
  456. package/lib/goog/net/xmlhttpfactory.js +0 -67
  457. package/lib/goog/object/object.js +0 -686
  458. package/lib/goog/promise/promise.js +0 -1350
  459. package/lib/goog/promise/resolver.js +0 -48
  460. package/lib/goog/promise/thenable.js +0 -126
  461. package/lib/goog/reflect/reflect.js +0 -77
  462. package/lib/goog/string/const.js +0 -182
  463. package/lib/goog/string/string.js +0 -1599
  464. package/lib/goog/string/typedstring.js +0 -48
  465. package/lib/goog/structs/collection.js +0 -56
  466. package/lib/goog/structs/map.js +0 -457
  467. package/lib/goog/structs/set.js +0 -279
  468. package/lib/goog/structs/structs.js +0 -354
  469. package/lib/goog/style/style.js +0 -2037
  470. package/lib/goog/testing/asserts.js +0 -1278
  471. package/lib/goog/testing/events/events.js +0 -767
  472. package/lib/goog/testing/functionmock.js +0 -175
  473. package/lib/goog/testing/jsunit.js +0 -162
  474. package/lib/goog/testing/loosemock.js +0 -242
  475. package/lib/goog/testing/mock.js +0 -645
  476. package/lib/goog/testing/mockclock.js +0 -606
  477. package/lib/goog/testing/mockcontrol.js +0 -220
  478. package/lib/goog/testing/mockinterface.js +0 -45
  479. package/lib/goog/testing/mockmatchers.js +0 -400
  480. package/lib/goog/testing/objectpropertystring.js +0 -68
  481. package/lib/goog/testing/propertyreplacer.js +0 -262
  482. package/lib/goog/testing/recordfunction.js +0 -215
  483. package/lib/goog/testing/stacktrace.js +0 -594
  484. package/lib/goog/testing/strictmock.js +0 -130
  485. package/lib/goog/testing/testcase.js +0 -1629
  486. package/lib/goog/testing/testrunner.js +0 -440
  487. package/lib/goog/uri/uri.js +0 -1524
  488. package/lib/goog/uri/utils.js +0 -1064
  489. package/lib/goog/useragent/product.js +0 -183
  490. package/lib/goog/useragent/product_isversion.js +0 -144
  491. package/lib/goog/useragent/useragent.js +0 -572
  492. package/lib/webdriver/actionsequence.js +0 -356
  493. package/lib/webdriver/builder.js +0 -207
  494. package/lib/webdriver/capabilities.js +0 -412
  495. package/lib/webdriver/events.js +0 -179
  496. package/lib/webdriver/firefoxdomexecutor.js +0 -175
  497. package/lib/webdriver/http/corsclient.js +0 -133
  498. package/lib/webdriver/http/http.js +0 -525
  499. package/lib/webdriver/http/xhrclient.js +0 -67
  500. package/lib/webdriver/locators.js +0 -257
  501. package/lib/webdriver/logging.js +0 -347
  502. package/lib/webdriver/session.js +0 -74
  503. package/lib/webdriver/stacktrace.js +0 -619
  504. package/lib/webdriver/test/builder_test.js +0 -53
  505. package/lib/webdriver/test/capabilities_test.js +0 -72
  506. package/lib/webdriver/test/events_test.js +0 -203
  507. package/lib/webdriver/test/http/corsclient_test.js +0 -151
  508. package/lib/webdriver/test/http/http_test.js +0 -428
  509. package/lib/webdriver/test/http/xhrclient_test.js +0 -196
  510. package/lib/webdriver/test/locators_test.js +0 -59
  511. package/lib/webdriver/test/logging_test.js +0 -85
  512. package/lib/webdriver/test/promise_error_test.js +0 -892
  513. package/lib/webdriver/test/promise_flow_test.js +0 -2365
  514. package/lib/webdriver/test/promise_generator_test.js +0 -323
  515. package/lib/webdriver/test/promise_test.js +0 -2012
  516. package/lib/webdriver/test/stacktrace_test.js +0 -480
  517. package/lib/webdriver/test/test_bootstrap.js +0 -67
  518. package/lib/webdriver/test/testing/asserts_test.js +0 -117
  519. package/lib/webdriver/test/testing/client_test.js +0 -88
  520. package/lib/webdriver/test/testing/testcase_test.js +0 -229
  521. package/lib/webdriver/test/testutil.js +0 -209
  522. package/lib/webdriver/test/testutil_test.js +0 -104
  523. package/lib/webdriver/test/until_test.js +0 -411
  524. package/lib/webdriver/test/webdriver_generator_test.js +0 -92
  525. package/lib/webdriver/test/webdriver_test.js +0 -2369
  526. package/lib/webdriver/testing/asserts.js +0 -487
  527. package/lib/webdriver/testing/client.js +0 -179
  528. package/lib/webdriver/testing/jsunit.js +0 -363
  529. package/lib/webdriver/testing/testcase.js +0 -168
  530. package/lib/webdriver/testing/window.js +0 -244
  531. package/lib/webdriver/touchsequence.js +0 -248
  532. package/lib/webdriver/until.js +0 -412
  533. package/lib/webdriver/webdriver.js +0 -2511
  534. package/test/_base_test.js +0 -129
package/remote/index.js CHANGED
@@ -17,276 +17,318 @@
17
17
 
18
18
  'use strict';
19
19
 
20
- var AdmZip = require('adm-zip'),
21
- AdmConstants = require('adm-zip/util/constants'),
20
+ const AdmZip = require('adm-zip'),
22
21
  fs = require('fs'),
23
22
  path = require('path'),
24
23
  url = require('url'),
25
24
  util = require('util');
26
25
 
27
- var _base = require('../_base'),
28
- webdriver = require('../'),
29
- promise = require('../').promise,
30
- httpUtil = require('../http/util'),
26
+ const httpUtil = require('../http/util'),
31
27
  exec = require('../io/exec'),
28
+ cmd = require('../lib/command'),
29
+ input = require('../lib/input'),
30
+ promise = require('../lib/promise'),
31
+ webdriver = require('../lib/webdriver'),
32
32
  net = require('../net'),
33
33
  portprober = require('../net/portprober');
34
34
 
35
35
 
36
36
 
37
37
  /**
38
- * Configuration options for a DriverService instance.
38
+ * A record object that defines the configuration options for a DriverService
39
+ * instance.
39
40
  *
40
- * - `loopback` - Whether the service should only be accessed on this host's
41
- * loopback address.
42
- * - `port` - The port to start the server on (must be > 0). If the port is
43
- * provided as a promise, the service will wait for the promise to resolve
44
- * before starting.
45
- * - `args` - The arguments to pass to the service. If a promise is provided,
46
- * the service will wait for it to resolve before starting.
47
- * - `path` - The base path on the server for the WebDriver wire protocol
48
- * (e.g. '/wd/hub'). Defaults to '/'.
49
- * - `env` - The environment variables that should be visible to the server
50
- * process. Defaults to inheriting the current process's environment.
51
- * - `stdio` - IO configuration for the spawned server process. For more
52
- * information, refer to the documentation of `child_process.spawn`.
53
- *
54
- * @typedef {{
55
- * loopback: (boolean|undefined),
56
- * port: (number|!webdriver.promise.Promise.<number>),
57
- * args: !(Array.<string>|webdriver.promise.Promise.<!Array.<string>>),
58
- * path: (string|undefined),
59
- * env: (!Object.<string, string>|undefined),
60
- * stdio: (string|!Array.<string|number|!Stream|null|undefined>|undefined)
61
- * }}
41
+ * @record
62
42
  */
63
- var ServiceOptions;
64
-
43
+ function ServiceOptions() {}
65
44
 
66
45
  /**
67
- * Manages the life and death of a native executable WebDriver server.
46
+ * Whether the service should only be accessed on this host's loopback address.
68
47
  *
69
- * It is expected that the driver server implements the
70
- * https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol.
71
- * Furthermore, the managed server should support multiple concurrent sessions,
72
- * so that this class may be reused for multiple clients.
73
- *
74
- * @param {string} executable Path to the executable to run.
75
- * @param {!ServiceOptions} options Configuration options for the service.
76
- * @constructor
48
+ * @type {(boolean|undefined)}
77
49
  */
78
- function DriverService(executable, options) {
79
-
80
- /** @private {string} */
81
- this.executable_ = executable;
82
-
83
- /** @private {boolean} */
84
- this.loopbackOnly_ = !!options.loopback;
85
-
86
- /** @private {(number|!webdriver.promise.Promise.<number>)} */
87
- this.port_ = options.port;
88
-
89
- /**
90
- * @private {!(Array.<string>|webdriver.promise.Promise.<!Array.<string>>)}
91
- */
92
- this.args_ = options.args;
93
-
94
- /** @private {string} */
95
- this.path_ = options.path || '/';
96
-
97
- /** @private {!Object.<string, string>} */
98
- this.env_ = options.env || process.env;
99
-
100
- /** @private {(string|!Array.<string|number|!Stream|null|undefined>)} */
101
- this.stdio_ = options.stdio || 'ignore';
102
-
103
- /**
104
- * A promise for the managed subprocess, or null if the server has not been
105
- * started yet. This promise will never be rejected.
106
- * @private {promise.Promise.<!exec.Command>}
107
- */
108
- this.command_ = null;
109
-
110
- /**
111
- * Promise that resolves to the server's address or null if the server has
112
- * not been started. This promise will be rejected if the server terminates
113
- * before it starts accepting WebDriver requests.
114
- * @private {promise.Promise.<string>}
115
- */
116
- this.address_ = null;
117
- }
50
+ ServiceOptions.prototype.loopback;
118
51
 
52
+ /**
53
+ * The host name to access the server on. If this option is specified, the
54
+ * {@link #loopback} option will be ignored.
55
+ *
56
+ * @type {(string|undefined)}
57
+ */
58
+ ServiceOptions.prototype.hostname;
119
59
 
120
60
  /**
121
- * The default amount of time, in milliseconds, to wait for the server to
122
- * start.
123
- * @type {number}
61
+ * The port to start the server on (must be > 0). If the port is provided as a
62
+ * promise, the service will wait for the promise to resolve before starting.
63
+ *
64
+ * @type {(number|!promise.Promise<number>)}
124
65
  */
125
- DriverService.DEFAULT_START_TIMEOUT_MS = 30 * 1000;
66
+ ServiceOptions.prototype.port;
126
67
 
68
+ /**
69
+ * The arguments to pass to the service. If a promise is provided, the service
70
+ * will wait for it to resolve before starting.
71
+ *
72
+ * @type {!(Array<string>|promise.Promise<!Array<string>>)}
73
+ */
74
+ ServiceOptions.prototype.args;
127
75
 
128
76
  /**
129
- * @return {!webdriver.promise.Promise.<string>} A promise that resolves to
130
- * the server's address.
131
- * @throws {Error} If the server has not been started.
77
+ * The base path on the server for the WebDriver wire protocol (e.g. '/wd/hub').
78
+ * Defaults to '/'.
79
+ *
80
+ * @type {(string|undefined|null)}
132
81
  */
133
- DriverService.prototype.address = function() {
134
- if (this.address_) {
135
- return this.address_;
136
- }
137
- throw Error('Server has not been started.');
138
- };
82
+ ServiceOptions.prototype.path;
139
83
 
84
+ /**
85
+ * The environment variables that should be visible to the server process.
86
+ * Defaults to inheriting the current process's environment.
87
+ *
88
+ * @type {(Object<string, string>|undefined)}
89
+ */
90
+ ServiceOptions.prototype.env;
140
91
 
141
92
  /**
142
- * Returns whether the underlying process is still running. This does not take
143
- * into account whether the process is in the process of shutting down.
144
- * @return {boolean} Whether the underlying service process is running.
93
+ * IO configuration for the spawned server process. For more information, refer
94
+ * to the documentation of `child_process.spawn`.
95
+ *
96
+ * @type {(string|!Array<string|number|!stream.Stream|null|undefined>|
97
+ * undefined)}
98
+ * @see https://nodejs.org/dist/latest-v4.x/docs/api/child_process.html#child_process_options_stdio
145
99
  */
146
- DriverService.prototype.isRunning = function() {
147
- return !!this.address_;
148
- };
100
+ ServiceOptions.prototype.stdio;
149
101
 
150
102
 
151
103
  /**
152
- * Starts the server if it is not already running.
153
- * @param {number=} opt_timeoutMs How long to wait, in milliseconds, for the
154
- * server to start accepting requests. Defaults to 30 seconds.
155
- * @return {!promise.Promise.<string>} A promise that will resolve
156
- * to the server's base URL when it has started accepting requests. If the
157
- * timeout expires before the server has started, the promise will be
158
- * rejected.
104
+ * Manages the life and death of a native executable WebDriver server.
105
+ *
106
+ * It is expected that the driver server implements the
107
+ * https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol.
108
+ * Furthermore, the managed server should support multiple concurrent sessions,
109
+ * so that this class may be reused for multiple clients.
159
110
  */
160
- DriverService.prototype.start = function(opt_timeoutMs) {
161
- if (this.address_) {
162
- return this.address_;
111
+ class DriverService {
112
+ /**
113
+ * @param {string} executable Path to the executable to run.
114
+ * @param {!ServiceOptions} options Configuration options for the service.
115
+ */
116
+ constructor(executable, options) {
117
+ /** @private {string} */
118
+ this.executable_ = executable;
119
+
120
+ /** @private {boolean} */
121
+ this.loopbackOnly_ = !!options.loopback;
122
+
123
+ /** @private {(string|undefined)} */
124
+ this.hostname_ = options.hostname;
125
+
126
+ /** @private {(number|!promise.Promise<number>)} */
127
+ this.port_ = options.port;
128
+
129
+ /**
130
+ * @private {!(Array<string>|promise.Promise<!Array<string>>)}
131
+ */
132
+ this.args_ = options.args;
133
+
134
+ /** @private {string} */
135
+ this.path_ = options.path || '/';
136
+
137
+ /** @private {!Object<string, string>} */
138
+ this.env_ = options.env || process.env;
139
+
140
+ /**
141
+ * @private {(string|!Array<string|number|!stream.Stream|null|undefined>)}
142
+ */
143
+ this.stdio_ = options.stdio || 'ignore';
144
+
145
+ /**
146
+ * A promise for the managed subprocess, or null if the server has not been
147
+ * started yet. This promise will never be rejected.
148
+ * @private {promise.Deferred<!exec.Command>}
149
+ */
150
+ this.command_ = null;
151
+
152
+ /**
153
+ * Promise that resolves to the server's address or null if the server has
154
+ * not been started. This promise will be rejected if the server terminates
155
+ * before it starts accepting WebDriver requests.
156
+ * @private {promise.Deferred<string>}
157
+ */
158
+ this.address_ = null;
163
159
  }
164
160
 
165
- var timeout = opt_timeoutMs || DriverService.DEFAULT_START_TIMEOUT_MS;
161
+ /**
162
+ * @return {!promise.Promise<string>} A promise that resolves to
163
+ * the server's address.
164
+ * @throws {Error} If the server has not been started.
165
+ */
166
+ address() {
167
+ if (this.address_) {
168
+ return this.address_.promise;
169
+ }
170
+ throw Error('Server has not been started.');
171
+ }
166
172
 
167
- var self = this;
168
- this.command_ = promise.defer();
169
- this.address_ = promise.defer();
170
- this.address_.fulfill(promise.when(this.port_, function(port) {
171
- if (port <= 0) {
172
- throw Error('Port must be > 0: ' + port);
173
+ /**
174
+ * Returns whether the underlying process is still running. This does not take
175
+ * into account whether the process is in the process of shutting down.
176
+ * @return {boolean} Whether the underlying service process is running.
177
+ */
178
+ isRunning() {
179
+ return !!this.address_;
180
+ }
181
+
182
+ /**
183
+ * Starts the server if it is not already running.
184
+ * @param {number=} opt_timeoutMs How long to wait, in milliseconds, for the
185
+ * server to start accepting requests. Defaults to 30 seconds.
186
+ * @return {!promise.Promise<string>} A promise that will resolve
187
+ * to the server's base URL when it has started accepting requests. If the
188
+ * timeout expires before the server has started, the promise will be
189
+ * rejected.
190
+ */
191
+ start(opt_timeoutMs) {
192
+ if (this.address_) {
193
+ return this.address_.promise;
173
194
  }
174
- return promise.when(self.args_, function(args) {
175
- var command = exec(self.executable_, {
176
- args: args,
177
- env: self.env_,
178
- stdio: self.stdio_
179
- });
180
195
 
181
- self.command_.fulfill(command);
196
+ var timeout = opt_timeoutMs || DriverService.DEFAULT_START_TIMEOUT_MS;
197
+
198
+ var self = this;
199
+ this.command_ = promise.defer();
200
+ this.address_ = promise.defer();
201
+ this.address_.fulfill(promise.when(this.port_, function(port) {
202
+ if (port <= 0) {
203
+ throw Error('Port must be > 0: ' + port);
204
+ }
205
+ return promise.when(self.args_, function(args) {
206
+ var command = exec(self.executable_, {
207
+ args: args,
208
+ env: self.env_,
209
+ stdio: self.stdio_
210
+ });
182
211
 
183
- var earlyTermination = command.result().then(function(result) {
184
- var error = result.code == null ?
185
- Error('Server was killed with ' + result.signal) :
186
- Error('Server terminated early with status ' + result.code);
187
- self.address_.reject(error);
188
- self.address_ = null;
189
- self.command_ = null;
190
- throw error;
191
- });
212
+ self.command_.fulfill(command);
192
213
 
193
- var serverUrl = url.format({
194
- protocol: 'http',
195
- hostname: !self.loopbackOnly_ && net.getAddress() ||
196
- net.getLoopbackAddress(),
197
- port: port,
198
- pathname: self.path_
199
- });
214
+ var earlyTermination = command.result().then(function(result) {
215
+ var error = result.code == null ?
216
+ Error('Server was killed with ' + result.signal) :
217
+ Error('Server terminated early with status ' + result.code);
218
+ self.address_.reject(error);
219
+ self.address_ = null;
220
+ self.command_ = null;
221
+ throw error;
222
+ });
200
223
 
201
- return new promise.Promise(function(fulfill, reject) {
202
- var ready = httpUtil.waitForServer(serverUrl, timeout)
203
- .then(fulfill, reject);
204
- earlyTermination.thenCatch(function(e) {
205
- ready.cancel(e);
206
- reject(Error(e.message));
224
+ var hostname = self.hostname_;
225
+ if (!hostname) {
226
+ hostname = !self.loopbackOnly_ && net.getAddress()
227
+ || net.getLoopbackAddress();
228
+ }
229
+
230
+ var serverUrl = url.format({
231
+ protocol: 'http',
232
+ hostname: hostname,
233
+ port: port,
234
+ pathname: self.path_
235
+ });
236
+
237
+ return new promise.Promise(function(fulfill, reject) {
238
+ var ready = httpUtil.waitForServer(serverUrl, timeout)
239
+ .then(fulfill, reject);
240
+ earlyTermination.catch(function(e) {
241
+ ready.cancel(/** @type {Error} */(e));
242
+ reject(Error(e.message));
243
+ });
244
+ }).then(function() {
245
+ return serverUrl;
207
246
  });
208
- }).then(function() {
209
- return serverUrl;
210
247
  });
211
- });
212
- }));
248
+ }));
213
249
 
214
- return this.address_;
215
- };
250
+ return this.address_.promise;
251
+ }
216
252
 
253
+ /**
254
+ * Stops the service if it is not currently running. This function will kill
255
+ * the server immediately. To synchronize with the active control flow, use
256
+ * {@link #stop()}.
257
+ * @return {!promise.Promise} A promise that will be resolved when
258
+ * the server has been stopped.
259
+ */
260
+ kill() {
261
+ if (!this.address_ || !this.command_) {
262
+ return promise.fulfilled(); // Not currently running.
263
+ }
264
+ return this.command_.promise.then(function(command) {
265
+ command.kill('SIGTERM');
266
+ });
267
+ }
217
268
 
218
- /**
219
- * Stops the service if it is not currently running. This function will kill
220
- * the server immediately. To synchronize with the active control flow, use
221
- * {@link #stop()}.
222
- * @return {!webdriver.promise.Promise} A promise that will be resolved when
223
- * the server has been stopped.
224
- */
225
- DriverService.prototype.kill = function() {
226
- if (!this.address_ || !this.command_) {
227
- return promise.fulfilled(); // Not currently running.
269
+ /**
270
+ * Schedules a task in the current control flow to stop the server if it is
271
+ * currently running.
272
+ * @return {!promise.Promise} A promise that will be resolved when
273
+ * the server has been stopped.
274
+ */
275
+ stop() {
276
+ return promise.controlFlow().execute(this.kill.bind(this));
228
277
  }
229
- return this.command_.then(function(command) {
230
- command.kill('SIGTERM');
231
- });
232
- };
278
+ }
233
279
 
234
280
 
235
281
  /**
236
- * Schedules a task in the current control flow to stop the server if it is
237
- * currently running.
238
- * @return {!webdriver.promise.Promise} A promise that will be resolved when
239
- * the server has been stopped.
282
+ * The default amount of time, in milliseconds, to wait for the server to
283
+ * start.
284
+ * @const {number}
240
285
  */
241
- DriverService.prototype.stop = function() {
242
- return promise.controlFlow().execute(this.kill.bind(this));
243
- };
244
-
286
+ DriverService.DEFAULT_START_TIMEOUT_MS = 30 * 1000;
245
287
 
246
288
 
247
289
  /**
248
290
  * Manages the life and death of the
249
291
  * <a href="http://selenium-release.storage.googleapis.com/index.html">
250
292
  * standalone Selenium server</a>.
251
- *
252
- * @param {string} jar Path to the Selenium server jar.
253
- * @param {SeleniumServer.Options=} opt_options Configuration options for the
254
- * server.
255
- * @throws {Error} If the path to the Selenium jar is not specified or if an
256
- * invalid port is specified.
257
- * @constructor
258
- * @extends {DriverService}
259
293
  */
260
- function SeleniumServer(jar, opt_options) {
261
- if (!jar) {
262
- throw Error('Path to the Selenium jar not specified');
263
- }
294
+ class SeleniumServer extends DriverService {
295
+ /**
296
+ * @param {string} jar Path to the Selenium server jar.
297
+ * @param {SeleniumServer.Options=} opt_options Configuration options for the
298
+ * server.
299
+ * @throws {Error} If the path to the Selenium jar is not specified or if an
300
+ * invalid port is specified.
301
+ */
302
+ constructor(jar, opt_options) {
303
+ if (!jar) {
304
+ throw Error('Path to the Selenium jar not specified');
305
+ }
264
306
 
265
- var options = opt_options || {};
307
+ var options = opt_options || {};
266
308
 
267
- if (options.port < 0) {
268
- throw Error('Port must be >= 0: ' + options.port);
269
- }
309
+ if (options.port < 0) {
310
+ throw Error('Port must be >= 0: ' + options.port);
311
+ }
270
312
 
271
- var port = options.port || portprober.findFreePort();
272
- var args = promise.when(options.jvmArgs || [], function(jvmArgs) {
273
- return promise.when(options.args || [], function(args) {
274
- return promise.when(port, function(port) {
275
- return jvmArgs.concat(['-jar', jar, '-port', port]).concat(args);
313
+ var port = options.port || portprober.findFreePort();
314
+ var args = promise.when(options.jvmArgs || [], function(jvmArgs) {
315
+ return promise.when(options.args || [], function(args) {
316
+ return promise.when(port, function(port) {
317
+ return jvmArgs.concat(['-jar', jar, '-port', port]).concat(args);
318
+ });
276
319
  });
277
320
  });
278
- });
279
-
280
- DriverService.call(this, 'java', {
281
- loopback: options.loopback,
282
- port: port,
283
- args: args,
284
- path: '/wd/hub',
285
- env: options.env,
286
- stdio: options.stdio
287
- });
321
+
322
+ super('java', {
323
+ loopback: options.loopback,
324
+ port: port,
325
+ args: args,
326
+ path: '/wd/hub',
327
+ env: options.env,
328
+ stdio: options.stdio
329
+ });
330
+ }
288
331
  }
289
- util.inherits(SeleniumServer, DriverService);
290
332
 
291
333
 
292
334
  /**
@@ -308,13 +350,14 @@ util.inherits(SeleniumServer, DriverService);
308
350
  *
309
351
  * @typedef {{
310
352
  * loopback: (boolean|undefined),
311
- * port: (number|!webdriver.promise.Promise.<number>),
312
- * args: !(Array.<string>|webdriver.promise.Promise.<!Array.<string>>),
313
- * jvmArgs: (!Array.<string>|
314
- * !webdriver.promise.Promise.<!Array.<string>>|
353
+ * port: (number|!promise.Promise<number>),
354
+ * args: !(Array<string>|promise.Promise<!Array<string>>),
355
+ * jvmArgs: (!Array<string>|
356
+ * !promise.Promise<!Array<string>>|
315
357
  * undefined),
316
- * env: (!Object.<string, string>|undefined),
317
- * stdio: (string|!Array.<string|number|!Stream|null|undefined>|undefined)
358
+ * env: (!Object<string, string>|undefined),
359
+ * stdio: (string|!Array<string|number|!stream.Stream|null|undefined>|
360
+ * undefined)
318
361
  * }}
319
362
  */
320
363
  SeleniumServer.Options;
@@ -335,39 +378,47 @@ SeleniumServer.Options;
335
378
  * Java Selenium server. The file detector will fail if used with a server that
336
379
  * only supports standard WebDriver commands (such as the ChromeDriver).
337
380
  *
338
- * @constructor
339
- * @extends {webdriver.FileDetector}
340
381
  * @final
341
382
  */
342
- var FileDetector = function() {};
343
- util.inherits(webdriver.FileDetector, FileDetector);
344
-
345
-
346
- /** @override */
347
- FileDetector.prototype.handleFile = function(driver, filePath) {
348
- return promise.checkedNodeCall(fs.stat, filePath).then(function(stats) {
349
- if (stats.isDirectory()) {
350
- throw TypeError('Uploading directories is not supported: ' + filePath);
351
- }
383
+ class FileDetector extends input.FileDetector {
384
+ /**
385
+ * Prepares a `file` for use with the remote browser. If the provided path
386
+ * does not reference a normal file (i.e. it does not exist or is a
387
+ * directory), then the promise returned by this method will be resolved with
388
+ * the original file path. Otherwise, this method will upload the file to the
389
+ * remote server, which will return the file's path on the remote system so
390
+ * it may be referenced in subsequent commands.
391
+ *
392
+ * @override
393
+ */
394
+ handleFile(driver, file) {
395
+ return promise.checkedNodeCall(fs.stat, file).then(function(stats) {
396
+ if (stats.isDirectory()) {
397
+ return file; // Not a valid file, return original input.
398
+ }
399
+
400
+ var zip = new AdmZip();
401
+ zip.addLocalFile(file);
402
+ // Stored compression, see https://en.wikipedia.org/wiki/Zip_(file_format)
403
+ zip.getEntries()[0].header.method = 0;
404
+
405
+ var command = new cmd.Command(cmd.Name.UPLOAD_FILE)
406
+ .setParameter('file', zip.toBuffer().toString('base64'));
407
+ return driver.schedule(command,
408
+ 'remote.FileDetector.handleFile(' + file + ')');
409
+ }, function(err) {
410
+ if (err.code === 'ENOENT') {
411
+ return file; // Not a file; return original input.
412
+ }
413
+ throw err;
414
+ });
415
+ }
416
+ }
352
417
 
353
- var zip = new AdmZip();
354
- zip.addLocalFile(filePath);
355
- zip.getEntries()[0].header.method = AdmConstants.STORED;
356
-
357
- var command = new webdriver.Command(webdriver.CommandName.UPLOAD_FILE)
358
- .setParameter('file', zip.toBuffer().toString('base64'));
359
- return driver.schedule(command,
360
- 'remote.FileDetector.handleFile(' + filePath + ')');
361
- }, function(err) {
362
- if (err.code === 'ENOENT') {
363
- return filePath; // Not a file; return original input.
364
- }
365
- throw err;
366
- });
367
- };
368
418
 
369
419
  // PUBLIC API
370
420
 
371
421
  exports.DriverService = DriverService;
372
422
  exports.FileDetector = FileDetector;
373
423
  exports.SeleniumServer = SeleniumServer;
424
+ exports.ServiceOptions = ServiceOptions; // Exported for API docs.