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