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/safari.js CHANGED
@@ -26,37 +26,47 @@
26
26
 
27
27
  'use strict';
28
28
 
29
- var events = require('events');
30
- var fs = require('fs');
31
- var http = require('http');
32
- var path = require('path');
33
- var url = require('url');
34
- var util = require('util');
35
- var ws = require('ws');
36
-
37
- var webdriver = require('./');
38
- var promise = webdriver.promise;
39
- var _base = require('./_base');
40
- var io = require('./io');
41
- var exec = require('./io/exec');
42
- var portprober = require('./net/portprober');
29
+ const events = require('events');
30
+ const fs = require('fs');
31
+ const http = require('http');
32
+ const path = require('path');
33
+ const url = require('url');
34
+ const util = require('util');
35
+ const ws = require('ws');
36
+
37
+ const io = require('./io');
38
+ const exec = require('./io/exec');
39
+ const isDevMode = require('./lib/devmode');
40
+ const Capabilities = require('./lib/capabilities').Capabilities;
41
+ const Capability = require('./lib/capabilities').Capability;
42
+ const command = require('./lib/command');
43
+ const promise = require('./lib/promise');
44
+ const Symbols = require('./lib/symbols');
45
+ const webdriver = require('./lib/webdriver');
46
+ const portprober = require('./net/portprober');
43
47
 
44
48
 
45
49
  /** @const */
46
- var CLIENT_PATH = _base.isDevMode()
50
+ const CLIENT_PATH = isDevMode
47
51
  ? path.join(__dirname,
48
52
  '../../../build/javascript/safari-driver/client.js')
49
53
  : path.join(__dirname, 'lib/safari/client.js');
50
54
 
51
55
 
52
56
  /** @const */
53
- var LIBRARY_DIR = process.platform === 'darwin'
54
- ? path.join('/Users', process.env['USER'], 'Library/Safari')
55
- : path.join(process.env['APPDATA'], 'Apple Computer', 'Safari');
57
+ const LIBRARY_DIR = (function() {
58
+ if (process.platform === 'darwin') {
59
+ return path.join('/Users', process.env['USER'], 'Library/Safari');
60
+ } else if (process.platform === 'win32') {
61
+ return path.join(process.env['APPDATA'], 'Apple Computer', 'Safari');
62
+ } else {
63
+ return '/dev/null';
64
+ }
65
+ })();
56
66
 
57
67
 
58
68
  /** @const */
59
- var SESSION_DATA_FILES = (function() {
69
+ const SESSION_DATA_FILES = (function() {
60
70
  if (process.platform === 'darwin') {
61
71
  var libraryDir = path.join('/Users', process.env['USER'], 'Library');
62
72
  return [
@@ -95,97 +105,95 @@ var Host;
95
105
  /**
96
106
  * A basic HTTP/WebSocket server used to communicate with the SafariDriver
97
107
  * browser extension.
98
- * @constructor
99
- * @extends {events.EventEmitter}
100
108
  */
101
- var Server = function() {
102
- events.EventEmitter.call(this);
103
-
104
- var server = http.createServer(function(req, res) {
105
- if (req.url === '/favicon.ico') {
106
- res.writeHead(204);
107
- res.end();
108
- return;
109
- }
110
-
111
- var query = url.parse(req.url).query || '';
112
- if (query.indexOf('url=') == -1) {
113
- var address = server.address()
114
- var host = address.address + ':' + address.port;
115
- res.writeHead(302, {'Location': 'http://' + host + '?url=ws://' + host});
116
- res.end();
117
- }
118
-
119
- fs.readFile(CLIENT_PATH, 'utf8', function(err, data) {
120
- if (err) {
121
- res.writeHead(500, {'Content-Type': 'text/plain'});
122
- res.end(err.stack);
109
+ class Server extends events.EventEmitter {
110
+ constructor() {
111
+ super();
112
+ var server = http.createServer(function(req, res) {
113
+ if (req.url === '/favicon.ico') {
114
+ res.writeHead(204);
115
+ res.end();
123
116
  return;
124
117
  }
125
- var content = '<!DOCTYPE html><body><script>' + data + '</script>';
126
- res.writeHead(200, {
127
- 'Content-Type': 'text/html; charset=utf-8',
128
- 'Content-Length': Buffer.byteLength(content, 'utf8'),
129
- });
130
- res.end(content);
131
- });
132
- });
133
-
134
- var wss = new ws.Server({server: server});
135
- wss.on('connection', this.emit.bind(this, 'connection'));
136
118
 
137
- /**
138
- * Starts the server on a random port.
139
- * @return {!webdriver.promise.Promise<Host>} A promise that will resolve
140
- * with the server host when it has fully started.
141
- */
142
- this.start = function() {
143
- if (server.address()) {
144
- return promise.fulfilled(server.address());
145
- }
146
- return portprober.findFreePort('localhost').then(function(port) {
147
- return promise.checkedNodeCall(
148
- server.listen.bind(server, port, 'localhost'));
149
- }).then(function() {
150
- return server.address();
151
- });
152
- };
119
+ var query = url.parse(/** @type {string} */(req.url)).query || '';
120
+ if (query.indexOf('url=') == -1) {
121
+ var address = server.address()
122
+ var host = address.address + ':' + address.port;
123
+ res.writeHead(
124
+ 302, {'Location': 'http://' + host + '?url=ws://' + host});
125
+ res.end();
126
+ }
153
127
 
154
- /**
155
- * Stops the server.
156
- * @return {!webdriver.promise.Promise} A promise that will resolve when the
157
- * server has closed all connections.
158
- */
159
- this.stop = function() {
160
- return new promise.Promise(function(fulfill) {
161
- server.close(fulfill);
128
+ fs.readFile(CLIENT_PATH, 'utf8', function(err, data) {
129
+ if (err) {
130
+ res.writeHead(500, {'Content-Type': 'text/plain'});
131
+ res.end(err.stack);
132
+ return;
133
+ }
134
+ var content = '<!DOCTYPE html><body><script>' + data + '</script>';
135
+ res.writeHead(200, {
136
+ 'Content-Type': 'text/html; charset=utf-8',
137
+ 'Content-Length': Buffer.byteLength(content, 'utf8'),
138
+ });
139
+ res.end(content);
140
+ });
162
141
  });
163
- };
164
142
 
165
- /**
166
- * @return {Host} This server's host info.
167
- * @throws {Error} If the server is not running.
168
- */
169
- this.address = function() {
170
- var addr = server.address();
171
- if (!addr) {
172
- throw Error('There server is not running!');
173
- }
174
- return addr;
175
- };
176
- };
177
- util.inherits(Server, events.EventEmitter);
143
+ var wss = new ws.Server({server: server});
144
+ wss.on('connection', this.emit.bind(this, 'connection'));
145
+
146
+ /**
147
+ * Starts the server on a random port.
148
+ * @return {!promise.Promise<Host>} A promise that will resolve
149
+ * with the server host when it has fully started.
150
+ */
151
+ this.start = function() {
152
+ if (server.address()) {
153
+ return promise.fulfilled(server.address());
154
+ }
155
+ return portprober.findFreePort('localhost').then(function(port) {
156
+ return promise.checkedNodeCall(
157
+ server.listen.bind(server, port, 'localhost'));
158
+ }).then(function() {
159
+ return server.address();
160
+ });
161
+ };
162
+
163
+ /**
164
+ * Stops the server.
165
+ * @return {!promise.Promise} A promise that will resolve when
166
+ * the server has closed all connections.
167
+ */
168
+ this.stop = function() {
169
+ return new promise.Promise(function(fulfill) {
170
+ server.close(fulfill);
171
+ });
172
+ };
173
+
174
+ /**
175
+ * @return {Host} This server's host info.
176
+ * @throws {Error} If the server is not running.
177
+ */
178
+ this.address = function() {
179
+ var addr = server.address();
180
+ if (!addr) {
181
+ throw Error('There server is not running!');
182
+ }
183
+ return addr;
184
+ };
185
+ }
186
+ }
178
187
 
179
188
 
180
189
  /**
181
- * @return {!promise.Promise<string>} A promise that will resolve with the path
190
+ * @return {!Promise<string>} A promise that will resolve with the path
182
191
  * to Safari on the current system.
183
192
  */
184
193
  function findSafariExecutable() {
185
194
  switch (process.platform) {
186
195
  case 'darwin':
187
- return promise.fulfilled(
188
- '/Applications/Safari.app/Contents/MacOS/Safari');
196
+ return Promise.resolve('/Applications/Safari.app/Contents/MacOS/Safari');
189
197
 
190
198
  case 'win32':
191
199
  var files = [
@@ -204,7 +212,7 @@ function findSafariExecutable() {
204
212
  });
205
213
 
206
214
  default:
207
- return promise.rejected(
215
+ return Promise.reject(
208
216
  Error('Safari is not supported on the current platform: ' +
209
217
  process.platform));
210
218
  }
@@ -212,16 +220,15 @@ function findSafariExecutable() {
212
220
 
213
221
 
214
222
  /**
215
- * @param {string} url The URL to connect to.
216
- * @return {!promise.Promise<string>} A promise for the path to a file that
217
- * Safari can open on start-up to trigger a new connection to the WebSocket
218
- * server.
223
+ * @param {string} serverUrl The URL to connect to.
224
+ * @return {!Promise<string>} A promise for the path to a file that Safari can
225
+ * open on start-up to trigger a new connection to the WebSocket server.
219
226
  */
220
- function createConnectFile(url) {
227
+ function createConnectFile(serverUrl) {
221
228
  return io.tmpFile({postfix: '.html'}).then(function(f) {
222
229
  var writeFile = promise.checkedNodeCall(fs.writeFile,
223
230
  f,
224
- '<!DOCTYPE html><script>window.location = "' + url + '";</script>',
231
+ '<!DOCTYPE html><script>window.location = "' + serverUrl + '";</script>',
225
232
  {encoding: 'utf8'});
226
233
  return writeFile.then(function() {
227
234
  return f;
@@ -252,53 +259,69 @@ function cleanSession(desiredCapabilities) {
252
259
  }
253
260
 
254
261
 
262
+ /** @return {string} . */
263
+ function getRandomString() {
264
+ let seed = Date.now();
265
+ return Math.floor(Math.random() * seed).toString(36)
266
+ + Math.abs(Math.floor(Math.random() * seed) ^ Date.now()).toString(36);
267
+ }
268
+
269
+
255
270
  /**
256
- * @constructor
257
- * @implements {webdriver.CommandExecutor}
271
+ * @implements {command.Executor}
258
272
  */
259
- var CommandExecutor = function() {
260
- /** @private {Server} */
261
- this.server_ = null;
262
-
263
- /** @private {ws.WebSocket} */
264
- this.socket_ = null;
265
-
266
- /** @private {promise.Promise.<!exec.Command>} */
267
- this.safari_ = null;
268
- };
269
-
270
-
271
- /** @override */
272
- CommandExecutor.prototype.execute = function(command, callback) {
273
- var safariCommand = JSON.stringify({
274
- 'origin': 'webdriver',
275
- 'type': 'command',
276
- 'command': {
277
- 'id': _base.require('goog.string').getRandomString(),
278
- 'name': command.getName(),
279
- 'parameters': command.getParameters()
280
- }
281
- });
282
- var self = this;
273
+ class CommandExecutor {
274
+ constructor() {
275
+ this.server_ = null;
283
276
 
284
- switch (command.getName()) {
285
- case webdriver.CommandName.NEW_SESSION:
286
- this.startSafari_(command).then(sendCommand, callback);
287
- break;
277
+ /** @private {ws.WebSocket} */
278
+ this.socket_ = null;
288
279
 
289
- case webdriver.CommandName.QUIT:
290
- this.destroySession_().then(function() {
291
- callback(null, _base.require('bot.response').createResponse(null));
292
- }, callback);
293
- break;
280
+ /** @private {promise.Promise.<!exec.Command>} */
281
+ this.safari_ = null;
282
+ }
294
283
 
295
- default:
296
- sendCommand();
297
- break;
284
+ /** @override */
285
+ execute(cmd) {
286
+ var self = this;
287
+ return new promise.Promise(function(fulfill, reject) {
288
+ var safariCommand = JSON.stringify({
289
+ 'origin': 'webdriver',
290
+ 'type': 'command',
291
+ 'command': {
292
+ 'id': getRandomString(),
293
+ 'name': cmd.getName(),
294
+ 'parameters': cmd.getParameters()
295
+ }
296
+ });
297
+
298
+ switch (cmd.getName()) {
299
+ case command.Name.NEW_SESSION:
300
+ self.startSafari_(cmd)
301
+ .then(() => self.sendCommand_(safariCommand))
302
+ .then(fulfill, reject);
303
+ break;
304
+
305
+ case command.Name.QUIT:
306
+ self.destroySession_()
307
+ .then(() => fulfill({status: 0, value: null}), reject);
308
+ break;
309
+
310
+ default:
311
+ self.sendCommand_(safariCommand).then(fulfill, reject);
312
+ break;
313
+ }
314
+ });
298
315
  }
299
316
 
300
- function sendCommand() {
301
- new promise.Promise(function(fulfill, reject) {
317
+ /**
318
+ * @param {string} data .
319
+ * @return {!promise.Promise} .
320
+ * @private
321
+ */
322
+ sendCommand_(data) {
323
+ let self = this;
324
+ return new promise.Promise(function(fulfill, reject) {
302
325
  // TODO: support reconnecting with the extension.
303
326
  if (!self.socket_) {
304
327
  self.destroySession_().thenFinally(function() {
@@ -307,7 +330,7 @@ CommandExecutor.prototype.execute = function(command, callback) {
307
330
  return;
308
331
  }
309
332
 
310
- self.socket_.send(safariCommand, function(err) {
333
+ self.socket_.send(data, function(err) {
311
334
  if (err) {
312
335
  reject(err);
313
336
  return;
@@ -323,212 +346,198 @@ CommandExecutor.prototype.execute = function(command, callback) {
323
346
  }
324
347
  fulfill(data['response']);
325
348
  });
326
-
327
- }).then(function(value) {
328
- callback(null, value);
329
- }, callback);
349
+ });
330
350
  }
331
- };
332
351
 
352
+ /**
353
+ * @param {!command.Command} command .
354
+ * @private
355
+ */
356
+ startSafari_(command) {
357
+ this.server_ = new Server();
358
+
359
+ this.safari_ = this.server_.start().then(function(address) {
360
+ var tasks = cleanSession(
361
+ /** @type {!Object} */(
362
+ command.getParameters()['desiredCapabilities']));
363
+ tasks.push(
364
+ findSafariExecutable(),
365
+ createConnectFile(
366
+ 'http://' + address.address + ':' + address.port));
367
+ return promise.all(tasks).then(function(tasks) {
368
+ var exe = tasks[tasks.length - 2];
369
+ var html = tasks[tasks.length - 1];
370
+ return exec(exe, {args: [html]});
371
+ });
372
+ });
333
373
 
334
- /**
335
- * @param {!webdriver.Command} command .
336
- * @private
337
- */
338
- CommandExecutor.prototype.startSafari_ = function(command) {
339
- this.server_ = new Server();
340
-
341
- this.safari_ = this.server_.start().then(function(address) {
342
- var tasks = cleanSession(command.getParameters()['desiredCapabilities']);
343
- tasks.push(
344
- findSafariExecutable(),
345
- createConnectFile(
346
- 'http://' + address.address + ':' + address.port));
347
- return promise.all(tasks).then(function(tasks) {
348
- var exe = tasks[tasks.length - 2];
349
- var html = tasks[tasks.length - 1];
350
- return exec(exe, {args: [html]});
374
+ var connected = promise.defer();
375
+ var self = this;
376
+ var start = Date.now();
377
+ var timer = setTimeout(function() {
378
+ connected.reject(Error(
379
+ 'Failed to connect to the SafariDriver after ' + (Date.now() - start) +
380
+ ' ms; Have you installed the latest extension from ' +
381
+ 'http://selenium-release.storage.googleapis.com/index.html?'));
382
+ }, 10 * 1000);
383
+ this.server_.once('connection', function(socket) {
384
+ clearTimeout(timer);
385
+ self.socket_ = socket;
386
+ socket.once('close', function() {
387
+ self.socket_ = null;
388
+ });
389
+ connected.fulfill();
351
390
  });
352
- });
391
+ return connected.promise;
392
+ }
353
393
 
354
- var connected = promise.defer();
355
- var self = this;
356
- var start = Date.now();
357
- var timer = setTimeout(function() {
358
- connected.reject(Error(
359
- 'Failed to connect to the SafariDriver after ' + (Date.now() - start) +
360
- ' ms; Have you installed the latest extension from ' +
361
- 'http://selenium-release.storage.googleapis.com/index.html?'));
362
- }, 10 * 1000);
363
- this.server_.once('connection', function(socket) {
364
- clearTimeout(timer);
365
- self.socket_ = socket;
366
- socket.once('close', function() {
394
+ /**
395
+ * Destroys the active session by stopping the WebSocket server and killing the
396
+ * Safari subprocess.
397
+ * @private
398
+ */
399
+ destroySession_() {
400
+ var tasks = [];
401
+ if (this.server_) {
402
+ tasks.push(this.server_.stop());
403
+ }
404
+ if (this.safari_) {
405
+ tasks.push(this.safari_.then(function(safari) {
406
+ safari.kill();
407
+ return safari.result();
408
+ }));
409
+ }
410
+ var self = this;
411
+ return promise.all(tasks).thenFinally(function() {
412
+ self.server_ = null;
367
413
  self.socket_ = null;
414
+ self.safari_ = null;
368
415
  });
369
- connected.fulfill();
370
- });
371
- return connected.promise;
372
- };
373
-
374
-
375
- /**
376
- * Destroys the active session by stopping the WebSocket server and killing the
377
- * Safari subprocess.
378
- * @private
379
- */
380
- CommandExecutor.prototype.destroySession_ = function() {
381
- var tasks = [];
382
- if (this.server_) {
383
- tasks.push(this.server_.stop());
384
- }
385
- if (this.safari_) {
386
- tasks.push(this.safari_.then(function(safari) {
387
- safari.kill();
388
- return safari.result();
389
- }));
390
416
  }
391
- var self = this;
392
- return promise.all(tasks).thenFinally(function() {
393
- self.server_ = null;
394
- self.socket_ = null;
395
- self.safari_ = null;
396
- });
397
- };
417
+ }
418
+
398
419
 
399
420
 
400
421
  /** @const */
401
- var OPTIONS_CAPABILITY_KEY = 'safari.options';
422
+ const OPTIONS_CAPABILITY_KEY = 'safari.options';
402
423
 
403
424
 
404
425
 
405
426
  /**
406
427
  * Configuration options specific to the {@link Driver SafariDriver}.
407
- * @constructor
408
- * @extends {webdriver.Serializable}
409
428
  */
410
- var Options = function() {
411
- webdriver.Serializable.call(this);
429
+ class Options {
430
+ constructor() {
431
+ /** @private {Object<string, *>} */
432
+ this.options_ = null;
412
433
 
413
- /** @private {Object<string, *>} */
414
- this.options_ = null;
434
+ /** @private {./lib/logging.Preferences} */
435
+ this.logPrefs_ = null;
436
+ }
415
437
 
416
- /** @private {webdriver.logging.Preferences} */
417
- this.logPrefs_ = null;
418
- };
419
- util.inherits(Options, webdriver.Serializable);
438
+ /**
439
+ * Extracts the SafariDriver specific options from the given capabilities
440
+ * object.
441
+ * @param {!Capabilities} capabilities The capabilities object.
442
+ * @return {!Options} The ChromeDriver options.
443
+ */
444
+ static fromCapabilities(capabilities) {
445
+ var options = new Options();
446
+
447
+ var o = capabilities.get(OPTIONS_CAPABILITY_KEY);
448
+ if (o instanceof Options) {
449
+ options = o;
450
+ } else if (o) {
451
+ options.setCleanSession(o.cleanSession);
452
+ }
420
453
 
454
+ if (capabilities.has(Capability.LOGGING_PREFS)) {
455
+ options.setLoggingPrefs(capabilities.get(Capability.LOGGING_PREFS));
456
+ }
421
457
 
422
- /**
423
- * Extracts the SafariDriver specific options from the given capabilities
424
- * object.
425
- * @param {!webdriver.Capabilities} capabilities The capabilities object.
426
- * @return {!Options} The ChromeDriver options.
427
- */
428
- Options.fromCapabilities = function(capabilities) {
429
- var options = new Options();
430
-
431
- var o = capabilities.get(OPTIONS_CAPABILITY_KEY);
432
- if (o instanceof Options) {
433
- options = o;
434
- } else if (o) {
435
- options.setCleanSession(o.cleanSession);
458
+ return options;
436
459
  }
437
460
 
438
- if (capabilities.has(webdriver.Capability.LOGGING_PREFS)) {
439
- options.setLoggingPrefs(
440
- capabilities.get(webdriver.Capability.LOGGING_PREFS));
461
+ /**
462
+ * Sets whether to force Safari to start with a clean session. Enabling this
463
+ * option will cause all global browser data to be deleted.
464
+ * @param {boolean} clean Whether to make sure the session has no cookies,
465
+ * cache entries, local storage, or databases.
466
+ * @return {!Options} A self reference.
467
+ */
468
+ setCleanSession(clean) {
469
+ if (!this.options_) {
470
+ this.options_ = {};
471
+ }
472
+ this.options_['cleanSession'] = clean;
473
+ return this;
441
474
  }
442
475
 
443
- return options;
444
- };
445
-
446
-
447
- /**
448
- * Sets whether to force Safari to start with a clean session. Enabling this
449
- * option will cause all global browser data to be deleted.
450
- * @param {boolean} clean Whether to make sure the session has no cookies,
451
- * cache entries, local storage, or databases.
452
- * @return {!Options} A self reference.
453
- */
454
- Options.prototype.setCleanSession = function(clean) {
455
- if (!this.options_) {
456
- this.options_ = {};
476
+ /**
477
+ * Sets the logging preferences for the new session.
478
+ * @param {!./lib/logging.Preferences} prefs The logging preferences.
479
+ * @return {!Options} A self reference.
480
+ */
481
+ setLoggingPrefs(prefs) {
482
+ this.logPrefs_ = prefs;
483
+ return this;
457
484
  }
458
- this.options_['cleanSession'] = clean;
459
- return this;
460
- };
461
-
462
-
463
- /**
464
- * Sets the logging preferences for the new session.
465
- * @param {!webdriver.logging.Preferences} prefs The logging preferences.
466
- * @return {!Options} A self reference.
467
- */
468
- Options.prototype.setLoggingPrefs = function(prefs) {
469
- this.logPrefs_ = prefs;
470
- return this;
471
- };
472
-
473
485
 
474
- /**
475
- * Converts this options instance to a {@link webdriver.Capabilities} object.
476
- * @param {webdriver.Capabilities=} opt_capabilities The capabilities to merge
477
- * these options into, if any.
478
- * @return {!webdriver.Capabilities} The capabilities.
479
- */
480
- Options.prototype.toCapabilities = function(opt_capabilities) {
481
- var capabilities = opt_capabilities || webdriver.Capabilities.safari();
482
- if (this.logPrefs_) {
483
- capabilities.set(webdriver.Capability.LOGGING_PREFS, this.logPrefs_);
484
- }
485
- if (this.options_) {
486
- capabilities.set(OPTIONS_CAPABILITY_KEY, this);
486
+ /**
487
+ * Converts this options instance to a {@link Capabilities} object.
488
+ * @param {Capabilities=} opt_capabilities The capabilities to
489
+ * merge these options into, if any.
490
+ * @return {!Capabilities} The capabilities.
491
+ */
492
+ toCapabilities(opt_capabilities) {
493
+ var caps = opt_capabilities || Capabilities.safari();
494
+ if (this.logPrefs_) {
495
+ caps.set(Capability.LOGGING_PREFS, this.logPrefs_);
496
+ }
497
+ if (this.options_) {
498
+ caps.set(OPTIONS_CAPABILITY_KEY, this);
499
+ }
500
+ return caps;
487
501
  }
488
- return capabilities;
489
- };
490
-
491
-
492
- /**
493
- * Converts this instance to its JSON wire protocol representation. Note this
494
- * function is an implementation detail not intended for general use.
495
- * @return {!Object<string, *>} The JSON wire protocol representation of this
496
- * instance.
497
- * @override
498
- */
499
- Options.prototype.serialize = function() {
500
- return this.options_ || {};
501
- };
502
502
 
503
+ /**
504
+ * Converts this instance to its JSON wire protocol representation. Note this
505
+ * function is an implementation detail not intended for general use.
506
+ * @return {!Object<string, *>} The JSON wire protocol representation of this
507
+ * instance.
508
+ */
509
+ [Symbols.serialize]() {
510
+ return this.options_ || {};
511
+ }
512
+ }
503
513
 
504
514
 
505
515
  /**
506
516
  * A WebDriver client for Safari. This class should never be instantiated
507
- * directly; instead, use the {@link selenium-webdriver.Builder}:
517
+ * directly; instead, use the {@linkplain ./builder.Builder Builder}:
508
518
  *
509
519
  * var driver = new Builder()
510
520
  * .forBrowser('safari')
511
521
  * .build();
512
522
  *
513
- * @param {(Options|webdriver.Capabilities)=} opt_config The configuration
514
- * options for the new session.
515
- * @param {webdriver.promise.ControlFlow=} opt_flow The control flow to create
516
- * the driver under.
517
- * @constructor
518
- * @extends {webdriver.WebDriver}
519
523
  */
520
- var Driver = function(opt_config, opt_flow) {
521
- var executor = new CommandExecutor();
522
- var capabilities =
523
- opt_config instanceof Options ? opt_config.toCapabilities() :
524
- (opt_config || webdriver.Capabilities.safari());
525
-
526
- var driver = webdriver.WebDriver.createSession(
527
- executor, capabilities, opt_flow);
528
- webdriver.WebDriver.call(
529
- this, driver.getSession(), executor, driver.controlFlow());
530
- };
531
- util.inherits(Driver, webdriver.WebDriver);
524
+ class Driver extends webdriver.WebDriver {
525
+ /**
526
+ * @param {(Options|Capabilities)=} opt_config The configuration
527
+ * options for the new session.
528
+ * @param {promise.ControlFlow=} opt_flow The control flow to create
529
+ * the driver under.
530
+ */
531
+ constructor(opt_config, opt_flow) {
532
+ var executor = new CommandExecutor();
533
+ var caps =
534
+ opt_config instanceof Options ? opt_config.toCapabilities() :
535
+ (opt_config || Capabilities.safari());
536
+
537
+ var driver = webdriver.WebDriver.createSession(executor, caps, opt_flow);
538
+ super(driver.getSession(), executor, driver.controlFlow());
539
+ }
540
+ }
532
541
 
533
542
 
534
543
  // Public API