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/firefox/binary.js CHANGED
@@ -17,43 +17,43 @@
17
17
 
18
18
  /**
19
19
  * @fileoverview Manages Firefox binaries. This module is considered internal;
20
- * users should use {@link selenium-webdriver/firefox}.
20
+ * users should use {@link ./firefox selenium-webdriver/firefox}.
21
21
  */
22
22
 
23
23
  'use strict';
24
24
 
25
- var child = require('child_process'),
25
+ const child = require('child_process'),
26
26
  fs = require('fs'),
27
27
  path = require('path'),
28
28
  util = require('util');
29
29
 
30
- var Serializable = require('..').Serializable,
31
- promise = require('..').promise,
32
- _base = require('../_base'),
30
+ const isDevMode = require('../lib/devmode'),
31
+ promise = require('../lib/promise'),
32
+ Symbols = require('../lib/symbols'),
33
33
  io = require('../io'),
34
34
  exec = require('../io/exec');
35
35
 
36
36
 
37
37
 
38
38
  /** @const */
39
- var NO_FOCUS_LIB_X86 = _base.isDevMode() ?
39
+ const NO_FOCUS_LIB_X86 = isDevMode ?
40
40
  path.join(__dirname, '../../../../cpp/prebuilt/i386/libnoblur.so') :
41
41
  path.join(__dirname, '../lib/firefox/i386/libnoblur.so') ;
42
42
 
43
43
  /** @const */
44
- var NO_FOCUS_LIB_AMD64 = _base.isDevMode() ?
44
+ const NO_FOCUS_LIB_AMD64 = isDevMode ?
45
45
  path.join(__dirname, '../../../../cpp/prebuilt/amd64/libnoblur64.so') :
46
46
  path.join(__dirname, '../lib/firefox/amd64/libnoblur64.so') ;
47
47
 
48
- var X_IGNORE_NO_FOCUS_LIB = 'x_ignore_nofocus.so';
48
+ const X_IGNORE_NO_FOCUS_LIB = 'x_ignore_nofocus.so';
49
49
 
50
50
  var foundBinary = null;
51
51
 
52
52
 
53
53
  /**
54
54
  * Checks the default Windows Firefox locations in Program Files.
55
- * @return {!promise.Promise.<?string>} A promise for the located executable.
56
- * The promise will resolve to {@code null} if Fireox was not found.
55
+ * @return {!Promise<?string>} A promise for the located executable.
56
+ * The promise will resolve to {@code null} if Firefox was not found.
57
57
  */
58
58
  function defaultWindowsLocation() {
59
59
  var files = [
@@ -136,90 +136,82 @@ function installNoFocusLibs(profileDir) {
136
136
  * Provides a mechanism to configure and launch Firefox in a subprocess for
137
137
  * use with WebDriver.
138
138
  *
139
- * @param {string=} opt_exe Path to the Firefox binary to use. If not
140
- * specified, will attempt to locate Firefox on the current system.
141
- * @constructor
142
- * @extends {Serializable.<string>}
139
+ * @final
143
140
  */
144
- var Binary = function(opt_exe) {
145
- Serializable.call(this);
146
-
147
- /** @private {(string|undefined)} */
148
- this.exe_ = opt_exe;
149
-
150
- /** @private {!Array.<string>} */
151
- this.args_ = [];
152
-
153
- /** @private {!Object.<string, string>} */
154
- this.env_ = {};
155
- Object.keys(process.env).forEach(function(key) {
156
- this.env_[key] = process.env[key];
157
- }.bind(this));
158
- this.env_['MOZ_CRASHREPORTER_DISABLE'] = '1';
159
- this.env_['MOZ_NO_REMOTE'] = '1';
160
- this.env_['NO_EM_RESTART'] = '1';
161
- };
162
- util.inherits(Binary, Serializable);
163
-
141
+ class Binary {
142
+ /**
143
+ * @param {string=} opt_exe Path to the Firefox binary to use. If not
144
+ * specified, will attempt to locate Firefox on the current system.
145
+ */
146
+ constructor(opt_exe) {
147
+ /** @private {(string|undefined)} */
148
+ this.exe_ = opt_exe;
149
+
150
+ /** @private {!Array.<string>} */
151
+ this.args_ = [];
152
+
153
+ /** @private {!Object<string, string>} */
154
+ this.env_ = {};
155
+ Object.assign(this.env_, process.env, {
156
+ MOZ_CRASHREPORTER_DISABLE: '1',
157
+ MOZ_NO_REMOTE: '1',
158
+ NO_EM_RESTART: '1'
159
+ });
160
+ }
164
161
 
165
- /**
166
- * Add arguments to the command line used to start Firefox.
167
- * @param {...(string|!Array.<string>)} var_args Either the arguments to add as
168
- * varargs, or the arguments as an array.
169
- */
170
- Binary.prototype.addArguments = function(var_args) {
171
- for (var i = 0; i < arguments.length; i++) {
172
- if (util.isArray(arguments[i])) {
173
- this.args_ = this.args_.concat(arguments[i]);
174
- } else {
175
- this.args_.push(arguments[i]);
162
+ /**
163
+ * Add arguments to the command line used to start Firefox.
164
+ * @param {...(string|!Array.<string>)} var_args Either the arguments to add
165
+ * as varargs, or the arguments as an array.
166
+ */
167
+ addArguments(var_args) {
168
+ for (var i = 0; i < arguments.length; i++) {
169
+ if (Array.isArray(arguments[i])) {
170
+ this.args_ = this.args_.concat(arguments[i]);
171
+ } else {
172
+ this.args_.push(arguments[i]);
173
+ }
176
174
  }
177
175
  }
178
- };
179
176
 
180
-
181
- /**
182
- * Launches Firefox and returns a promise that will be fulfilled when the
183
- * process terminates.
184
- * @param {string} profile Path to the profile directory to use.
185
- * @return {!promise.Promise.<!exec.Command>} A promise for the handle to the
186
- * started subprocess.
187
- */
188
- Binary.prototype.launch = function(profile) {
189
- var env = {};
190
- Object.keys(this.env_).forEach(function(key) {
191
- env[key] = this.env_[key];
192
- }.bind(this));
193
- env['XRE_PROFILE_PATH'] = profile;
194
-
195
- var args = ['-foreground'].concat(this.args_);
196
-
197
- return promise.when(this.exe_ || findFirefox(), function(firefox) {
198
- if (process.platform === 'win32' || process.platform === 'darwin') {
199
- return exec(firefox, {args: args, env: env});
200
- }
201
- return installNoFocusLibs(profile).then(function(ldLibraryPath) {
202
- env['LD_LIBRARY_PATH'] = ldLibraryPath + ':' + env['LD_LIBRARY_PATH'];
203
- env['LD_PRELOAD'] = X_IGNORE_NO_FOCUS_LIB;
204
- return exec(firefox, {args: args, env: env});
177
+ /**
178
+ * Launches Firefox and returns a promise that will be fulfilled when the
179
+ * process terminates.
180
+ * @param {string} profile Path to the profile directory to use.
181
+ * @return {!promise.Promise<!exec.Command>} A promise for the handle to the
182
+ * started subprocess.
183
+ */
184
+ launch(profile) {
185
+ let env = {};
186
+ Object.assign(env, this.env_, {XRE_PROFILE_PATH: profile});
187
+
188
+ let args = ['-foreground'].concat(this.args_);
189
+
190
+ return promise.when(this.exe_ || findFirefox(), function(firefox) {
191
+ if (process.platform === 'win32' || process.platform === 'darwin') {
192
+ return exec(firefox, {args: args, env: env});
193
+ }
194
+ return installNoFocusLibs(profile).then(function(ldLibraryPath) {
195
+ env['LD_LIBRARY_PATH'] = ldLibraryPath + ':' + env['LD_LIBRARY_PATH'];
196
+ env['LD_PRELOAD'] = X_IGNORE_NO_FOCUS_LIB;
197
+ return exec(firefox, {args: args, env: env});
198
+ });
205
199
  });
206
- });
207
- };
208
-
200
+ }
209
201
 
210
- /**
211
- * Returns a promise for the wire representation of this binary. Note: the
212
- * FirefoxDriver only supports passing the path to the binary executable over
213
- * the wire; all command line arguments and environment variables will be
214
- * discarded.
215
- *
216
- * @return {!promise.Promise.<string>} A promise for this binary's wire
217
- * representation.
218
- * @override
219
- */
220
- Binary.prototype.serialize = function() {
221
- return promise.when(this.exe_ || findFirefox());
222
- };
202
+ /**
203
+ * Returns a promise for the wire representation of this binary. Note: the
204
+ * FirefoxDriver only supports passing the path to the binary executable over
205
+ * the wire; all command line arguments and environment variables will be
206
+ * discarded.
207
+ *
208
+ * @return {!promise.Promise<string>} A promise for this binary's wire
209
+ * representation.
210
+ */
211
+ [Symbols.serialize]() {
212
+ return promise.fulfilled(this.exe_ || findFirefox());
213
+ }
214
+ }
223
215
 
224
216
 
225
217
  // PUBLIC API
@@ -19,35 +19,27 @@
19
19
 
20
20
  'use strict';
21
21
 
22
- var AdmZip = require('adm-zip'),
22
+ const AdmZip = require('adm-zip'),
23
23
  fs = require('fs'),
24
24
  path = require('path'),
25
- util = require('util'),
26
25
  xml = require('xml2js');
27
26
 
28
- var promise = require('..').promise,
27
+ const promise = require('../lib/promise'),
29
28
  checkedCall = promise.checkedNodeCall,
30
29
  io = require('../io');
31
30
 
32
31
 
33
32
  /**
34
33
  * Thrown when there an add-on is malformed.
35
- * @param {string} msg The error message.
36
- * @constructor
37
- * @extends {Error}
38
34
  */
39
- function AddonFormatError(msg) {
40
- Error.call(this);
41
-
42
- Error.captureStackTrace(this, AddonFormatError);
43
-
44
- /** @override */
45
- this.name = AddonFormatError.name;
46
-
47
- /** @override */
48
- this.message = msg;
35
+ class AddonFormatError extends Error {
36
+ /** @param {string} msg The error message. */
37
+ constructor(msg) {
38
+ super(msg);
39
+ /** @override */
40
+ this.name = this.constructor.name;
41
+ }
49
42
  }
50
- util.inherits(AddonFormatError, Error);
51
43
 
52
44
 
53
45
 
@@ -147,7 +139,7 @@ function getDetails(addonPath) {
147
139
  /**
148
140
  * Reads the manifest for a Firefox add-on.
149
141
  * @param {string} addonPath Path to a Firefox add-on as a xpi or an extension.
150
- * @return {!promise.Promise.<!Object>} A promise for the parsed manifest.
142
+ * @return {!promise.Promise<!Object>} A promise for the parsed manifest.
151
143
  */
152
144
  function readManifest(addonPath) {
153
145
  var manifest;
package/firefox/index.js CHANGED
@@ -94,221 +94,221 @@
94
94
 
95
95
  'use strict';
96
96
 
97
- var url = require('url'),
98
- util = require('util');
97
+ const url = require('url');
99
98
 
100
- var Binary = require('./binary').Binary,
99
+ const Binary = require('./binary').Binary,
101
100
  Profile = require('./profile').Profile,
102
101
  decodeProfile = require('./profile').decode,
103
- webdriver = require('..'),
104
102
  executors = require('../executors'),
105
103
  httpUtil = require('../http/util'),
106
104
  io = require('../io'),
105
+ capabilities = require('../lib/capabilities'),
106
+ logging = require('../lib/logging'),
107
+ promise = require('../lib/promise'),
108
+ webdriver = require('../lib/webdriver'),
107
109
  net = require('../net'),
108
110
  portprober = require('../net/portprober');
109
111
 
110
112
 
111
113
  /**
112
114
  * Configuration options for the FirefoxDriver.
113
- * @constructor
114
115
  */
115
- var Options = function() {
116
- /** @private {Profile} */
117
- this.profile_ = null;
116
+ class Options {
117
+ constructor() {
118
+ /** @private {Profile} */
119
+ this.profile_ = null;
118
120
 
119
- /** @private {Binary} */
120
- this.binary_ = null;
121
+ /** @private {Binary} */
122
+ this.binary_ = null;
121
123
 
122
- /** @private {webdriver.logging.Preferences} */
123
- this.logPrefs_ = null;
124
+ /** @private {logging.Preferences} */
125
+ this.logPrefs_ = null;
124
126
 
125
- /** @private {webdriver.ProxyConfig} */
126
- this.proxy_ = null;
127
- };
128
-
129
-
130
- /**
131
- * Sets the profile to use. The profile may be specified as a
132
- * {@link Profile} object or as the path to an existing Firefox profile to use
133
- * as a template.
134
- *
135
- * @param {(string|!Profile)} profile The profile to use.
136
- * @return {!Options} A self reference.
137
- */
138
- Options.prototype.setProfile = function(profile) {
139
- if (typeof profile === 'string') {
140
- profile = new Profile(profile);
127
+ /** @private {?capabilities.ProxyConfig} */
128
+ this.proxy_ = null;
141
129
  }
142
- this.profile_ = profile;
143
- return this;
144
- };
145
-
146
130
 
147
- /**
148
- * Sets the binary to use. The binary may be specified as the path to a Firefox
149
- * executable, or as a {@link Binary} object.
150
- *
151
- * @param {(string|!Binary)} binary The binary to use.
152
- * @return {!Options} A self reference.
153
- */
154
- Options.prototype.setBinary = function(binary) {
155
- if (typeof binary === 'string') {
156
- binary = new Binary(binary);
131
+ /**
132
+ * Sets the profile to use. The profile may be specified as a
133
+ * {@link Profile} object or as the path to an existing Firefox profile to use
134
+ * as a template.
135
+ *
136
+ * @param {(string|!Profile)} profile The profile to use.
137
+ * @return {!Options} A self reference.
138
+ */
139
+ setProfile(profile) {
140
+ if (typeof profile === 'string') {
141
+ profile = new Profile(profile);
142
+ }
143
+ this.profile_ = profile;
144
+ return this;
157
145
  }
158
- this.binary_ = binary;
159
- return this;
160
- };
161
-
162
-
163
- /**
164
- * Sets the logging preferences for the new session.
165
- * @param {webdriver.logging.Preferences} prefs The logging preferences.
166
- * @return {!Options} A self reference.
167
- */
168
- Options.prototype.setLoggingPreferences = function(prefs) {
169
- this.logPrefs_ = prefs;
170
- return this;
171
- };
172
-
173
-
174
- /**
175
- * Sets the proxy to use.
176
- *
177
- * @param {webdriver.ProxyConfig} proxy The proxy configuration to use.
178
- * @return {!Options} A self reference.
179
- */
180
- Options.prototype.setProxy = function(proxy) {
181
- this.proxy_ = proxy;
182
- return this;
183
- };
184
-
185
146
 
186
- /**
187
- * Converts these options to a {@link webdriver.Capabilities} instance.
188
- *
189
- * @return {!webdriver.Capabilities} A new capabilities object.
190
- */
191
- Options.prototype.toCapabilities = function(opt_remote) {
192
- var caps = webdriver.Capabilities.firefox();
193
- if (this.logPrefs_) {
194
- caps.set(webdriver.Capability.LOGGING_PREFS, this.logPrefs_);
147
+ /**
148
+ * Sets the binary to use. The binary may be specified as the path to a Firefox
149
+ * executable, or as a {@link Binary} object.
150
+ *
151
+ * @param {(string|!Binary)} binary The binary to use.
152
+ * @return {!Options} A self reference.
153
+ */
154
+ setBinary(binary) {
155
+ if (typeof binary === 'string') {
156
+ binary = new Binary(binary);
157
+ }
158
+ this.binary_ = binary;
159
+ return this;
195
160
  }
196
- if (this.proxy_) {
197
- caps.set(webdriver.Capability.PROXY, this.proxy_);
161
+
162
+ /**
163
+ * Sets the logging preferences for the new session.
164
+ * @param {logging.Preferences} prefs The logging preferences.
165
+ * @return {!Options} A self reference.
166
+ */
167
+ setLoggingPreferences(prefs) {
168
+ this.logPrefs_ = prefs;
169
+ return this;
198
170
  }
199
- if (this.binary_) {
200
- caps.set('firefox_binary', this.binary_);
171
+
172
+ /**
173
+ * Sets the proxy to use.
174
+ *
175
+ * @param {capabilities.ProxyConfig} proxy The proxy configuration to use.
176
+ * @return {!Options} A self reference.
177
+ */
178
+ setProxy(proxy) {
179
+ this.proxy_ = proxy;
180
+ return this;
201
181
  }
202
- if (this.profile_) {
203
- caps.set('firefox_profile', this.profile_);
182
+
183
+ /**
184
+ * Converts these options to a {@link capabilities.Capabilities} instance.
185
+ *
186
+ * @return {!capabilities.Capabilities} A new capabilities object.
187
+ */
188
+ toCapabilities() {
189
+ var caps = capabilities.Capabilities.firefox();
190
+ if (this.logPrefs_) {
191
+ caps.set(capabilities.Capability.LOGGING_PREFS, this.logPrefs_);
192
+ }
193
+ if (this.proxy_) {
194
+ caps.set(capabilities.Capability.PROXY, this.proxy_);
195
+ }
196
+ if (this.binary_) {
197
+ caps.set('firefox_binary', this.binary_);
198
+ }
199
+ if (this.profile_) {
200
+ caps.set('firefox_profile', this.profile_);
201
+ }
202
+ return caps;
204
203
  }
205
- return caps;
206
- };
204
+ }
207
205
 
208
206
 
209
207
  /**
210
208
  * A WebDriver client for Firefox.
211
- *
212
- * @param {(Options|webdriver.Capabilities|Object)=} opt_config The
213
- * configuration options for this driver, specified as either an
214
- * {@link Options} or {@link webdriver.Capabilities}, or as a raw hash
215
- * object.
216
- * @param {webdriver.promise.ControlFlow=} opt_flow The flow to
217
- * schedule commands through. Defaults to the active flow object.
218
- * @constructor
219
- * @extends {webdriver.WebDriver}
220
209
  */
221
- var Driver = function(opt_config, opt_flow) {
222
- var caps;
223
- if (opt_config instanceof Options) {
224
- caps = opt_config.toCapabilities();
225
- } else {
226
- caps = new webdriver.Capabilities(opt_config);
227
- }
228
-
229
- var binary = caps.get('firefox_binary') || new Binary();
230
- if (typeof binary === 'string') {
231
- binary = new Binary(binary);
232
- }
233
-
234
- var profile = caps.get('firefox_profile') || new Profile();
210
+ class Driver extends webdriver.WebDriver {
211
+ /**
212
+ * @param {(Options|capabilities.Capabilities|Object)=} opt_config The
213
+ * configuration options for this driver, specified as either an
214
+ * {@link Options} or {@link capabilities.Capabilities}, or as a raw hash
215
+ * object.
216
+ * @param {promise.ControlFlow=} opt_flow The flow to
217
+ * schedule commands through. Defaults to the active flow object.
218
+ */
219
+ constructor(opt_config, opt_flow) {
220
+ let caps;
221
+ if (opt_config instanceof Options) {
222
+ caps = opt_config.toCapabilities();
223
+ } else {
224
+ caps = new capabilities.Capabilities(opt_config);
225
+ }
235
226
 
236
- caps.set('firefox_binary', null);
237
- caps.set('firefox_profile', null);
227
+ let binary = caps.get('firefox_binary') || new Binary();
228
+ if (typeof binary === 'string') {
229
+ binary = new Binary(binary);
230
+ }
238
231
 
239
- /** @private {?string} */
240
- this.profilePath_ = null;
232
+ let profile = caps.get('firefox_profile') || new Profile();
241
233
 
242
- var self = this;
243
- var freePort = portprober.findFreePort();
234
+ caps.set('firefox_binary', null);
235
+ caps.set('firefox_profile', null);
244
236
 
245
- /** @private */
246
- this.command_ = freePort.then(function(port) {
247
- if (typeof profile === 'string') {
248
- return decodeProfile(profile).then(function(dir) {
249
- var profile = new Profile(dir);
237
+ let self; // Cannot assign to 'this' until after we call super.
238
+ let freePort = portprober.findFreePort();
239
+ let command = freePort.then(function(port) {
240
+ if (typeof profile === 'string') {
241
+ return decodeProfile(profile).then(function(dir) {
242
+ var profile = new Profile(dir);
243
+ profile.setPreference('webdriver_firefox_port', port);
244
+ return profile.writeToDisk();
245
+ });
246
+ } else {
250
247
  profile.setPreference('webdriver_firefox_port', port);
251
248
  return profile.writeToDisk();
252
- });
253
- } else {
254
- profile.setPreference('webdriver_firefox_port', port);
255
- return profile.writeToDisk();
256
- }
257
- }).then(function(profileDir) {
258
- self.profilePath_ = profileDir;
259
- return binary.launch(profileDir);
260
- });
261
-
262
- var serverUrl = this.command_
263
- .then(function() { return freePort; })
264
- .then(function(port) {
265
- var serverUrl = url.format({
266
- protocol: 'http',
267
- hostname: net.getLoopbackAddress(),
268
- port: port,
269
- pathname: '/hub'
270
- });
249
+ }
250
+ }).then(function(profileDir) {
251
+ self.profilePath_ = profileDir;
252
+ return binary.launch(profileDir);
253
+ });
254
+
255
+ let serverUrl = command
256
+ .then(function() { return freePort; })
257
+ .then(function(/** number */port) {
258
+ var serverUrl = url.format({
259
+ protocol: 'http',
260
+ hostname: net.getLoopbackAddress(),
261
+ port: port + '',
262
+ pathname: '/hub'
263
+ });
271
264
 
272
- return httpUtil.waitForServer(serverUrl, 45 * 1000).then(function() {
273
- return serverUrl;
265
+ return httpUtil.waitForServer(serverUrl, 45 * 1000).then(function() {
266
+ return serverUrl;
267
+ });
274
268
  });
275
- });
276
269
 
277
- var executor = executors.createExecutor(serverUrl);
278
- var driver = webdriver.WebDriver.createSession(executor, caps, opt_flow);
270
+ var executor = executors.createExecutor(serverUrl);
271
+ var driver = webdriver.WebDriver.createSession(executor, caps, opt_flow);
279
272
 
280
- webdriver.WebDriver.call(this, driver.getSession(), executor, opt_flow);
281
- };
282
- util.inherits(Driver, webdriver.WebDriver);
273
+ super(driver.getSession(), executor, opt_flow);
274
+ self = this;
283
275
 
276
+ /** @private {?string} */
277
+ this.profilePath_ = null;
284
278
 
285
- /**
286
- * This function is a no-op as file detectors are not supported by this
287
- * implementation.
288
- * @override
289
- */
290
- Driver.prototype.setFileDetector = function() {
291
- };
292
-
293
-
294
- /** @override */
295
- Driver.prototype.quit = function() {
296
- return this.call(function() {
297
- var self = this;
298
- return Driver.super_.prototype.quit.call(this)
299
- .thenFinally(function() {
300
- return self.command_.then(function(command) {
301
- command.kill();
302
- return command.result();
279
+ /** @private */
280
+ this.command_ = command;
281
+ }
282
+
283
+ /**
284
+ * This function is a no-op as file detectors are not supported by this
285
+ * implementation.
286
+ * @override
287
+ */
288
+ setFileDetector() {
289
+ }
290
+
291
+ /** @override */
292
+ quit() {
293
+ // TODO: use super.quit when closure compiler knows how to transpile it.
294
+ // let superQuit = super.quit;
295
+ return this.call(function() {
296
+ let self = this;
297
+ return webdriver.WebDriver.prototype.quit.call(this)
298
+ .thenFinally(function() {
299
+ return self.command_.then(function(command) {
300
+ command.kill();
301
+ return command.result();
302
+ });
303
+ })
304
+ .thenFinally(function() {
305
+ if (self.profilePath_) {
306
+ return io.rmDir(self.profilePath_);
307
+ }
303
308
  });
304
- })
305
- .thenFinally(function() {
306
- if (self.profilePath_) {
307
- return io.rmDir(self.profilePath_);
308
- }
309
- });
310
- }, this);
311
- };
309
+ }, this);
310
+ }
311
+ }
312
312
 
313
313
 
314
314
  // PUBLIC API