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
@@ -1,688 +0,0 @@
1
- <!DOCTYPE html><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"><meta http-equiv="Content-Language" content="en"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>webdriver.promise</title><link href="dossier.css" rel="stylesheet" type="text/css"><header><div><form><div><input type="search" placeholder="Search" tabindex="1"></div></form></div></header><main><article><div class="codelink"><a href="source/lib/webdriver/promise.js.src.html#l627">View Source</a></div><h1>namespace webdriver.promise</h1><p>The promise module is centered around the
2
- <a href="class_webdriver_promise_ControlFlow.html">ControlFlow</a>, a class that
3
- coordinates the execution of asynchronous tasks. The ControlFlow allows users
4
- to focus on the imperative commands for their script without worrying about
5
- chaining together every single asynchronous action, which can be tedious and
6
- verbose. APIs may be layered on top of the control flow to read as if they
7
- were synchronous. For instance, the core
8
- <a href="class_webdriver_WebDriver.html">WebDriver</a> API is built on top of the
9
- control flow, allowing users to write</p>
10
- <pre><code>driver.get(&#39;http://www.google.com/ncr&#39;);
11
- driver.findElement({name: &#39;q&#39;}).sendKeys(&#39;webdriver&#39;);
12
- driver.findElement({name: &#39;btnGn&#39;}).click();
13
- </code></pre>
14
- <p>instead of</p>
15
- <pre><code>driver.get(&#39;http://www.google.com/ncr&#39;)
16
- .then(function() {
17
- return driver.findElement({name: &#39;q&#39;});
18
- })
19
- .then(function(q) {
20
- return q.sendKeys(&#39;webdriver&#39;);
21
- })
22
- .then(function() {
23
- return driver.findElement({name: &#39;btnG&#39;});
24
- })
25
- .then(function(btnG) {
26
- return btnG.click();
27
- });
28
- </code></pre>
29
- <h2>Tasks and Task Queues</h2>
30
- <p>The control flow is based on the concept of tasks and task queues. Tasks are
31
- functions that define the basic unit of work for the control flow to execute.
32
- Each task is scheduled via
33
- <a href="class_webdriver_promise_ControlFlow.html#execute"><code>ControlFlow#execute()</code></a>, which
34
- will return a <a href="class_webdriver_promise_Promise.html"><code>Promise</code></a> that will be resolved
35
- with the task&#39;s result.</p>
36
- <p>A task queue contains all of the tasks scheduled within a single turn of the
37
- <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop">JavaScript event loop</a>. The control flow will create a new task queue
38
- the first time a task is scheduled within an event loop.</p>
39
- <pre><code>var flow &#61; promise.controlFlow();
40
- flow.execute(foo); // Creates a new task queue and inserts foo.
41
- flow.execute(bar); // Inserts bar into the same queue as foo.
42
- setTimeout(function() {
43
- flow.execute(baz); // Creates a new task queue and inserts baz.
44
- }, 0);
45
- </code></pre>
46
- <p>Whenever the control flow creates a new task queue, it will automatically
47
- begin executing tasks in the next available turn of the event loop. This
48
- execution is scheduled using a &#34;micro-task&#34; timer, such as a (native)
49
- <code>Promise.then()</code> callback.</p>
50
- <pre><code>setTimeout(() &#61;&gt; console.log(&#39;a&#39;));
51
- Promise.resolve().then(() &#61;&gt; console.log(&#39;b&#39;)); // A native promise.
52
- flow.execute(() &#61;&gt; console.log(&#39;c&#39;));
53
- Promise.resolve().then(() &#61;&gt; console.log(&#39;d&#39;));
54
- setTimeout(() &#61;&gt; console.log(&#39;fin&#39;));
55
- // b
56
- // c
57
- // d
58
- // a
59
- // fin
60
- </code></pre>
61
- <p>In the example above, b/c/d is logged before a/fin because native promises
62
- and this module use &#34;micro-task&#34; timers, which have a higher priority than
63
- &#34;macro-tasks&#34; like <code>setTimeout</code>.</p>
64
- <h2>Task Execution</h2>
65
- <p>Upon creating a task queue, and whenever an exisiting queue completes a task,
66
- the control flow will schedule a micro-task timer to process any scheduled
67
- tasks. This ensures no task is ever started within the same turn of the
68
- JavaScript event loop in which it was scheduled, nor is a task ever started
69
- within the same turn that another finishes.</p>
70
- <p>When the execution timer fires, a single task will be dequeued and executed.
71
- There are several important events that may occur while executing a task
72
- function:</p>
73
- <ol><li>A new task queue is created by a call to
74
- <a href="class_webdriver_promise_ControlFlow.html#execute"><code>ControlFlow#execute()</code></a>. Any
75
- tasks scheduled within this task queue are considered subtasks of the
76
- current task.</li><li>The task function throws an error. Any scheduled tasks are immediately
77
- discarded and the task&#39;s promised result (previously returned by
78
- <a href="class_webdriver_promise_ControlFlow.html#execute"><code>ControlFlow#execute()</code></a>) is
79
- immediately rejected with the thrown error.</li><li>The task function returns sucessfully.</li></ol>
80
- <p>If a task function created a new task queue, the control flow will wait for
81
- that queue to complete before processing the task result. If the queue
82
- completes without error, the flow will settle the task&#39;s promise with the
83
- value originaly returned by the task function. On the other hand, if the task
84
- queue termintes with an error, the task&#39;s promise will be rejected with that
85
- error.</p>
86
- <pre><code>flow.execute(function() {
87
- flow.execute(() &#61;&gt; console.log(&#39;a&#39;));
88
- flow.execute(() &#61;&gt; console.log(&#39;b&#39;));
89
- });
90
- flow.execute(() &#61;&gt; console.log(&#39;c&#39;));
91
- // a
92
- // b
93
- // c
94
- </code></pre>
95
- <h2>Promise Integration</h2>
96
- <p>In addition to the <a href="class_webdriver_promise_ControlFlow.html"><code>ControlFlow</code></a> class,
97
- the promise module also exports a <a href="https://promisesaplus.com/">Promise/A&#43;</a>
98
- <a href="class_webdriver_promise_Promise.html">implementation</a> that is deeply
99
- integrated with the ControlFlow. First and foremost, each promise
100
- <a href="class_webdriver_promise_Promise.html#then">callback</a> is scheduled with the
101
- control flow as a task. As a result, each callback is invoked in its own turn
102
- of the JavaScript event loop with its own task queue. If any tasks are
103
- scheduled within a callback, the callback&#39;s promised result will not be
104
- settled until the task queue has completed.</p>
105
- <pre><code>promise.fulfilled().then(function() {
106
- flow.execute(function() {
107
- console.log(&#39;b&#39;);
108
- });
109
- }).then(() &#61;&gt; console.log(&#39;a&#39;));
110
- // b
111
- // a
112
- </code></pre>
113
- <h3>Scheduling Promise Callbacks <a id="scheduling_callbacks"></a></h3>
114
- <p>How callbacks are scheduled in the control flow depends on when they are
115
- attached to the promise. Callbacks attached to a <em>previously</em> resolved
116
- promise are immediately enqueued as subtasks of the currently running task.</p>
117
- <pre><code>var p &#61; promise.fulfilled();
118
- flow.execute(function() {
119
- flow.execute(() &#61;&gt; console.log(&#39;A&#39;));
120
- p.then( () &#61;&gt; console.log(&#39;B&#39;));
121
- flow.execute(() &#61;&gt; console.log(&#39;C&#39;));
122
- p.then( () &#61;&gt; console.log(&#39;D&#39;));
123
- }).then(function() {
124
- console.log(&#39;fin&#39;);
125
- });
126
- // A
127
- // B
128
- // C
129
- // D
130
- // fin
131
- </code></pre>
132
- <p>When a promise is resolved while a task function is on the call stack, any
133
- callbacks also registered in that stack frame are scheduled as if the promise
134
- were already resolved:</p>
135
- <pre><code>var d &#61; promise.defer();
136
- flow.execute(function() {
137
- flow.execute( () &#61;&gt; console.log(&#39;A&#39;));
138
- d.promise.then(() &#61;&gt; console.log(&#39;B&#39;));
139
- flow.execute( () &#61;&gt; console.log(&#39;C&#39;));
140
- d.promise.then(() &#61;&gt; console.log(&#39;D&#39;));
141
-
142
- d.fulfill();
143
- }).then(function() {
144
- console.log(&#39;fin&#39;);
145
- });
146
- // A
147
- // B
148
- // C
149
- // D
150
- // fin
151
- </code></pre>
152
- <p>Callbacks attached to an <em>unresolved</em> promise within a task function are
153
- only weakly scheduled as subtasks and will be dropped if they reach the
154
- front of the queue before the promise is resolved. In the example below, the
155
- callbacks for <code>B</code> &amp; <code>D</code> are dropped as sub-tasks since they are attached to
156
- an unresolved promise when they reach the front of the task queue.</p>
157
- <pre><code>var d &#61; promise.defer();
158
- flow.execute(function() {
159
- flow.execute( () &#61;&gt; console.log(&#39;A&#39;));
160
- d.promise.then(() &#61;&gt; console.log(&#39;B&#39;));
161
- flow.execute( () &#61;&gt; console.log(&#39;C&#39;));
162
- d.promise.then(() &#61;&gt; console.log(&#39;D&#39;));
163
-
164
- setTimeout(d.fulfill, 20);
165
- }).then(function() {
166
- console.log(&#39;fin&#39;)
167
- });
168
- // A
169
- // C
170
- // fin
171
- // B
172
- // D
173
- </code></pre>
174
- <p>If a promise is resolved while a task function is on the call stack, any
175
- previously registered and unqueued callbacks (i.e. either attached while no
176
- task was on the call stack, or previously dropped as described above) act as
177
- <em>interrupts</em> and are inserted at the front of the task queue. If multiple
178
- promises are fulfilled, their interrupts are enqueued in the order the
179
- promises are resolved.</p>
180
- <pre><code>var d1 &#61; promise.defer();
181
- d1.promise.then(() &#61;&gt; console.log(&#39;A&#39;));
182
-
183
- var d2 &#61; promise.defer();
184
- d2.promise.then(() &#61;&gt; console.log(&#39;B&#39;));
185
-
186
- flow.execute(function() {
187
- d1.promise.then(() &#61;&gt; console.log(&#39;C&#39;));
188
- flow.execute(() &#61;&gt; console.log(&#39;D&#39;));
189
- });
190
- flow.execute(function() {
191
- flow.execute(() &#61;&gt; console.log(&#39;E&#39;));
192
- flow.execute(() &#61;&gt; console.log(&#39;F&#39;));
193
- d1.fulfill();
194
- d2.fulfill();
195
- }).then(function() {
196
- console.log(&#39;fin&#39;);
197
- });
198
- // D
199
- // A
200
- // C
201
- // B
202
- // E
203
- // F
204
- // fin
205
- </code></pre>
206
- <p>Within a task function (or callback), each step of a promise chain acts as
207
- an interrupt on the task queue:</p>
208
- <pre><code>var d &#61; promise.defer();
209
- flow.execute(function() {
210
- d.promise.
211
- then(() &#61;&gt; console.log(&#39;A&#39;)).
212
- then(() &#61;&gt; console.log(&#39;B&#39;)).
213
- then(() &#61;&gt; console.log(&#39;C&#39;)).
214
- then(() &#61;&gt; console.log(&#39;D&#39;));
215
-
216
- flow.execute(() &#61;&gt; console.log(&#39;E&#39;));
217
- d.fulfill();
218
- }).then(function() {
219
- console.log(&#39;fin&#39;);
220
- });
221
- // A
222
- // B
223
- // C
224
- // D
225
- // E
226
- // fin
227
- </code></pre>
228
- <p>If there are multiple promise chains derived from a single promise, they are
229
- processed in the order created:</p>
230
- <pre><code>var d &#61; promise.defer();
231
- flow.execute(function() {
232
- var chain &#61; d.promise.then(() &#61;&gt; console.log(&#39;A&#39;));
233
-
234
- chain.then(() &#61;&gt; console.log(&#39;B&#39;)).
235
- then(() &#61;&gt; console.log(&#39;C&#39;));
236
-
237
- chain.then(() &#61;&gt; console.log(&#39;D&#39;)).
238
- then(() &#61;&gt; console.log(&#39;E&#39;));
239
-
240
- flow.execute(() &#61;&gt; console.log(&#39;F&#39;));
241
-
242
- d.fulfill();
243
- }).then(function() {
244
- console.log(&#39;fin&#39;);
245
- });
246
- // A
247
- // B
248
- // C
249
- // D
250
- // E
251
- // F
252
- // fin
253
- </code></pre>
254
- <p>Even though a subtask&#39;s promised result will never resolve while the task
255
- function is on the stack, it will be treated as a promise resolved within the
256
- task. In all other scenarios, a task&#39;s promise behaves just like a normal
257
- promise. In the sample below, <code>C/D</code> is loggged before <code>B</code> because the
258
- resolution of <code>subtask1</code> interrupts the flow of the enclosing task. Within
259
- the final subtask, <code>E/F</code> is logged in order because <code>subtask1</code> is a resolved
260
- promise when that task runs.</p>
261
- <pre><code>flow.execute(function() {
262
- var subtask1 &#61; flow.execute(() &#61;&gt; console.log(&#39;A&#39;));
263
- var subtask2 &#61; flow.execute(() &#61;&gt; console.log(&#39;B&#39;));
264
-
265
- subtask1.then(() &#61;&gt; console.log(&#39;C&#39;));
266
- subtask1.then(() &#61;&gt; console.log(&#39;D&#39;));
267
-
268
- flow.execute(function() {
269
- flow.execute(() &#61;&gt; console.log(&#39;E&#39;));
270
- subtask1.then(() &#61;&gt; console.log(&#39;F&#39;));
271
- });
272
- }).then(function() {
273
- console.log(&#39;fin&#39;);
274
- });
275
- // A
276
- // C
277
- // D
278
- // B
279
- // E
280
- // F
281
- // fin
282
- </code></pre>
283
- <p>Finally, consider the following:</p>
284
- <pre><code>var d &#61; promise.defer();
285
- d.promise.then(() &#61;&gt; console.log(&#39;A&#39;));
286
- d.promise.then(() &#61;&gt; console.log(&#39;B&#39;));
287
-
288
- flow.execute(function() {
289
- flow.execute( () &#61;&gt; console.log(&#39;C&#39;));
290
- d.promise.then(() &#61;&gt; console.log(&#39;D&#39;));
291
-
292
- flow.execute( () &#61;&gt; console.log(&#39;E&#39;));
293
- d.promise.then(() &#61;&gt; console.log(&#39;F&#39;));
294
-
295
- d.fulfill();
296
-
297
- flow.execute( () &#61;&gt; console.log(&#39;G&#39;));
298
- d.promise.then(() &#61;&gt; console.log(&#39;H&#39;));
299
- }).then(function() {
300
- console.log(&#39;fin&#39;);
301
- });
302
- // A
303
- // B
304
- // C
305
- // D
306
- // E
307
- // F
308
- // G
309
- // H
310
- // fin
311
- </code></pre>
312
- <p>In this example, callbacks are registered on <code>d.promise</code> both before and
313
- during the invocation of the task function. When <code>d.fulfill()</code> is called,
314
- the callbacks registered before the task (<code>A</code> &amp; <code>B</code>) are registered as
315
- interrupts. The remaining callbacks were all attached within the task and
316
- are scheduled in the flow as standard tasks.</p>
317
- <h2>Generator Support</h2>
318
- <p><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*">Generators</a> may be scheduled as tasks within a control flow or attached
319
- as callbacks to a promise. Each time the generator yields a promise, the
320
- control flow will wait for that promise to settle before executing the next
321
- iteration of the generator. The yielded promise&#39;s fulfilled value will be
322
- passed back into the generator:</p>
323
- <pre><code>flow.execute(function* () {
324
- var d &#61; promise.defer();
325
-
326
- setTimeout(() &#61;&gt; console.log(&#39;...waiting...&#39;), 25);
327
- setTimeout(() &#61;&gt; d.fulfill(123), 50);
328
-
329
- console.log(&#39;start: &#39; &#43; Date.now());
330
-
331
- var value &#61; yield d.promise;
332
- console.log(&#39;mid: %d; value &#61; %d&#39;, Date.now(), value);
333
-
334
- yield promise.delayed(10);
335
- console.log(&#39;end: &#39; &#43; Date.now());
336
- }).then(function() {
337
- console.log(&#39;fin&#39;);
338
- });
339
- // start: 0
340
- // ...waiting...
341
- // mid: 50; value &#61; 123
342
- // end: 60
343
- // fin
344
- </code></pre>
345
- <p>Yielding the result of a promise chain will wait for the entire chain to
346
- complete:</p>
347
- <pre><code>promise.fulfilled().then(function* () {
348
- console.log(&#39;start: &#39; &#43; Date.now());
349
-
350
- var value &#61; yield flow.
351
- execute(() &#61;&gt; console.log(&#39;A&#39;)).
352
- then( () &#61;&gt; console.log(&#39;B&#39;)).
353
- then( () &#61;&gt; 123);
354
-
355
- console.log(&#39;mid: %s; value &#61; %d&#39;, Date.now(), value);
356
-
357
- yield flow.execute(() &#61;&gt; console.log(&#39;C&#39;));
358
- }).then(function() {
359
- console.log(&#39;fin&#39;);
360
- });
361
- // start: 0
362
- // A
363
- // B
364
- // mid: 2; value &#61; 123
365
- // C
366
- // fin
367
- </code></pre>
368
- <p>Yielding a <em>rejected</em> promise will cause the rejected value to be thrown
369
- within the generator function:</p>
370
- <pre><code>flow.execute(function* () {
371
- console.log(&#39;start: &#39; &#43; Date.now());
372
- try {
373
- yield promise.delayed(10).then(function() {
374
- throw Error(&#39;boom&#39;);
375
- });
376
- } catch (ex) {
377
- console.log(&#39;caught time: &#39; &#43; Date.now());
378
- console.log(ex.message);
379
- }
380
- });
381
- // start: 0
382
- // caught time: 10
383
- // boom
384
- </code></pre>
385
- <h1>Error Handling</h1>
386
- <p>ES6 promises do not require users to handle a promise rejections. This can
387
- result in subtle bugs as the rejections are silently &#34;swallowed&#34; by the
388
- Promise class.</p>
389
- <pre><code>Promise.reject(Error(&#39;boom&#39;));
390
- // ... *crickets* ...
391
- </code></pre>
392
- <p>Selenium&#39;s <a href="namespace_webdriver_promise.html"><code>promise</code></a> module, on the other hand,
393
- requires that every rejection be explicitly handled. When a
394
- <a href="class_webdriver_promise_Promise.html">Promise</a> is rejected and no callbacks
395
- are defined on that promise, it is considered an <em>unhandled rejection</em> and
396
- reproted to the active task queue. If the rejection remains unhandled after
397
- a single turn of the <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop">event loop</a> (scheduled with a micro-task), it
398
- will propagate up the stack.</p>
399
- <h2>Error Propagation</h2>
400
- <p>If an unhandled rejection occurs within a task function, that task&#39;s promised
401
- result is rejected and all remaining subtasks are discarded:</p>
402
- <pre><code>flow.execute(function() {
403
- // No callbacks registered on promise -&gt; unhandled rejection
404
- promise.rejected(Error(&#39;boom&#39;));
405
- flow.execute(function() { console.log(&#39;this will never run&#39;); });
406
- }).thenCatch(function(e) {
407
- console.log(e.message);
408
- });
409
- // boom
410
- </code></pre>
411
- <p>The promised results for discarded tasks are silently rejected with a
412
- cancellation error and existing callback chains will never fire.</p>
413
- <pre><code>flow.execute(function() {
414
- promise.rejected(Error(&#39;boom&#39;));
415
- flow.execute(function() { console.log(&#39;a&#39;); }).
416
- then(function() { console.log(&#39;b&#39;); });
417
- }).thenCatch(function(e) {
418
- console.log(e.message);
419
- });
420
- // boom
421
- </code></pre>
422
- <p>An unhandled rejection takes precedence over a task function&#39;s returned
423
- result, even if that value is another promise:</p>
424
- <pre><code>flow.execute(function() {
425
- promise.rejected(Error(&#39;boom&#39;));
426
- return flow.execute(someOtherTask);
427
- }).thenCatch(function(e) {
428
- console.log(e.message);
429
- });
430
- // boom
431
- </code></pre>
432
- <p>If there are multiple unhandled rejections within a task, they are packaged
433
- in a <a href="class_webdriver_promise_MultipleUnhandledRejectionError.html"><code>MultipleUnhandledRejectionError</code></a>, which has an <code>errors</code> property that is a
434
- <code>Set</code> of the recorded unhandled rejections:</p>
435
- <pre><code>flow.execute(function() {
436
- promise.rejected(Error(&#39;boom1&#39;));
437
- promise.rejected(Error(&#39;boom2&#39;));
438
- }).thenCatch(function(ex) {
439
- console.log(ex instanceof promise.MultipleUnhandledRejectionError);
440
- for (var e of ex.errors) {
441
- console.log(e.message);
442
- }
443
- });
444
- // boom1
445
- // boom2
446
- </code></pre>
447
- <p>When a subtask is discarded due to an unreported rejection in its parent
448
- frame, the existing callbacks on that task will never settle and the
449
- callbacks will not be invoked. If a new callback is attached ot the subtask
450
- <em>after</em> it has been discarded, it is handled the same as adding a callback
451
- to a cancelled promise: the error-callback path is invoked. This behavior is
452
- intended to handle cases where the user saves a reference to a task promise,
453
- as illustrated below.</p>
454
- <pre><code>var subTask;
455
- flow.execute(function() {
456
- promise.rejected(Error(&#39;boom&#39;));
457
- subTask &#61; flow.execute(function() {});
458
- }).thenCatch(function(e) {
459
- console.log(e.message);
460
- }).then(function() {
461
- return subTask.then(
462
- () &#61;&gt; console.log(&#39;subtask success!&#39;),
463
- (e) &#61;&gt; console.log(&#39;subtask failed:\n&#39; &#43; e));
464
- });
465
- // boom
466
- // subtask failed:
467
- // DiscardedTaskError: Task was discarded due to a previous failure: boom
468
- </code></pre>
469
- <p>When a subtask fails, its promised result is treated the same as any other
470
- promise: it must be handled within one turn of the rejection or the unhandled
471
- rejection is propagated to the parent task. This means users can catch errors
472
- from complex flows from the top level task:</p>
473
- <pre><code>flow.execute(function() {
474
- flow.execute(function() {
475
- flow.execute(function() {
476
- throw Error(&#39;fail!&#39;);
477
- });
478
- });
479
- }).thenCatch(function(e) {
480
- console.log(e.message);
481
- });
482
- // fail!
483
- </code></pre>
484
- <h2>Unhandled Rejection Events</h2>
485
- <p>When an unhandled rejection propagates to the root of the control flow, the
486
- flow will emit an <strong>uncaughtException</strong> event. If no listeners are registered
487
- on the flow, the error will be rethrown to the global error handler: an
488
- <strong>uncaughtException</strong> event from the
489
- <a href="https://nodejs.org/api/process.html"><code>process</code></a> object in node, or
490
- <code>window.onerror</code> when running in a browser.</p>
491
- <p>Bottom line: you <strong><em>must</em></strong> handle rejected promises.</p>
492
- <h1>Promise/A&#43; Compatibility</h1>
493
- <p>This <code>promise</code> module is compliant with the <a href="https://promisesaplus.com/">Promise/A&#43;</a> specification
494
- except for sections <code>2.2.6.1</code> and <code>2.2.6.2</code>:</p>
495
- <blockquote>
496
- <ul><li><code>then</code> may be called multiple times on the same promise.
497
- <ul><li>If/when <code>promise</code> is fulfilled, all respective <code>onFulfilled</code> callbacks
498
- must execute in the order of their originating calls to <code>then</code>.</li><li>If/when <code>promise</code> is rejected, all respective <code>onRejected</code> callbacks
499
- must execute in the order of their originating calls to <code>then</code>.</li></ul>
500
- </li></ul>
501
- </blockquote>
502
- <p>Specifically, the conformance tests contains the following scenario (for
503
- brevity, only the fulfillment version is shown):</p>
504
- <pre><code>var p1 &#61; Promise.resolve();
505
- p1.then(function() {
506
- console.log(&#39;A&#39;);
507
- p1.then(() &#61;&gt; console.log(&#39;B&#39;));
508
- });
509
- p1.then(() &#61;&gt; console.log(&#39;C&#39;));
510
- // A
511
- // C
512
- // B
513
- </code></pre>
514
- <p>Since the <a href="#scheduling_callbacks">ControlFlow</a> executes promise callbacks as
515
- tasks, with this module, the result would be</p>
516
- <pre><code>var p2 &#61; promise.fulfilled();
517
- p2.then(function() {
518
- console.log(&#39;A&#39;);
519
- p2.then(() &#61;&gt; console.log(&#39;B&#39;);
520
- });
521
- p2.then(() &#61;&gt; console.log(&#39;C&#39;));
522
- // A
523
- // B
524
- // C
525
- </code></pre>
526
- <h2>Functions</h2><div id="all" class="function"><div><h3><code>&lt;T&gt;</code> all(<wbr>arr)<span class="codelink"><a href="source/lib/webdriver/promise.js.src.html#l1626">code »</a></span></h3><p>Given an array of promises, will return a promise that will be fulfilled
527
- with the fulfillment values of the input array&#39;s values. If any of the
528
- input array&#39;s promises are rejected, the returned promise will be rejected
529
- with the same reason.</p>
530
- <div><div class="fn-details"><div><b>Parameters</b></div><dl><dt>arr<code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array">Array</a>&lt;(T|<a href="class_webdriver_promise_Promise.html">webdriver.promise.Promise</a>&lt;T&gt;)&gt;</code><dd><p>An array of
531
- promises to wait on.</p>
532
- </dl></div><div class="fn-details"><div><b>Returns</b></div><dl><dt><code><a href="class_webdriver_promise_Promise.html">webdriver.promise.Promise</a>&lt;<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array">Array</a>&lt;T&gt;&gt;</code><dd><p>A promise that is
533
- fulfilled with an array containing the fulfilled values of the
534
- input array, or rejected with the same reason as the first
535
- rejected value.</p>
536
- </dl></div></div></div></div><hr class="fn-sep"><div id="asap" class="function"><div><h3>asap(<wbr>value, callback, opt_errback)<span class="codelink"><a href="source/lib/webdriver/promise.js.src.html#l1596">code »</a></span></h3><p>Invokes the appropriate callback function as soon as a promised
537
- <code>value</code> is resolved. This function is similar to
538
- <a href="namespace_webdriver_promise.html#when"><code>webdriver.promise.when</code></a>, except it does not return a new promise.</p>
539
- <div><div class="fn-details"><div><b>Parameters</b></div><dl><dt>value<code>*</code><dd><p>The value to observe.</p>
540
- <dt>callback<code>Function</code><dd><p>The function to call when the value is
541
- resolved successfully.</p>
542
- <dt>opt_errback<code>?Function=</code><dd><p>The function to call when the value is
543
- rejected.</p>
544
- </dl></div></div></div></div><hr class="fn-sep"><div id="captureStackTrace" class="function"><div><h3>captureStackTrace(<wbr>name, msg, topFn)<span class="codelink"><a href="source/lib/webdriver/promise.js.src.html#l687">code »</a></span></h3><p>Generates an error to capture the current stack trace.</p>
545
- <div><div class="fn-details"><div><b>Parameters</b></div><dl><dt>name<code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String">string</a></code><dd><p>Error name for this stack trace.</p>
546
- <dt>msg<code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String">string</a></code><dd><p>Message to record.</p>
547
- <dt>topFn<code>Function</code><dd><p>The function that should appear at the top of the
548
- stack; only applicable in V8.</p>
549
- </dl></div><div class="fn-details"><div><b>Returns</b></div><dl><dt><code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error">Error</a></code><dd><p>The generated error.</p>
550
- </dl></div></div></div></div><hr class="fn-sep"><div id="checkedNodeCall" class="function"><div><h3>checkedNodeCall(<wbr>fn, var_args)<span class="codelink"><a href="source/lib/webdriver/promise.js.src.html#l1549">code »</a></span></h3><p>Wraps a function that expects a node-style callback as its final
551
- argument. This callback expects two arguments: an error value (which will be
552
- null if the call succeeded), and the success value as the second argument.
553
- The callback will the resolve or reject the returned promise, based on its arguments.</p>
554
- <div><div class="fn-details"><div><b>Parameters</b></div><dl><dt>fn<code>Function</code><dd><p>The function to wrap.</p>
555
- <dt>var_args<code>...?</code><dd><p>The arguments to apply to the function, excluding the
556
- final callback.</p>
557
- </dl></div><div class="fn-details"><div><b>Returns</b></div><dl><dt><code><a href="class_webdriver_promise_Promise.html">webdriver.promise.Promise</a></code><dd><p>A promise that will be resolved with the
558
- result of the provided function&#39;s callback.</p>
559
- </dl></div></div></div></div><hr class="fn-sep"><div id="consume" class="function"><div><h3>consume(<wbr>generatorFn, opt_self, var_args)<span class="codelink"><a href="source/lib/webdriver/promise.js.src.html#l3007">code »</a></span></h3><p>Consumes a <code>GeneratorFunction</code>. Each time the generator yields a
560
- promise, this function will wait for it to be fulfilled before feeding the
561
- fulfilled value back into <code>next</code>. Likewise, if a yielded promise is
562
- rejected, the rejection error will be passed to <code>throw</code>.</p>
563
- <p><strong>Example 1:</strong> the Fibonacci Sequence.</p>
564
- <pre><code>promise.consume(function* fibonacci() {
565
- var n1 &#61; 1, n2 &#61; 1;
566
- for (var i &#61; 0; i &lt; 4; &#43;&#43;i) {
567
- var tmp &#61; yield n1 &#43; n2;
568
- n1 &#61; n2;
569
- n2 &#61; tmp;
570
- }
571
- return n1 &#43; n2;
572
- }).then(function(result) {
573
- console.log(result); // 13
574
- });
575
- </code></pre>
576
- <p><strong>Example 2:</strong> a generator that throws.</p>
577
- <pre><code>promise.consume(function* () {
578
- yield promise.delayed(250).then(function() {
579
- throw Error(&#39;boom&#39;);
580
- });
581
- }).thenCatch(function(e) {
582
- console.log(e.toString()); // Error: boom
583
- });
584
- </code></pre>
585
- <div><div class="fn-details"><div><b>Parameters</b></div><dl><dt>generatorFn<code>Function</code><dd><p>The generator function to execute.</p>
586
- <dt>opt_self<code>?<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object">Object</a>=</code><dd><p>The object to use as &#34;this&#34; when invoking the
587
- initial generator.</p>
588
- <dt>var_args<code>...*</code><dd><p>Any arguments to pass to the initial generator.</p>
589
- </dl></div><div class="fn-details"><div><b>Returns</b></div><dl><dt><code><a href="class_webdriver_promise_Promise.html">webdriver.promise.Promise</a>&lt;?&gt;</code><dd><p>A promise that will resolve to the
590
- generator&#39;s final result.</p>
591
- </dl></div><div class="fn-details"><div><b>Throws</b></div><dl><dt><code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError">TypeError</a></code><dd><p>If the given function is not a generator.</p>
592
- </dl></div></div></div></div><hr class="fn-sep"><div id="controlFlow" class="function"><div><h3>controlFlow()<span class="codelink"><a href="source/lib/webdriver/promise.js.src.html#l2936">code »</a></span></h3><div><div class="fn-details"><div><b>Returns</b></div><dl><dt><code><a href="class_webdriver_promise_ControlFlow.html">webdriver.promise.ControlFlow</a></code><dd><p>The currently active control flow.</p>
593
- </dl></div></div></div></div><hr class="fn-sep"><div id="createFlow" class="function"><div><h3>createFlow(<wbr>callback)<span class="codelink"><a href="source/lib/webdriver/promise.js.src.html#l2951">code »</a></span></h3><p>Creates a new control flow. The provided callback will be invoked as the
594
- first task within the new flow, with the flow as its sole argument. Returns
595
- a promise that resolves to the callback result.</p>
596
- <div><div class="fn-details"><div><b>Parameters</b></div><dl><dt>callback<code>function(<a href="class_webdriver_promise_ControlFlow.html">webdriver.promise.ControlFlow</a>): ?</code><dd><p>The entry point
597
- to the newly created flow.</p>
598
- </dl></div><div class="fn-details"><div><b>Returns</b></div><dl><dt><code><a href="class_webdriver_promise_Promise.html">webdriver.promise.Promise</a></code><dd><p>A promise that resolves to the callback
599
- result.</p>
600
- </dl></div></div></div></div><hr class="fn-sep"><div id="defer" class="function"><div><h3><code>&lt;T&gt;</code> defer()<span class="codelink"><a href="source/lib/webdriver/promise.js.src.html#l1500">code »</a></span></h3><p>Creates a new deferred object.</p>
601
- <div><div class="fn-details"><div><b>Returns</b></div><dl><dt><code><a href="class_webdriver_promise_Deferred.html">webdriver.promise.Deferred</a>&lt;T&gt;</code><dd><p>The new deferred object.</p>
602
- </dl></div></div></div></div><hr class="fn-sep"><div id="delayed" class="function"><div><h3>delayed(<wbr>ms)<span class="codelink"><a href="source/lib/webdriver/promise.js.src.html#l1480">code »</a></span></h3><p>Creates a promise that will be resolved at a set time in the future.</p>
603
- <div><div class="fn-details"><div><b>Parameters</b></div><dl><dt>ms<code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number">number</a></code><dd><p>The amount of time, in milliseconds, to wait before
604
- resolving the promise.</p>
605
- </dl></div><div class="fn-details"><div><b>Returns</b></div><dl><dt><code><a href="class_webdriver_promise_Promise.html">webdriver.promise.Promise</a></code><dd><p>The promise.</p>
606
- </dl></div></div></div></div><hr class="fn-sep"><div id="filter" class="function"><div><h3><code>&lt;TYPE, SELF&gt;</code> filter(<wbr>arr, fn, opt_self)<span class="codelink"><a href="source/lib/webdriver/promise.js.src.html#l1730">code »</a></span></h3><p>Calls a function for each element in an array, and if the function returns
607
- true adds the element to a new array.</p>
608
- <p>If the return value of the filter function is a promise, this function
609
- will wait for it to be fulfilled before determining whether to insert the
610
- element into the new array.</p>
611
- <p>If the filter function throws or returns a rejected promise, the promise
612
- returned by this function will be rejected with the same reason. Only the
613
- first failure will be reported; all subsequent errors will be silently
614
- ignored.</p>
615
- <div><div class="fn-details"><div><b>Parameters</b></div><dl><dt>arr<code>(<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array">Array</a>&lt;TYPE&gt;|<a href="class_webdriver_promise_Promise.html">webdriver.promise.Promise</a>&lt;<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array">Array</a>&lt;TYPE&gt;&gt;)</code><dd><p>The
616
- array to iterator over, or a promise that will resolve to said array.</p>
617
- <dt>fn<code>function(this: SELF, TYPE, <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number">number</a>, <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array">Array</a>&lt;TYPE&gt;): ?(<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean">boolean</a>|<a href="class_webdriver_promise_Promise.html">webdriver.promise.Promise</a>&lt;<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean">boolean</a>&gt;)</code><dd><p>The function
618
- to call for each element in the array.</p>
619
- <dt>opt_self<code>?SELF=</code><dd><p>The object to be used as the value of &#39;this&#39; within
620
- <code>fn</code>.</p>
621
- </dl></div></div></div></div><hr class="fn-sep"><div id="fulfilled" class="function"><div><h3><code>&lt;T&gt;</code> fulfilled(<wbr>opt_value)<span class="codelink"><a href="source/lib/webdriver/promise.js.src.html#l1511">code »</a></span></h3><p>Creates a promise that has been resolved with the given value.</p>
622
- <div><div class="fn-details"><div><b>Parameters</b></div><dl><dt>opt_value<code>?T=</code><dd><p>The resolved value.</p>
623
- </dl></div><div class="fn-details"><div><b>Returns</b></div><dl><dt><code><a href="class_webdriver_promise_Promise.html">webdriver.promise.Promise</a>&lt;T&gt;</code><dd><p>The resolved promise.</p>
624
- </dl></div></div></div></div><hr class="fn-sep"><div id="fullyResolved" class="function"><div><h3>fullyResolved(<wbr>value)<span class="codelink"><a href="source/lib/webdriver/promise.js.src.html#l1785">code »</a></span></h3><p>Returns a promise that will be resolved with the input value in a
625
- fully-resolved state. If the value is an array, each element will be fully
626
- resolved. Likewise, if the value is an object, all keys will be fully
627
- resolved. In both cases, all nested arrays and objects will also be
628
- fully resolved. All fields are resolved in place; the returned promise will
629
- resolve on <code>value</code> and not a copy.</p>
630
- <p>Warning: This function makes no checks against objects that contain
631
- cyclical references:</p>
632
- <pre><code>var value &#61; {};
633
- value[&#39;self&#39;] &#61; value;
634
- promise.fullyResolved(value); // Stack overflow.
635
- </code></pre>
636
- <div><div class="fn-details"><div><b>Parameters</b></div><dl><dt>value<code>*</code><dd><p>The value to fully resolve.</p>
637
- </dl></div><div class="fn-details"><div><b>Returns</b></div><dl><dt><code><a href="class_webdriver_promise_Promise.html">webdriver.promise.Promise</a></code><dd><p>A promise for a fully resolved version
638
- of the input value.</p>
639
- </dl></div></div></div></div><hr class="fn-sep"><div id="isGenerator" class="function"><div><h3>isGenerator(<wbr>fn)<span class="codelink"><a href="source/lib/webdriver/promise.js.src.html#l2964">code »</a></span></h3><p>Tests is a function is a generator.</p>
640
- <div><div class="fn-details"><div><b>Parameters</b></div><dl><dt>fn<code>Function</code><dd><p>The function to test.</p>
641
- </dl></div><div class="fn-details"><div><b>Returns</b></div><dl><dt><code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean">boolean</a></code><dd><p>Whether the function is a generator.</p>
642
- </dl></div></div></div></div><hr class="fn-sep"><div id="isPromise" class="function"><div><h3>isPromise(<wbr>value)<span class="codelink"><a href="source/lib/webdriver/promise.js.src.html#l1464">code »</a></span></h3><p>Determines whether a <code>value</code> should be treated as a promise.
643
- Any object whose &#34;then&#34; property is a function will be considered a promise.</p>
644
- <div><div class="fn-details"><div><b>Parameters</b></div><dl><dt>value<code>*</code><dd><p>The value to test.</p>
645
- </dl></div><div class="fn-details"><div><b>Returns</b></div><dl><dt><code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean">boolean</a></code><dd><p>Whether the value is a promise.</p>
646
- </dl></div></div></div></div><hr class="fn-sep"><div id="map" class="function"><div><h3><code>&lt;TYPE, SELF&gt;</code> map(<wbr>arr, fn, opt_self)<span class="codelink"><a href="source/lib/webdriver/promise.js.src.html#l1674">code »</a></span></h3><p>Calls a function for each element in an array and inserts the result into a
647
- new array, which is used as the fulfillment value of the promise returned
648
- by this function.</p>
649
- <p>If the return value of the mapping function is a promise, this function
650
- will wait for it to be fulfilled before inserting it into the new array.</p>
651
- <p>If the mapping function throws or returns a rejected promise, the
652
- promise returned by this function will be rejected with the same reason.
653
- Only the first failure will be reported; all subsequent errors will be
654
- silently ignored.</p>
655
- <div><div class="fn-details"><div><b>Parameters</b></div><dl><dt>arr<code>(<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array">Array</a>&lt;TYPE&gt;|<a href="class_webdriver_promise_Promise.html">webdriver.promise.Promise</a>&lt;<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array">Array</a>&lt;TYPE&gt;&gt;)</code><dd><p>The
656
- array to iterator over, or a promise that will resolve to said array.</p>
657
- <dt>fn<code>function(this: SELF, TYPE, <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number">number</a>, <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array">Array</a>&lt;TYPE&gt;): ?</code><dd><p>The
658
- function to call for each element in the array. This function should
659
- expect three arguments (the element, the index, and the array itself.</p>
660
- <dt>opt_self<code>?SELF=</code><dd><p>The object to be used as the value of &#39;this&#39; within
661
- <code>fn</code>.</p>
662
- </dl></div></div></div></div><hr class="fn-sep"><div id="rejected" class="function"><div><h3><code>&lt;T&gt;</code> rejected(<wbr>opt_reason)<span class="codelink"><a href="source/lib/webdriver/promise.js.src.html#l1528">code »</a></span></h3><p>Creates a promise that has been rejected with the given reason.</p>
663
- <div><div class="fn-details"><div><b>Parameters</b></div><dl><dt>opt_reason<code>*=</code><dd><p>The rejection reason; may be any value, but is
664
- usually an Error or a string.</p>
665
- </dl></div><div class="fn-details"><div><b>Returns</b></div><dl><dt><code><a href="class_webdriver_promise_Promise.html">webdriver.promise.Promise</a>&lt;T&gt;</code><dd><p>The rejected promise.</p>
666
- </dl></div></div></div></div><hr class="fn-sep"><div id="setDefaultFlow" class="function"><div><h3>setDefaultFlow(<wbr>flow)<span class="codelink"><a href="source/lib/webdriver/promise.js.src.html#l2925">code »</a></span></h3><p>Changes the default flow to use when no others are active.</p>
667
- <div><div class="fn-details"><div><b>Parameters</b></div><dl><dt>flow<code><a href="class_webdriver_promise_ControlFlow.html">webdriver.promise.ControlFlow</a></code><dd><p>The new default flow.</p>
668
- </dl></div><div class="fn-details"><div><b>Throws</b></div><dl><dt><code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error">Error</a></code><dd><p>If the default flow is not currently active.</p>
669
- </dl></div></div></div></div><hr class="fn-sep"><div id="when" class="function"><div><h3>when(<wbr>value, opt_callback, opt_errback)<span class="codelink"><a href="source/lib/webdriver/promise.js.src.html#l1575">code »</a></span></h3><p>Registers an observer on a promised <code>value</code>, returning a new promise
670
- that will be resolved when the value is. If <code>value</code> is not a promise,
671
- then the return promise will be immediately resolved.</p>
672
- <div><div class="fn-details"><div><b>Parameters</b></div><dl><dt>value<code>*</code><dd><p>The value to observe.</p>
673
- <dt>opt_callback<code>?Function=</code><dd><p>The function to call when the value is
674
- resolved successfully.</p>
675
- <dt>opt_errback<code>?Function=</code><dd><p>The function to call when the value is
676
- rejected.</p>
677
- </dl></div><div class="fn-details"><div><b>Returns</b></div><dl><dt><code><a href="class_webdriver_promise_Promise.html">webdriver.promise.Promise</a></code><dd><p>A new promise.</p>
678
- </dl></div></div></div></div><h2>Compiler Constants</h2><div id="LONG_STACK_TRACES" class="property"><dl><dt><a href="source/lib/webdriver/promise.js.src.html#l646">LONG_STACK_TRACES</a><code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean">boolean</a></code><dd><p>Whether to append traces of <code>then</code> to rejection
679
- errors.</p>
680
- </dl></div><h2>Types</h2><dl><dt><a href="class_webdriver_promise_CancellationError.html">CancellationError</a><dd><p>Error used when the computation of a promise is cancelled.</p>
681
- <dt><a href="class_webdriver_promise_ControlFlow.html">ControlFlow</a><dd><p>Handles the execution of scheduled tasks, each of which may be an
682
- asynchronous operation.</p>
683
- <dt><a href="class_webdriver_promise_Deferred.html">Deferred</a><dd><p>Represents a value that will be resolved at some point in the future.</p>
684
- <dt><a href="class_webdriver_promise_MultipleUnhandledRejectionError.html">MultipleUnhandledRejectionError</a><dd><p>Error used when there are multiple unhandled promise rejections detected
685
- within a task or callback.</p>
686
- <dt><a href="class_webdriver_promise_Promise.html">Promise</a><dd><p>Represents the eventual value of a completed operation.</p>
687
- <dt><a href="interface_webdriver_promise_Thenable.html">Thenable</a><dd><p>No description.</p>
688
- </dl></article><nav><h3><a href="index.html" tabindex="2">Overview</a></h3><div><input type="checkbox" id="nav-modules" checked/><label for="nav-modules"><h3><span class="selectable" tabindex="2">Modules</span></h3></label><div id="nav-modules-view"></div></div><div><input type="checkbox" id="nav-types" checked/><label for="nav-types"><h3><span class="selectable" tabindex="2">Types</span></h3></label><div id="nav-types-view"></div></div><h3><a href="Changes.html" tabindex="2">Changes</a></h3></nav></main><footer><div><a href="https://github.com/jleyba/js-dossier">Generated by dossier</a></div></footer><script src="types.js"></script><script src="dossier.js"></script>