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