selenium-webdriver 2.48.2 → 2.53.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (534) hide show
  1. package/CHANGES.md +116 -0
  2. package/NOTICE +1 -1
  3. package/README.md +59 -9
  4. package/builder.js +375 -358
  5. package/chrome.js +549 -586
  6. package/edge.js +378 -0
  7. package/error.js +9 -6
  8. package/example/google_search.js +1 -1
  9. package/example/google_search_generator.js +2 -4
  10. package/example/logging.js +6 -2
  11. package/example/sample.js +21 -0
  12. package/executors.js +11 -27
  13. package/firefox/binary.js +149 -98
  14. package/firefox/extension.js +15 -19
  15. package/firefox/index.js +256 -163
  16. package/firefox/profile.js +223 -243
  17. package/http/index.js +487 -81
  18. package/http/util.js +40 -36
  19. package/ie.js +288 -309
  20. package/index.js +34 -125
  21. package/io/exec.js +58 -39
  22. package/io/index.js +72 -60
  23. package/lib/README +4 -0
  24. package/lib/actions.js +596 -0
  25. package/lib/by.js +277 -0
  26. package/lib/capabilities.js +450 -0
  27. package/lib/{webdriver/command.js → command.js} +91 -72
  28. package/lib/{webdriver/button.js → devmode.js} +13 -8
  29. package/lib/error.js +690 -0
  30. package/lib/events.js +212 -0
  31. package/lib/firefox/amd64/libnoblur64.so +0 -0
  32. package/lib/firefox/i386/libnoblur.so +0 -0
  33. package/lib/firefox/webdriver.json +5 -1
  34. package/lib/firefox/webdriver.xpi +0 -0
  35. package/lib/{webdriver/key.js → input.js} +84 -2
  36. package/lib/logging.js +670 -0
  37. package/lib/{webdriver/promise.js → promise.js} +817 -644
  38. package/lib/safari/client.js +266 -214
  39. package/lib/session.js +80 -0
  40. package/lib/{webdriver/serializable.js → symbols.js} +16 -19
  41. package/lib/test/build.js +4 -4
  42. package/lib/test/data/click_tests/html5_submit_buttons.html +2 -1
  43. package/lib/test/data/click_tests/overlapping_elements.html +15 -4
  44. package/lib/test/data/click_tests/partially_overlapping_elements.html +124 -0
  45. package/lib/test/data/click_tests/wrapped_overlapping_elements.html +13 -0
  46. package/lib/test/data/hidden_partially.html +45 -0
  47. package/lib/test/data/readOnlyPage.html +1 -1
  48. package/lib/test/data/selectPage.html +18 -2
  49. package/lib/test/fileserver.js +3 -4
  50. package/lib/test/index.js +7 -3
  51. package/lib/test/resources.js +1 -1
  52. package/lib/until.js +376 -0
  53. package/lib/webdriver.js +2440 -0
  54. package/net/index.js +4 -0
  55. package/net/portprober.js +16 -12
  56. package/opera.js +295 -314
  57. package/package.json +6 -5
  58. package/phantomjs.js +144 -147
  59. package/proxy.js +10 -6
  60. package/remote/index.js +289 -238
  61. package/safari.js +326 -311
  62. package/test/chrome/options_test.js +11 -9
  63. package/test/element_finding_test.js +51 -13
  64. package/test/execute_script_test.js +17 -3
  65. package/test/firefox/firefox_test.js +0 -32
  66. package/test/http/http_test.js +671 -61
  67. package/test/http/util_test.js +25 -23
  68. package/test/io_test.js +67 -1
  69. package/test/lib/by_test.js +139 -0
  70. package/test/lib/capabilities_test.js +111 -0
  71. package/test/lib/error_test.js +325 -0
  72. package/test/lib/events_test.js +177 -0
  73. package/test/lib/logging_test.js +272 -0
  74. package/test/{promise_aplus_test.js → lib/promise_aplus_test.js} +4 -13
  75. package/test/lib/promise_error_test.js +808 -0
  76. package/test/lib/promise_flow_test.js +2282 -0
  77. package/test/lib/promise_generator_test.js +308 -0
  78. package/test/lib/promise_test.js +996 -0
  79. package/test/lib/testutil.js +90 -0
  80. package/test/lib/until_test.js +400 -0
  81. package/test/lib/webdriver_test.js +2157 -0
  82. package/test/page_loading_test.js +7 -9
  83. package/test/remote_test.js +50 -3
  84. package/test/session_test.js +53 -0
  85. package/test/stale_element_test.js +2 -2
  86. package/test/testing/assert_test.js +374 -0
  87. package/test/testing/index_test.js +9 -11
  88. package/testing/assert.js +334 -17
  89. package/testing/index.js +12 -2
  90. package/_base.js +0 -200
  91. package/docs/Changes.html +0 -356
  92. package/docs/class_bot_Error.html +0 -15
  93. package/docs/class_webdriver_ActionSequence.html +0 -115
  94. package/docs/class_webdriver_Alert.html +0 -24
  95. package/docs/class_webdriver_AlertPromise.html +0 -92
  96. package/docs/class_webdriver_Capabilities.html +0 -60
  97. package/docs/class_webdriver_Command.html +0 -15
  98. package/docs/class_webdriver_EventEmitter.html +0 -35
  99. package/docs/class_webdriver_FileDetector.html +0 -21
  100. package/docs/class_webdriver_Locator.html +0 -12
  101. package/docs/class_webdriver_Serializable.html +0 -9
  102. package/docs/class_webdriver_Session.html +0 -13
  103. package/docs/class_webdriver_TouchSequence.html +0 -49
  104. package/docs/class_webdriver_UnhandledAlertError.html +0 -18
  105. package/docs/class_webdriver_WebDriver.html +0 -313
  106. package/docs/class_webdriver_WebDriver_Logs.html +0 -15
  107. package/docs/class_webdriver_WebDriver_Navigation.html +0 -16
  108. package/docs/class_webdriver_WebDriver_Options.html +0 -41
  109. package/docs/class_webdriver_WebDriver_TargetLocator.html +0 -38
  110. package/docs/class_webdriver_WebDriver_Timeouts.html +0 -29
  111. package/docs/class_webdriver_WebDriver_Window.html +0 -27
  112. package/docs/class_webdriver_WebElement.html +0 -223
  113. package/docs/class_webdriver_WebElementPromise.html +0 -274
  114. package/docs/class_webdriver_http_Executor.html +0 -22
  115. package/docs/class_webdriver_http_Request.html +0 -12
  116. package/docs/class_webdriver_http_Response.html +0 -13
  117. package/docs/class_webdriver_logging_Entry.html +0 -15
  118. package/docs/class_webdriver_logging_Level.html +0 -55
  119. package/docs/class_webdriver_logging_LogRecord.html +0 -45
  120. package/docs/class_webdriver_logging_Logger.html +0 -119
  121. package/docs/class_webdriver_logging_Preferences.html +0 -8
  122. package/docs/class_webdriver_promise_CancellationError.html +0 -17
  123. package/docs/class_webdriver_promise_ControlFlow.html +0 -153
  124. package/docs/class_webdriver_promise_Deferred.html +0 -84
  125. package/docs/class_webdriver_promise_MultipleUnhandledRejectionError.html +0 -14
  126. package/docs/class_webdriver_promise_Promise.html +0 -75
  127. package/docs/class_webdriver_stacktrace_Frame.html +0 -20
  128. package/docs/class_webdriver_stacktrace_Snapshot.html +0 -6
  129. package/docs/class_webdriver_testing_Assertion.html +0 -99
  130. package/docs/class_webdriver_testing_Assertion_DelegatingMatcher_.html +0 -13
  131. package/docs/class_webdriver_testing_ContainsMatcher.html +0 -11
  132. package/docs/class_webdriver_testing_NegatedAssertion.html +0 -97
  133. package/docs/class_webdriver_until_Condition.html +0 -7
  134. package/docs/dossier.css +0 -1
  135. package/docs/dossier.js +0 -86
  136. package/docs/enum_bot_ErrorCode.html +0 -3
  137. package/docs/enum_bot_Error_State.html +0 -2
  138. package/docs/enum_webdriver_Browser.html +0 -2
  139. package/docs/enum_webdriver_Button.html +0 -2
  140. package/docs/enum_webdriver_Capability.html +0 -33
  141. package/docs/enum_webdriver_CommandName.html +0 -3
  142. package/docs/enum_webdriver_Key.html +0 -12
  143. package/docs/enum_webdriver_logging_Type.html +0 -6
  144. package/docs/enum_webdriver_promise_ControlFlow_EventType.html +0 -9
  145. package/docs/index.html +0 -125
  146. package/docs/interface_webdriver_CommandExecutor.html +0 -9
  147. package/docs/interface_webdriver_http_Client.html +0 -10
  148. package/docs/interface_webdriver_promise_Thenable.html +0 -77
  149. package/docs/module_selenium-webdriver.html +0 -23
  150. package/docs/module_selenium-webdriver__base.html +0 -23
  151. package/docs/module_selenium-webdriver__base_class_Context.html +0 -5
  152. package/docs/module_selenium-webdriver_builder.html +0 -2
  153. package/docs/module_selenium-webdriver_builder_class_Builder.html +0 -138
  154. package/docs/module_selenium-webdriver_chrome.html +0 -90
  155. package/docs/module_selenium-webdriver_chrome_class_Driver.html +0 -280
  156. package/docs/module_selenium-webdriver_chrome_class_Options.html +0 -127
  157. package/docs/module_selenium-webdriver_chrome_class_ServiceBuilder.html +0 -46
  158. package/docs/module_selenium-webdriver_class_ActionSequence.html +0 -115
  159. package/docs/module_selenium-webdriver_class_Builder.html +0 -138
  160. package/docs/module_selenium-webdriver_class_Capabilities.html +0 -60
  161. package/docs/module_selenium-webdriver_class_Command.html +0 -15
  162. package/docs/module_selenium-webdriver_class_EventEmitter.html +0 -35
  163. package/docs/module_selenium-webdriver_class_FileDetector.html +0 -21
  164. package/docs/module_selenium-webdriver_class_Serializable.html +0 -9
  165. package/docs/module_selenium-webdriver_class_Session.html +0 -13
  166. package/docs/module_selenium-webdriver_class_WebDriver.html +0 -313
  167. package/docs/module_selenium-webdriver_class_WebElement.html +0 -223
  168. package/docs/module_selenium-webdriver_class_WebElementPromise.html +0 -274
  169. package/docs/module_selenium-webdriver_enum_Browser.html +0 -2
  170. package/docs/module_selenium-webdriver_enum_Button.html +0 -2
  171. package/docs/module_selenium-webdriver_enum_Capability.html +0 -33
  172. package/docs/module_selenium-webdriver_enum_CommandName.html +0 -3
  173. package/docs/module_selenium-webdriver_enum_Key.html +0 -12
  174. package/docs/module_selenium-webdriver_error.html +0 -4
  175. package/docs/module_selenium-webdriver_error_class_Error.html +0 -15
  176. package/docs/module_selenium-webdriver_error_enum_ErrorCode.html +0 -3
  177. package/docs/module_selenium-webdriver_executors.html +0 -10
  178. package/docs/module_selenium-webdriver_executors_class_DeferredExecutor.html +0 -12
  179. package/docs/module_selenium-webdriver_firefox.html +0 -68
  180. package/docs/module_selenium-webdriver_firefox_binary.html +0 -5
  181. package/docs/module_selenium-webdriver_firefox_binary_class_Binary.html +0 -20
  182. package/docs/module_selenium-webdriver_firefox_class_Binary.html +0 -20
  183. package/docs/module_selenium-webdriver_firefox_class_Driver.html +0 -276
  184. package/docs/module_selenium-webdriver_firefox_class_Options.html +0 -19
  185. package/docs/module_selenium-webdriver_firefox_class_Profile.html +0 -50
  186. package/docs/module_selenium-webdriver_firefox_extension.html +0 -8
  187. package/docs/module_selenium-webdriver_firefox_profile.html +0 -13
  188. package/docs/module_selenium-webdriver_firefox_profile_class_Profile.html +0 -50
  189. package/docs/module_selenium-webdriver_http.html +0 -9
  190. package/docs/module_selenium-webdriver_http_class_Executor.html +0 -22
  191. package/docs/module_selenium-webdriver_http_class_HttpClient.html +0 -16
  192. package/docs/module_selenium-webdriver_http_class_Request.html +0 -12
  193. package/docs/module_selenium-webdriver_http_class_Response.html +0 -13
  194. package/docs/module_selenium-webdriver_http_util.html +0 -17
  195. package/docs/module_selenium-webdriver_ie.html +0 -11
  196. package/docs/module_selenium-webdriver_ie_class_Driver.html +0 -274
  197. package/docs/module_selenium-webdriver_ie_class_Options.html +0 -89
  198. package/docs/module_selenium-webdriver_ie_enum_Level.html +0 -1
  199. package/docs/module_selenium-webdriver_io.html +0 -37
  200. package/docs/module_selenium-webdriver_io_exec.html +0 -6
  201. package/docs/module_selenium-webdriver_namespace_By.html +0 -56
  202. package/docs/module_selenium-webdriver_namespace_error.html +0 -4
  203. package/docs/module_selenium-webdriver_namespace_logging.html +0 -18
  204. package/docs/module_selenium-webdriver_namespace_promise.html +0 -163
  205. package/docs/module_selenium-webdriver_namespace_stacktrace.html +0 -17
  206. package/docs/module_selenium-webdriver_namespace_until.html +0 -82
  207. package/docs/module_selenium-webdriver_net.html +0 -7
  208. package/docs/module_selenium-webdriver_net_portprober.html +0 -12
  209. package/docs/module_selenium-webdriver_opera.html +0 -62
  210. package/docs/module_selenium-webdriver_opera_class_Driver.html +0 -276
  211. package/docs/module_selenium-webdriver_opera_class_Options.html +0 -44
  212. package/docs/module_selenium-webdriver_opera_class_ServiceBuilder.html +0 -35
  213. package/docs/module_selenium-webdriver_phantomjs.html +0 -2
  214. package/docs/module_selenium-webdriver_phantomjs_class_Driver.html +0 -299
  215. package/docs/module_selenium-webdriver_proxy.html +0 -28
  216. package/docs/module_selenium-webdriver_remote.html +0 -8
  217. package/docs/module_selenium-webdriver_remote_class_DriverService.html +0 -32
  218. package/docs/module_selenium-webdriver_remote_class_FileDetector.html +0 -22
  219. package/docs/module_selenium-webdriver_remote_class_SeleniumServer.html +0 -41
  220. package/docs/module_selenium-webdriver_safari.html +0 -9
  221. package/docs/module_selenium-webdriver_safari_class_Driver.html +0 -279
  222. package/docs/module_selenium-webdriver_safari_class_Options.html +0 -23
  223. package/docs/module_selenium-webdriver_testing.html +0 -74
  224. package/docs/module_selenium-webdriver_testing_assert.html +0 -9
  225. package/docs/namespace_bot.html +0 -4
  226. package/docs/namespace_bot_json.html +0 -20
  227. package/docs/namespace_bot_response.html +0 -18
  228. package/docs/namespace_bot_userAgent.html +0 -33
  229. package/docs/namespace_webdriver.html +0 -30
  230. package/docs/namespace_webdriver_By.html +0 -56
  231. package/docs/namespace_webdriver_http.html +0 -6
  232. package/docs/namespace_webdriver_logging.html +0 -70
  233. package/docs/namespace_webdriver_promise.html +0 -688
  234. package/docs/namespace_webdriver_stacktrace.html +0 -17
  235. package/docs/namespace_webdriver_testing.html +0 -7
  236. package/docs/namespace_webdriver_testing_assert.html +0 -9
  237. package/docs/namespace_webdriver_testing_asserts.html +0 -18
  238. package/docs/namespace_webdriver_until.html +0 -82
  239. package/docs/source/_base.js.src.html +0 -1
  240. package/docs/source/builder.js.src.html +0 -1
  241. package/docs/source/chrome.js.src.html +0 -1
  242. package/docs/source/error.js.src.html +0 -1
  243. package/docs/source/executors.js.src.html +0 -1
  244. package/docs/source/firefox/binary.js.src.html +0 -1
  245. package/docs/source/firefox/extension.js.src.html +0 -1
  246. package/docs/source/firefox/index.js.src.html +0 -1
  247. package/docs/source/firefox/profile.js.src.html +0 -1
  248. package/docs/source/http/index.js.src.html +0 -1
  249. package/docs/source/http/util.js.src.html +0 -1
  250. package/docs/source/ie.js.src.html +0 -1
  251. package/docs/source/index.js.src.html +0 -1
  252. package/docs/source/io/exec.js.src.html +0 -1
  253. package/docs/source/io/index.js.src.html +0 -1
  254. package/docs/source/lib/atoms/error.js.src.html +0 -1
  255. package/docs/source/lib/atoms/json.js.src.html +0 -1
  256. package/docs/source/lib/atoms/response.js.src.html +0 -1
  257. package/docs/source/lib/atoms/userAgent.js.src.html +0 -1
  258. package/docs/source/lib/goog/array/array.js.src.html +0 -1
  259. package/docs/source/lib/goog/asserts/asserts.js.src.html +0 -1
  260. package/docs/source/lib/goog/async/freelist.js.src.html +0 -1
  261. package/docs/source/lib/goog/async/nexttick.js.src.html +0 -1
  262. package/docs/source/lib/goog/async/run.js.src.html +0 -1
  263. package/docs/source/lib/goog/async/workqueue.js.src.html +0 -1
  264. package/docs/source/lib/goog/base.js.src.html +0 -1
  265. package/docs/source/lib/goog/debug/debug.js.src.html +0 -1
  266. package/docs/source/lib/goog/debug/entrypointregistry.js.src.html +0 -1
  267. package/docs/source/lib/goog/debug/error.js.src.html +0 -1
  268. package/docs/source/lib/goog/debug/logbuffer.js.src.html +0 -1
  269. package/docs/source/lib/goog/debug/logger.js.src.html +0 -1
  270. package/docs/source/lib/goog/debug/logrecord.js.src.html +0 -1
  271. package/docs/source/lib/goog/deps.js.src.html +0 -1
  272. package/docs/source/lib/goog/disposable/disposable.js.src.html +0 -1
  273. package/docs/source/lib/goog/disposable/idisposable.js.src.html +0 -1
  274. package/docs/source/lib/goog/dom/browserfeature.js.src.html +0 -1
  275. package/docs/source/lib/goog/dom/dom.js.src.html +0 -1
  276. package/docs/source/lib/goog/dom/nodetype.js.src.html +0 -1
  277. package/docs/source/lib/goog/dom/safe.js.src.html +0 -1
  278. package/docs/source/lib/goog/dom/tagname.js.src.html +0 -1
  279. package/docs/source/lib/goog/dom/tags.js.src.html +0 -1
  280. package/docs/source/lib/goog/dom/vendor.js.src.html +0 -1
  281. package/docs/source/lib/goog/events/browserevent.js.src.html +0 -1
  282. package/docs/source/lib/goog/events/browserfeature.js.src.html +0 -1
  283. package/docs/source/lib/goog/events/event.js.src.html +0 -1
  284. package/docs/source/lib/goog/events/eventid.js.src.html +0 -1
  285. package/docs/source/lib/goog/events/events.js.src.html +0 -1
  286. package/docs/source/lib/goog/events/eventtarget.js.src.html +0 -1
  287. package/docs/source/lib/goog/events/eventtype.js.src.html +0 -1
  288. package/docs/source/lib/goog/events/keycodes.js.src.html +0 -1
  289. package/docs/source/lib/goog/events/listenable.js.src.html +0 -1
  290. package/docs/source/lib/goog/events/listener.js.src.html +0 -1
  291. package/docs/source/lib/goog/events/listenermap.js.src.html +0 -1
  292. package/docs/source/lib/goog/fs/url.js.src.html +0 -1
  293. package/docs/source/lib/goog/functions/functions.js.src.html +0 -1
  294. package/docs/source/lib/goog/html/safehtml.js.src.html +0 -1
  295. package/docs/source/lib/goog/html/safescript.js.src.html +0 -1
  296. package/docs/source/lib/goog/html/safestyle.js.src.html +0 -1
  297. package/docs/source/lib/goog/html/safestylesheet.js.src.html +0 -1
  298. package/docs/source/lib/goog/html/safeurl.js.src.html +0 -1
  299. package/docs/source/lib/goog/html/trustedresourceurl.js.src.html +0 -1
  300. package/docs/source/lib/goog/html/uncheckedconversions.js.src.html +0 -1
  301. package/docs/source/lib/goog/i18n/bidi.js.src.html +0 -1
  302. package/docs/source/lib/goog/iter/iter.js.src.html +0 -1
  303. package/docs/source/lib/goog/json/json.js.src.html +0 -1
  304. package/docs/source/lib/goog/labs/testing/assertthat.js.src.html +0 -1
  305. package/docs/source/lib/goog/labs/testing/logicmatcher.js.src.html +0 -1
  306. package/docs/source/lib/goog/labs/testing/matcher.js.src.html +0 -1
  307. package/docs/source/lib/goog/labs/testing/numbermatcher.js.src.html +0 -1
  308. package/docs/source/lib/goog/labs/testing/objectmatcher.js.src.html +0 -1
  309. package/docs/source/lib/goog/labs/testing/stringmatcher.js.src.html +0 -1
  310. package/docs/source/lib/goog/labs/useragent/browser.js.src.html +0 -1
  311. package/docs/source/lib/goog/labs/useragent/engine.js.src.html +0 -1
  312. package/docs/source/lib/goog/labs/useragent/platform.js.src.html +0 -1
  313. package/docs/source/lib/goog/labs/useragent/util.js.src.html +0 -1
  314. package/docs/source/lib/goog/log/log.js.src.html +0 -1
  315. package/docs/source/lib/goog/math/box.js.src.html +0 -1
  316. package/docs/source/lib/goog/math/coordinate.js.src.html +0 -1
  317. package/docs/source/lib/goog/math/math.js.src.html +0 -1
  318. package/docs/source/lib/goog/math/rect.js.src.html +0 -1
  319. package/docs/source/lib/goog/math/size.js.src.html +0 -1
  320. package/docs/source/lib/goog/net/wrapperxmlhttpfactory.js.src.html +0 -1
  321. package/docs/source/lib/goog/net/xhrlike.js.src.html +0 -1
  322. package/docs/source/lib/goog/net/xmlhttp.js.src.html +0 -1
  323. package/docs/source/lib/goog/net/xmlhttpfactory.js.src.html +0 -1
  324. package/docs/source/lib/goog/object/object.js.src.html +0 -1
  325. package/docs/source/lib/goog/promise/promise.js.src.html +0 -1
  326. package/docs/source/lib/goog/promise/resolver.js.src.html +0 -1
  327. package/docs/source/lib/goog/promise/thenable.js.src.html +0 -1
  328. package/docs/source/lib/goog/reflect/reflect.js.src.html +0 -1
  329. package/docs/source/lib/goog/string/const.js.src.html +0 -1
  330. package/docs/source/lib/goog/string/string.js.src.html +0 -1
  331. package/docs/source/lib/goog/string/typedstring.js.src.html +0 -1
  332. package/docs/source/lib/goog/structs/collection.js.src.html +0 -1
  333. package/docs/source/lib/goog/structs/map.js.src.html +0 -1
  334. package/docs/source/lib/goog/structs/set.js.src.html +0 -1
  335. package/docs/source/lib/goog/structs/structs.js.src.html +0 -1
  336. package/docs/source/lib/goog/style/style.js.src.html +0 -1
  337. package/docs/source/lib/goog/testing/asserts.js.src.html +0 -1
  338. package/docs/source/lib/goog/testing/events/events.js.src.html +0 -1
  339. package/docs/source/lib/goog/testing/functionmock.js.src.html +0 -1
  340. package/docs/source/lib/goog/testing/jsunit.js.src.html +0 -1
  341. package/docs/source/lib/goog/testing/loosemock.js.src.html +0 -1
  342. package/docs/source/lib/goog/testing/mock.js.src.html +0 -1
  343. package/docs/source/lib/goog/testing/mockclock.js.src.html +0 -1
  344. package/docs/source/lib/goog/testing/mockcontrol.js.src.html +0 -1
  345. package/docs/source/lib/goog/testing/mockinterface.js.src.html +0 -1
  346. package/docs/source/lib/goog/testing/mockmatchers.js.src.html +0 -1
  347. package/docs/source/lib/goog/testing/objectpropertystring.js.src.html +0 -1
  348. package/docs/source/lib/goog/testing/propertyreplacer.js.src.html +0 -1
  349. package/docs/source/lib/goog/testing/recordfunction.js.src.html +0 -1
  350. package/docs/source/lib/goog/testing/stacktrace.js.src.html +0 -1
  351. package/docs/source/lib/goog/testing/strictmock.js.src.html +0 -1
  352. package/docs/source/lib/goog/testing/testcase.js.src.html +0 -1
  353. package/docs/source/lib/goog/testing/testrunner.js.src.html +0 -1
  354. package/docs/source/lib/goog/uri/uri.js.src.html +0 -1
  355. package/docs/source/lib/goog/uri/utils.js.src.html +0 -1
  356. package/docs/source/lib/goog/useragent/product.js.src.html +0 -1
  357. package/docs/source/lib/goog/useragent/product_isversion.js.src.html +0 -1
  358. package/docs/source/lib/goog/useragent/useragent.js.src.html +0 -1
  359. package/docs/source/lib/webdriver/actionsequence.js.src.html +0 -1
  360. package/docs/source/lib/webdriver/button.js.src.html +0 -1
  361. package/docs/source/lib/webdriver/capabilities.js.src.html +0 -1
  362. package/docs/source/lib/webdriver/command.js.src.html +0 -1
  363. package/docs/source/lib/webdriver/events.js.src.html +0 -1
  364. package/docs/source/lib/webdriver/http/http.js.src.html +0 -1
  365. package/docs/source/lib/webdriver/key.js.src.html +0 -1
  366. package/docs/source/lib/webdriver/locators.js.src.html +0 -1
  367. package/docs/source/lib/webdriver/logging.js.src.html +0 -1
  368. package/docs/source/lib/webdriver/promise.js.src.html +0 -1
  369. package/docs/source/lib/webdriver/serializable.js.src.html +0 -1
  370. package/docs/source/lib/webdriver/session.js.src.html +0 -1
  371. package/docs/source/lib/webdriver/stacktrace.js.src.html +0 -1
  372. package/docs/source/lib/webdriver/testing/asserts.js.src.html +0 -1
  373. package/docs/source/lib/webdriver/touchsequence.js.src.html +0 -1
  374. package/docs/source/lib/webdriver/until.js.src.html +0 -1
  375. package/docs/source/lib/webdriver/webdriver.js.src.html +0 -1
  376. package/docs/source/net/index.js.src.html +0 -1
  377. package/docs/source/net/portprober.js.src.html +0 -1
  378. package/docs/source/opera.js.src.html +0 -1
  379. package/docs/source/phantomjs.js.src.html +0 -1
  380. package/docs/source/proxy.js.src.html +0 -1
  381. package/docs/source/remote/index.js.src.html +0 -1
  382. package/docs/source/safari.js.src.html +0 -1
  383. package/docs/source/testing/assert.js.src.html +0 -1
  384. package/docs/source/testing/index.js.src.html +0 -1
  385. package/docs/types.js +0 -1
  386. package/lib/atoms/error.js +0 -202
  387. package/lib/atoms/json.js +0 -80
  388. package/lib/atoms/response.js +0 -110
  389. package/lib/atoms/userAgent.js +0 -257
  390. package/lib/goog/LICENSE +0 -176
  391. package/lib/goog/array/array.js +0 -1654
  392. package/lib/goog/asserts/asserts.js +0 -365
  393. package/lib/goog/async/freelist.js +0 -88
  394. package/lib/goog/async/nexttick.js +0 -241
  395. package/lib/goog/async/run.js +0 -133
  396. package/lib/goog/async/workqueue.js +0 -139
  397. package/lib/goog/base.js +0 -2548
  398. package/lib/goog/debug/debug.js +0 -653
  399. package/lib/goog/debug/entrypointregistry.js +0 -158
  400. package/lib/goog/debug/error.js +0 -63
  401. package/lib/goog/debug/logbuffer.js +0 -148
  402. package/lib/goog/debug/logger.js +0 -873
  403. package/lib/goog/debug/logrecord.js +0 -242
  404. package/lib/goog/deps.js +0 -151
  405. package/lib/goog/disposable/disposable.js +0 -307
  406. package/lib/goog/disposable/idisposable.js +0 -45
  407. package/lib/goog/dom/browserfeature.js +0 -72
  408. package/lib/goog/dom/dom.js +0 -2991
  409. package/lib/goog/dom/nodetype.js +0 -48
  410. package/lib/goog/dom/safe.js +0 -347
  411. package/lib/goog/dom/tagname.js +0 -160
  412. package/lib/goog/dom/tags.js +0 -41
  413. package/lib/goog/dom/vendor.js +0 -96
  414. package/lib/goog/events/browserevent.js +0 -400
  415. package/lib/goog/events/browserfeature.js +0 -85
  416. package/lib/goog/events/event.js +0 -143
  417. package/lib/goog/events/eventid.js +0 -47
  418. package/lib/goog/events/events.js +0 -984
  419. package/lib/goog/events/eventtarget.js +0 -394
  420. package/lib/goog/events/eventtype.js +0 -237
  421. package/lib/goog/events/keycodes.js +0 -427
  422. package/lib/goog/events/listenable.js +0 -335
  423. package/lib/goog/events/listener.js +0 -131
  424. package/lib/goog/events/listenermap.js +0 -308
  425. package/lib/goog/fs/url.js +0 -109
  426. package/lib/goog/functions/functions.js +0 -442
  427. package/lib/goog/html/safehtml.js +0 -757
  428. package/lib/goog/html/safescript.js +0 -234
  429. package/lib/goog/html/safestyle.js +0 -442
  430. package/lib/goog/html/safestylesheet.js +0 -276
  431. package/lib/goog/html/safeurl.js +0 -398
  432. package/lib/goog/html/trustedresourceurl.js +0 -224
  433. package/lib/goog/html/uncheckedconversions.js +0 -232
  434. package/lib/goog/i18n/bidi.js +0 -908
  435. package/lib/goog/iter/iter.js +0 -1302
  436. package/lib/goog/json/json.js +0 -363
  437. package/lib/goog/labs/testing/assertthat.js +0 -58
  438. package/lib/goog/labs/testing/logicmatcher.js +0 -212
  439. package/lib/goog/labs/testing/matcher.js +0 -80
  440. package/lib/goog/labs/testing/numbermatcher.js +0 -346
  441. package/lib/goog/labs/testing/objectmatcher.js +0 -317
  442. package/lib/goog/labs/testing/stringmatcher.js +0 -415
  443. package/lib/goog/labs/useragent/browser.js +0 -341
  444. package/lib/goog/labs/useragent/engine.js +0 -160
  445. package/lib/goog/labs/useragent/platform.js +0 -160
  446. package/lib/goog/labs/useragent/util.js +0 -148
  447. package/lib/goog/log/log.js +0 -197
  448. package/lib/goog/math/box.js +0 -398
  449. package/lib/goog/math/coordinate.js +0 -268
  450. package/lib/goog/math/math.js +0 -451
  451. package/lib/goog/math/rect.js +0 -476
  452. package/lib/goog/math/size.js +0 -227
  453. package/lib/goog/net/wrapperxmlhttpfactory.js +0 -71
  454. package/lib/goog/net/xhrlike.js +0 -124
  455. package/lib/goog/net/xmlhttp.js +0 -246
  456. package/lib/goog/net/xmlhttpfactory.js +0 -67
  457. package/lib/goog/object/object.js +0 -686
  458. package/lib/goog/promise/promise.js +0 -1350
  459. package/lib/goog/promise/resolver.js +0 -48
  460. package/lib/goog/promise/thenable.js +0 -126
  461. package/lib/goog/reflect/reflect.js +0 -77
  462. package/lib/goog/string/const.js +0 -182
  463. package/lib/goog/string/string.js +0 -1599
  464. package/lib/goog/string/typedstring.js +0 -48
  465. package/lib/goog/structs/collection.js +0 -56
  466. package/lib/goog/structs/map.js +0 -457
  467. package/lib/goog/structs/set.js +0 -279
  468. package/lib/goog/structs/structs.js +0 -354
  469. package/lib/goog/style/style.js +0 -2037
  470. package/lib/goog/testing/asserts.js +0 -1278
  471. package/lib/goog/testing/events/events.js +0 -767
  472. package/lib/goog/testing/functionmock.js +0 -175
  473. package/lib/goog/testing/jsunit.js +0 -162
  474. package/lib/goog/testing/loosemock.js +0 -242
  475. package/lib/goog/testing/mock.js +0 -645
  476. package/lib/goog/testing/mockclock.js +0 -606
  477. package/lib/goog/testing/mockcontrol.js +0 -220
  478. package/lib/goog/testing/mockinterface.js +0 -45
  479. package/lib/goog/testing/mockmatchers.js +0 -400
  480. package/lib/goog/testing/objectpropertystring.js +0 -68
  481. package/lib/goog/testing/propertyreplacer.js +0 -262
  482. package/lib/goog/testing/recordfunction.js +0 -215
  483. package/lib/goog/testing/stacktrace.js +0 -594
  484. package/lib/goog/testing/strictmock.js +0 -130
  485. package/lib/goog/testing/testcase.js +0 -1629
  486. package/lib/goog/testing/testrunner.js +0 -440
  487. package/lib/goog/uri/uri.js +0 -1524
  488. package/lib/goog/uri/utils.js +0 -1064
  489. package/lib/goog/useragent/product.js +0 -183
  490. package/lib/goog/useragent/product_isversion.js +0 -144
  491. package/lib/goog/useragent/useragent.js +0 -572
  492. package/lib/webdriver/actionsequence.js +0 -356
  493. package/lib/webdriver/builder.js +0 -207
  494. package/lib/webdriver/capabilities.js +0 -412
  495. package/lib/webdriver/events.js +0 -179
  496. package/lib/webdriver/firefoxdomexecutor.js +0 -175
  497. package/lib/webdriver/http/corsclient.js +0 -133
  498. package/lib/webdriver/http/http.js +0 -525
  499. package/lib/webdriver/http/xhrclient.js +0 -67
  500. package/lib/webdriver/locators.js +0 -257
  501. package/lib/webdriver/logging.js +0 -347
  502. package/lib/webdriver/session.js +0 -74
  503. package/lib/webdriver/stacktrace.js +0 -619
  504. package/lib/webdriver/test/builder_test.js +0 -53
  505. package/lib/webdriver/test/capabilities_test.js +0 -72
  506. package/lib/webdriver/test/events_test.js +0 -203
  507. package/lib/webdriver/test/http/corsclient_test.js +0 -151
  508. package/lib/webdriver/test/http/http_test.js +0 -428
  509. package/lib/webdriver/test/http/xhrclient_test.js +0 -196
  510. package/lib/webdriver/test/locators_test.js +0 -59
  511. package/lib/webdriver/test/logging_test.js +0 -85
  512. package/lib/webdriver/test/promise_error_test.js +0 -892
  513. package/lib/webdriver/test/promise_flow_test.js +0 -2365
  514. package/lib/webdriver/test/promise_generator_test.js +0 -323
  515. package/lib/webdriver/test/promise_test.js +0 -2012
  516. package/lib/webdriver/test/stacktrace_test.js +0 -480
  517. package/lib/webdriver/test/test_bootstrap.js +0 -67
  518. package/lib/webdriver/test/testing/asserts_test.js +0 -117
  519. package/lib/webdriver/test/testing/client_test.js +0 -88
  520. package/lib/webdriver/test/testing/testcase_test.js +0 -229
  521. package/lib/webdriver/test/testutil.js +0 -209
  522. package/lib/webdriver/test/testutil_test.js +0 -104
  523. package/lib/webdriver/test/until_test.js +0 -411
  524. package/lib/webdriver/test/webdriver_generator_test.js +0 -92
  525. package/lib/webdriver/test/webdriver_test.js +0 -2369
  526. package/lib/webdriver/testing/asserts.js +0 -487
  527. package/lib/webdriver/testing/client.js +0 -179
  528. package/lib/webdriver/testing/jsunit.js +0 -363
  529. package/lib/webdriver/testing/testcase.js +0 -168
  530. package/lib/webdriver/testing/window.js +0 -244
  531. package/lib/webdriver/touchsequence.js +0 -248
  532. package/lib/webdriver/until.js +0 -412
  533. package/lib/webdriver/webdriver.js +0 -2511
  534. package/test/_base_test.js +0 -129
package/safari.js CHANGED
@@ -26,37 +26,48 @@
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 error = require('./error');
38
+ const io = require('./io');
39
+ const exec = require('./io/exec');
40
+ const isDevMode = require('./lib/devmode');
41
+ const Capabilities = require('./lib/capabilities').Capabilities;
42
+ const Capability = require('./lib/capabilities').Capability;
43
+ const command = require('./lib/command');
44
+ const promise = require('./lib/promise');
45
+ const Symbols = require('./lib/symbols');
46
+ const webdriver = require('./lib/webdriver');
47
+ const portprober = require('./net/portprober');
43
48
 
44
49
 
45
50
  /** @const */
46
- var CLIENT_PATH = _base.isDevMode()
51
+ const CLIENT_PATH = isDevMode
47
52
  ? path.join(__dirname,
48
53
  '../../../build/javascript/safari-driver/client.js')
49
54
  : path.join(__dirname, 'lib/safari/client.js');
50
55
 
51
56
 
52
57
  /** @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');
58
+ const LIBRARY_DIR = (function() {
59
+ if (process.platform === 'darwin') {
60
+ return path.join('/Users', process.env['USER'], 'Library/Safari');
61
+ } else if (process.platform === 'win32') {
62
+ return path.join(process.env['APPDATA'], 'Apple Computer', 'Safari');
63
+ } else {
64
+ return '/dev/null';
65
+ }
66
+ })();
56
67
 
57
68
 
58
69
  /** @const */
59
- var SESSION_DATA_FILES = (function() {
70
+ const SESSION_DATA_FILES = (function() {
60
71
  if (process.platform === 'darwin') {
61
72
  var libraryDir = path.join('/Users', process.env['USER'], 'Library');
62
73
  return [
@@ -95,97 +106,95 @@ var Host;
95
106
  /**
96
107
  * A basic HTTP/WebSocket server used to communicate with the SafariDriver
97
108
  * browser extension.
98
- * @constructor
99
- * @extends {events.EventEmitter}
100
109
  */
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);
110
+ class Server extends events.EventEmitter {
111
+ constructor() {
112
+ super();
113
+ var server = http.createServer(function(req, res) {
114
+ if (req.url === '/favicon.ico') {
115
+ res.writeHead(204);
116
+ res.end();
123
117
  return;
124
118
  }
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
119
 
134
- var wss = new ws.Server({server: server});
135
- wss.on('connection', this.emit.bind(this, 'connection'));
136
-
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
- };
120
+ var query = url.parse(/** @type {string} */(req.url)).query || '';
121
+ if (query.indexOf('url=') == -1) {
122
+ var address = server.address()
123
+ var host = address.address + ':' + address.port;
124
+ res.writeHead(
125
+ 302, {'Location': 'http://' + host + '?url=ws://' + host});
126
+ res.end();
127
+ }
153
128
 
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);
129
+ fs.readFile(CLIENT_PATH, 'utf8', function(err, data) {
130
+ if (err) {
131
+ res.writeHead(500, {'Content-Type': 'text/plain'});
132
+ res.end(err.stack);
133
+ return;
134
+ }
135
+ var content = '<!DOCTYPE html><body><script>' + data + '</script>';
136
+ res.writeHead(200, {
137
+ 'Content-Type': 'text/html; charset=utf-8',
138
+ 'Content-Length': Buffer.byteLength(content, 'utf8'),
139
+ });
140
+ res.end(content);
141
+ });
162
142
  });
163
- };
164
143
 
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);
144
+ var wss = new ws.Server({server: server});
145
+ wss.on('connection', this.emit.bind(this, 'connection'));
146
+
147
+ /**
148
+ * Starts the server on a random port.
149
+ * @return {!promise.Promise<Host>} A promise that will resolve
150
+ * with the server host when it has fully started.
151
+ */
152
+ this.start = function() {
153
+ if (server.address()) {
154
+ return promise.fulfilled(server.address());
155
+ }
156
+ return portprober.findFreePort('localhost').then(function(port) {
157
+ return promise.checkedNodeCall(
158
+ server.listen.bind(server, port, 'localhost'));
159
+ }).then(function() {
160
+ return server.address();
161
+ });
162
+ };
163
+
164
+ /**
165
+ * Stops the server.
166
+ * @return {!promise.Promise} A promise that will resolve when
167
+ * the server has closed all connections.
168
+ */
169
+ this.stop = function() {
170
+ return new promise.Promise(function(fulfill) {
171
+ server.close(fulfill);
172
+ });
173
+ };
174
+
175
+ /**
176
+ * @return {Host} This server's host info.
177
+ * @throws {Error} If the server is not running.
178
+ */
179
+ this.address = function() {
180
+ var addr = server.address();
181
+ if (!addr) {
182
+ throw Error('There server is not running!');
183
+ }
184
+ return addr;
185
+ };
186
+ }
187
+ }
178
188
 
179
189
 
180
190
  /**
181
- * @return {!promise.Promise<string>} A promise that will resolve with the path
191
+ * @return {!Promise<string>} A promise that will resolve with the path
182
192
  * to Safari on the current system.
183
193
  */
184
194
  function findSafariExecutable() {
185
195
  switch (process.platform) {
186
196
  case 'darwin':
187
- return promise.fulfilled(
188
- '/Applications/Safari.app/Contents/MacOS/Safari');
197
+ return Promise.resolve('/Applications/Safari.app/Contents/MacOS/Safari');
189
198
 
190
199
  case 'win32':
191
200
  var files = [
@@ -204,7 +213,7 @@ function findSafariExecutable() {
204
213
  });
205
214
 
206
215
  default:
207
- return promise.rejected(
216
+ return Promise.reject(
208
217
  Error('Safari is not supported on the current platform: ' +
209
218
  process.platform));
210
219
  }
@@ -212,16 +221,15 @@ function findSafariExecutable() {
212
221
 
213
222
 
214
223
  /**
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.
224
+ * @param {string} serverUrl The URL to connect to.
225
+ * @return {!Promise<string>} A promise for the path to a file that Safari can
226
+ * open on start-up to trigger a new connection to the WebSocket server.
219
227
  */
220
- function createConnectFile(url) {
228
+ function createConnectFile(serverUrl) {
221
229
  return io.tmpFile({postfix: '.html'}).then(function(f) {
222
230
  var writeFile = promise.checkedNodeCall(fs.writeFile,
223
231
  f,
224
- '<!DOCTYPE html><script>window.location = "' + url + '";</script>',
232
+ '<!DOCTYPE html><script>window.location = "' + serverUrl + '";</script>',
225
233
  {encoding: 'utf8'});
226
234
  return writeFile.then(function() {
227
235
  return f;
@@ -252,53 +260,68 @@ function cleanSession(desiredCapabilities) {
252
260
  }
253
261
 
254
262
 
263
+ /** @return {string} . */
264
+ function getRandomString() {
265
+ let seed = Date.now();
266
+ return Math.floor(Math.random() * seed).toString(36)
267
+ + Math.abs(Math.floor(Math.random() * seed) ^ Date.now()).toString(36);
268
+ }
269
+
270
+
255
271
  /**
256
- * @constructor
257
- * @implements {webdriver.CommandExecutor}
272
+ * @implements {command.Executor}
258
273
  */
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;
274
+ class CommandExecutor {
275
+ constructor() {
276
+ this.server_ = null;
283
277
 
284
- switch (command.getName()) {
285
- case webdriver.CommandName.NEW_SESSION:
286
- this.startSafari_(command).then(sendCommand, callback);
287
- break;
278
+ /** @private {ws.WebSocket} */
279
+ this.socket_ = null;
288
280
 
289
- case webdriver.CommandName.QUIT:
290
- this.destroySession_().then(function() {
291
- callback(null, _base.require('bot.response').createResponse(null));
292
- }, callback);
293
- break;
281
+ /** @private {promise.Promise.<!exec.Command>} */
282
+ this.safari_ = null;
283
+ }
294
284
 
295
- default:
296
- sendCommand();
297
- break;
285
+ /** @override */
286
+ execute(cmd) {
287
+ var self = this;
288
+ return new promise.Promise(function(fulfill, reject) {
289
+ var safariCommand = JSON.stringify({
290
+ 'origin': 'webdriver',
291
+ 'type': 'command',
292
+ 'command': {
293
+ 'id': getRandomString(),
294
+ 'name': cmd.getName(),
295
+ 'parameters': cmd.getParameters()
296
+ }
297
+ });
298
+
299
+ switch (cmd.getName()) {
300
+ case command.Name.NEW_SESSION:
301
+ self.startSafari_(cmd)
302
+ .then(() => self.sendCommand_(safariCommand))
303
+ .then(fulfill, reject);
304
+ break;
305
+
306
+ case command.Name.QUIT:
307
+ self.destroySession_().then(() => fulfill(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;
@@ -321,214 +344,206 @@ CommandExecutor.prototype.execute = function(command, callback) {
321
344
  reject(Error('Failed to parse driver message: ' + data));
322
345
  return;
323
346
  }
324
- fulfill(data['response']);
325
- });
326
347
 
327
- }).then(function(value) {
328
- callback(null, value);
329
- }, callback);
348
+ try {
349
+ error.checkLegacyResponse(data['response']);
350
+ fulfill(data['response']['value']);
351
+ } catch (ex) {
352
+ reject(ex);
353
+ }
354
+ });
355
+ });
330
356
  }
331
- };
332
357
 
358
+ /**
359
+ * @param {!command.Command} command .
360
+ * @private
361
+ */
362
+ startSafari_(command) {
363
+ this.server_ = new Server();
364
+
365
+ this.safari_ = this.server_.start().then(function(address) {
366
+ var tasks = cleanSession(
367
+ /** @type {!Object} */(
368
+ command.getParameters()['desiredCapabilities']));
369
+ tasks.push(
370
+ findSafariExecutable(),
371
+ createConnectFile(
372
+ 'http://' + address.address + ':' + address.port));
373
+ return promise.all(tasks).then(function(tasks) {
374
+ var exe = tasks[tasks.length - 2];
375
+ var html = tasks[tasks.length - 1];
376
+ return exec(exe, {args: [html]});
377
+ });
378
+ });
333
379
 
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]});
380
+ var connected = promise.defer();
381
+ var self = this;
382
+ var start = Date.now();
383
+ var timer = setTimeout(function() {
384
+ connected.reject(Error(
385
+ 'Failed to connect to the SafariDriver after ' + (Date.now() - start) +
386
+ ' ms; Have you installed the latest extension from ' +
387
+ 'http://selenium-release.storage.googleapis.com/index.html?'));
388
+ }, 10 * 1000);
389
+ this.server_.once('connection', function(socket) {
390
+ clearTimeout(timer);
391
+ self.socket_ = socket;
392
+ socket.once('close', function() {
393
+ self.socket_ = null;
394
+ });
395
+ connected.fulfill();
351
396
  });
352
- });
397
+ return connected.promise;
398
+ }
353
399
 
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() {
400
+ /**
401
+ * Destroys the active session by stopping the WebSocket server and killing the
402
+ * Safari subprocess.
403
+ * @private
404
+ */
405
+ destroySession_() {
406
+ var tasks = [];
407
+ if (this.server_) {
408
+ tasks.push(this.server_.stop());
409
+ }
410
+ if (this.safari_) {
411
+ tasks.push(this.safari_.then(function(safari) {
412
+ safari.kill();
413
+ return safari.result();
414
+ }));
415
+ }
416
+ var self = this;
417
+ return promise.all(tasks).finally(function() {
418
+ self.server_ = null;
367
419
  self.socket_ = null;
420
+ self.safari_ = null;
368
421
  });
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
422
  }
385
- if (this.safari_) {
386
- tasks.push(this.safari_.then(function(safari) {
387
- safari.kill();
388
- return safari.result();
389
- }));
390
- }
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
- };
423
+ }
424
+
398
425
 
399
426
 
400
427
  /** @const */
401
- var OPTIONS_CAPABILITY_KEY = 'safari.options';
428
+ const OPTIONS_CAPABILITY_KEY = 'safari.options';
402
429
 
403
430
 
404
431
 
405
432
  /**
406
433
  * Configuration options specific to the {@link Driver SafariDriver}.
407
- * @constructor
408
- * @extends {webdriver.Serializable}
409
434
  */
410
- var Options = function() {
411
- webdriver.Serializable.call(this);
435
+ class Options {
436
+ constructor() {
437
+ /** @private {Object<string, *>} */
438
+ this.options_ = null;
412
439
 
413
- /** @private {Object<string, *>} */
414
- this.options_ = null;
440
+ /** @private {./lib/logging.Preferences} */
441
+ this.logPrefs_ = null;
442
+ }
415
443
 
416
- /** @private {webdriver.logging.Preferences} */
417
- this.logPrefs_ = null;
418
- };
419
- util.inherits(Options, webdriver.Serializable);
444
+ /**
445
+ * Extracts the SafariDriver specific options from the given capabilities
446
+ * object.
447
+ * @param {!Capabilities} capabilities The capabilities object.
448
+ * @return {!Options} The ChromeDriver options.
449
+ */
450
+ static fromCapabilities(capabilities) {
451
+ var options = new Options();
452
+
453
+ var o = capabilities.get(OPTIONS_CAPABILITY_KEY);
454
+ if (o instanceof Options) {
455
+ options = o;
456
+ } else if (o) {
457
+ options.setCleanSession(o.cleanSession);
458
+ }
420
459
 
460
+ if (capabilities.has(Capability.LOGGING_PREFS)) {
461
+ options.setLoggingPrefs(capabilities.get(Capability.LOGGING_PREFS));
462
+ }
421
463
 
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);
464
+ return options;
436
465
  }
437
466
 
438
- if (capabilities.has(webdriver.Capability.LOGGING_PREFS)) {
439
- options.setLoggingPrefs(
440
- capabilities.get(webdriver.Capability.LOGGING_PREFS));
467
+ /**
468
+ * Sets whether to force Safari to start with a clean session. Enabling this
469
+ * option will cause all global browser data to be deleted.
470
+ * @param {boolean} clean Whether to make sure the session has no cookies,
471
+ * cache entries, local storage, or databases.
472
+ * @return {!Options} A self reference.
473
+ */
474
+ setCleanSession(clean) {
475
+ if (!this.options_) {
476
+ this.options_ = {};
477
+ }
478
+ this.options_['cleanSession'] = clean;
479
+ return this;
441
480
  }
442
481
 
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_ = {};
482
+ /**
483
+ * Sets the logging preferences for the new session.
484
+ * @param {!./lib/logging.Preferences} prefs The logging preferences.
485
+ * @return {!Options} A self reference.
486
+ */
487
+ setLoggingPrefs(prefs) {
488
+ this.logPrefs_ = prefs;
489
+ return this;
457
490
  }
458
- this.options_['cleanSession'] = clean;
459
- return this;
460
- };
461
-
462
491
 
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
-
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);
492
+ /**
493
+ * Converts this options instance to a {@link Capabilities} object.
494
+ * @param {Capabilities=} opt_capabilities The capabilities to
495
+ * merge these options into, if any.
496
+ * @return {!Capabilities} The capabilities.
497
+ */
498
+ toCapabilities(opt_capabilities) {
499
+ var caps = opt_capabilities || Capabilities.safari();
500
+ if (this.logPrefs_) {
501
+ caps.set(Capability.LOGGING_PREFS, this.logPrefs_);
502
+ }
503
+ if (this.options_) {
504
+ caps.set(OPTIONS_CAPABILITY_KEY, this);
505
+ }
506
+ return caps;
487
507
  }
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
508
 
509
+ /**
510
+ * Converts this instance to its JSON wire protocol representation. Note this
511
+ * function is an implementation detail not intended for general use.
512
+ * @return {!Object<string, *>} The JSON wire protocol representation of this
513
+ * instance.
514
+ */
515
+ [Symbols.serialize]() {
516
+ return this.options_ || {};
517
+ }
518
+ }
503
519
 
504
520
 
505
521
  /**
506
522
  * A WebDriver client for Safari. This class should never be instantiated
507
- * directly; instead, use the {@link selenium-webdriver.Builder}:
523
+ * directly; instead, use the {@linkplain ./builder.Builder Builder}:
508
524
  *
509
525
  * var driver = new Builder()
510
526
  * .forBrowser('safari')
511
527
  * .build();
512
528
  *
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
529
  */
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);
530
+ class Driver extends webdriver.WebDriver {
531
+ /**
532
+ * @param {(Options|Capabilities)=} opt_config The configuration
533
+ * options for the new session.
534
+ * @param {promise.ControlFlow=} opt_flow The control flow to create
535
+ * the driver under.
536
+ */
537
+ constructor(opt_config, opt_flow) {
538
+ var executor = new CommandExecutor();
539
+ var caps =
540
+ opt_config instanceof Options ? opt_config.toCapabilities() :
541
+ (opt_config || Capabilities.safari());
542
+
543
+ var driver = webdriver.WebDriver.createSession(executor, caps, opt_flow);
544
+ super(driver.getSession(), executor, driver.controlFlow());
545
+ }
546
+ }
532
547
 
533
548
 
534
549
  // Public API