selenium-webdriver 2.48.2 → 2.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (524) hide show
  1. package/CHANGES.md +57 -0
  2. package/NOTICE +1 -1
  3. package/README.md +56 -6
  4. package/builder.js +375 -358
  5. package/chrome.js +549 -586
  6. package/edge.js +378 -0
  7. package/error.js +597 -5
  8. package/example/google_search_generator.js +2 -4
  9. package/example/logging.js +6 -2
  10. package/executors.js +11 -27
  11. package/firefox/binary.js +79 -87
  12. package/firefox/extension.js +10 -18
  13. package/firefox/index.js +173 -173
  14. package/firefox/profile.js +220 -240
  15. package/http/index.js +396 -79
  16. package/http/util.js +35 -35
  17. package/ie.js +288 -309
  18. package/index.js +34 -125
  19. package/io/exec.js +58 -39
  20. package/io/index.js +54 -48
  21. package/lib/actions.js +594 -0
  22. package/lib/by.js +276 -0
  23. package/lib/capabilities.js +404 -0
  24. package/lib/{webdriver/command.js → command.js} +88 -72
  25. package/lib/{webdriver/button.js → devmode.js} +13 -8
  26. package/lib/events.js +210 -0
  27. package/lib/firefox/amd64/libnoblur64.so +0 -0
  28. package/lib/firefox/i386/libnoblur.so +0 -0
  29. package/lib/firefox/webdriver.json +5 -1
  30. package/lib/firefox/webdriver.xpi +0 -0
  31. package/lib/{webdriver/key.js → input.js} +82 -2
  32. package/lib/logging.js +668 -0
  33. package/lib/{webdriver/promise.js → promise.js} +688 -644
  34. package/lib/session.js +79 -0
  35. package/lib/{webdriver/serializable.js → symbols.js} +11 -16
  36. package/lib/test/build.js +4 -4
  37. package/lib/test/data/click_tests/html5_submit_buttons.html +2 -1
  38. package/lib/test/data/click_tests/overlapping_elements.html +15 -4
  39. package/lib/test/data/click_tests/partially_overlapping_elements.html +124 -0
  40. package/lib/test/data/click_tests/wrapped_overlapping_elements.html +13 -0
  41. package/lib/test/data/readOnlyPage.html +1 -1
  42. package/lib/test/data/selectPage.html +18 -2
  43. package/lib/test/fileserver.js +3 -4
  44. package/lib/test/index.js +7 -3
  45. package/lib/test/resources.js +1 -1
  46. package/lib/until.js +428 -0
  47. package/lib/webdriver.js +2351 -0
  48. package/net/portprober.js +15 -11
  49. package/opera.js +295 -314
  50. package/package.json +6 -5
  51. package/phantomjs.js +135 -140
  52. package/proxy.js +6 -4
  53. package/remote/index.js +229 -221
  54. package/safari.js +319 -310
  55. package/test/chrome/options_test.js +11 -9
  56. package/test/element_finding_test.js +51 -13
  57. package/test/error_test.js +163 -0
  58. package/test/execute_script_test.js +1 -1
  59. package/test/http/http_test.js +317 -55
  60. package/test/http/util_test.js +25 -23
  61. package/test/io_test.js +6 -1
  62. package/test/lib/by_test.js +127 -0
  63. package/test/lib/capabilities_test.js +84 -0
  64. package/test/lib/events_test.js +177 -0
  65. package/test/lib/logging_test.js +272 -0
  66. package/test/{promise_aplus_test.js → lib/promise_aplus_test.js} +4 -13
  67. package/test/lib/promise_error_test.js +808 -0
  68. package/test/lib/promise_flow_test.js +2282 -0
  69. package/test/lib/promise_generator_test.js +308 -0
  70. package/test/lib/promise_test.js +996 -0
  71. package/test/lib/testutil.js +90 -0
  72. package/test/lib/until_test.js +436 -0
  73. package/test/lib/webdriver_test.js +2207 -0
  74. package/test/page_loading_test.js +7 -9
  75. package/test/stale_element_test.js +2 -2
  76. package/test/testing/assert_test.js +374 -0
  77. package/test/testing/index_test.js +9 -11
  78. package/testing/assert.js +334 -17
  79. package/testing/index.js +10 -0
  80. package/_base.js +0 -200
  81. package/docs/Changes.html +0 -356
  82. package/docs/class_bot_Error.html +0 -15
  83. package/docs/class_webdriver_ActionSequence.html +0 -115
  84. package/docs/class_webdriver_Alert.html +0 -24
  85. package/docs/class_webdriver_AlertPromise.html +0 -92
  86. package/docs/class_webdriver_Capabilities.html +0 -60
  87. package/docs/class_webdriver_Command.html +0 -15
  88. package/docs/class_webdriver_EventEmitter.html +0 -35
  89. package/docs/class_webdriver_FileDetector.html +0 -21
  90. package/docs/class_webdriver_Locator.html +0 -12
  91. package/docs/class_webdriver_Serializable.html +0 -9
  92. package/docs/class_webdriver_Session.html +0 -13
  93. package/docs/class_webdriver_TouchSequence.html +0 -49
  94. package/docs/class_webdriver_UnhandledAlertError.html +0 -18
  95. package/docs/class_webdriver_WebDriver.html +0 -313
  96. package/docs/class_webdriver_WebDriver_Logs.html +0 -15
  97. package/docs/class_webdriver_WebDriver_Navigation.html +0 -16
  98. package/docs/class_webdriver_WebDriver_Options.html +0 -41
  99. package/docs/class_webdriver_WebDriver_TargetLocator.html +0 -38
  100. package/docs/class_webdriver_WebDriver_Timeouts.html +0 -29
  101. package/docs/class_webdriver_WebDriver_Window.html +0 -27
  102. package/docs/class_webdriver_WebElement.html +0 -223
  103. package/docs/class_webdriver_WebElementPromise.html +0 -274
  104. package/docs/class_webdriver_http_Executor.html +0 -22
  105. package/docs/class_webdriver_http_Request.html +0 -12
  106. package/docs/class_webdriver_http_Response.html +0 -13
  107. package/docs/class_webdriver_logging_Entry.html +0 -15
  108. package/docs/class_webdriver_logging_Level.html +0 -55
  109. package/docs/class_webdriver_logging_LogRecord.html +0 -45
  110. package/docs/class_webdriver_logging_Logger.html +0 -119
  111. package/docs/class_webdriver_logging_Preferences.html +0 -8
  112. package/docs/class_webdriver_promise_CancellationError.html +0 -17
  113. package/docs/class_webdriver_promise_ControlFlow.html +0 -153
  114. package/docs/class_webdriver_promise_Deferred.html +0 -84
  115. package/docs/class_webdriver_promise_MultipleUnhandledRejectionError.html +0 -14
  116. package/docs/class_webdriver_promise_Promise.html +0 -75
  117. package/docs/class_webdriver_stacktrace_Frame.html +0 -20
  118. package/docs/class_webdriver_stacktrace_Snapshot.html +0 -6
  119. package/docs/class_webdriver_testing_Assertion.html +0 -99
  120. package/docs/class_webdriver_testing_Assertion_DelegatingMatcher_.html +0 -13
  121. package/docs/class_webdriver_testing_ContainsMatcher.html +0 -11
  122. package/docs/class_webdriver_testing_NegatedAssertion.html +0 -97
  123. package/docs/class_webdriver_until_Condition.html +0 -7
  124. package/docs/dossier.css +0 -1
  125. package/docs/dossier.js +0 -86
  126. package/docs/enum_bot_ErrorCode.html +0 -3
  127. package/docs/enum_bot_Error_State.html +0 -2
  128. package/docs/enum_webdriver_Browser.html +0 -2
  129. package/docs/enum_webdriver_Button.html +0 -2
  130. package/docs/enum_webdriver_Capability.html +0 -33
  131. package/docs/enum_webdriver_CommandName.html +0 -3
  132. package/docs/enum_webdriver_Key.html +0 -12
  133. package/docs/enum_webdriver_logging_Type.html +0 -6
  134. package/docs/enum_webdriver_promise_ControlFlow_EventType.html +0 -9
  135. package/docs/index.html +0 -125
  136. package/docs/interface_webdriver_CommandExecutor.html +0 -9
  137. package/docs/interface_webdriver_http_Client.html +0 -10
  138. package/docs/interface_webdriver_promise_Thenable.html +0 -77
  139. package/docs/module_selenium-webdriver.html +0 -23
  140. package/docs/module_selenium-webdriver__base.html +0 -23
  141. package/docs/module_selenium-webdriver__base_class_Context.html +0 -5
  142. package/docs/module_selenium-webdriver_builder.html +0 -2
  143. package/docs/module_selenium-webdriver_builder_class_Builder.html +0 -138
  144. package/docs/module_selenium-webdriver_chrome.html +0 -90
  145. package/docs/module_selenium-webdriver_chrome_class_Driver.html +0 -280
  146. package/docs/module_selenium-webdriver_chrome_class_Options.html +0 -127
  147. package/docs/module_selenium-webdriver_chrome_class_ServiceBuilder.html +0 -46
  148. package/docs/module_selenium-webdriver_class_ActionSequence.html +0 -115
  149. package/docs/module_selenium-webdriver_class_Builder.html +0 -138
  150. package/docs/module_selenium-webdriver_class_Capabilities.html +0 -60
  151. package/docs/module_selenium-webdriver_class_Command.html +0 -15
  152. package/docs/module_selenium-webdriver_class_EventEmitter.html +0 -35
  153. package/docs/module_selenium-webdriver_class_FileDetector.html +0 -21
  154. package/docs/module_selenium-webdriver_class_Serializable.html +0 -9
  155. package/docs/module_selenium-webdriver_class_Session.html +0 -13
  156. package/docs/module_selenium-webdriver_class_WebDriver.html +0 -313
  157. package/docs/module_selenium-webdriver_class_WebElement.html +0 -223
  158. package/docs/module_selenium-webdriver_class_WebElementPromise.html +0 -274
  159. package/docs/module_selenium-webdriver_enum_Browser.html +0 -2
  160. package/docs/module_selenium-webdriver_enum_Button.html +0 -2
  161. package/docs/module_selenium-webdriver_enum_Capability.html +0 -33
  162. package/docs/module_selenium-webdriver_enum_CommandName.html +0 -3
  163. package/docs/module_selenium-webdriver_enum_Key.html +0 -12
  164. package/docs/module_selenium-webdriver_error.html +0 -4
  165. package/docs/module_selenium-webdriver_error_class_Error.html +0 -15
  166. package/docs/module_selenium-webdriver_error_enum_ErrorCode.html +0 -3
  167. package/docs/module_selenium-webdriver_executors.html +0 -10
  168. package/docs/module_selenium-webdriver_executors_class_DeferredExecutor.html +0 -12
  169. package/docs/module_selenium-webdriver_firefox.html +0 -68
  170. package/docs/module_selenium-webdriver_firefox_binary.html +0 -5
  171. package/docs/module_selenium-webdriver_firefox_binary_class_Binary.html +0 -20
  172. package/docs/module_selenium-webdriver_firefox_class_Binary.html +0 -20
  173. package/docs/module_selenium-webdriver_firefox_class_Driver.html +0 -276
  174. package/docs/module_selenium-webdriver_firefox_class_Options.html +0 -19
  175. package/docs/module_selenium-webdriver_firefox_class_Profile.html +0 -50
  176. package/docs/module_selenium-webdriver_firefox_extension.html +0 -8
  177. package/docs/module_selenium-webdriver_firefox_profile.html +0 -13
  178. package/docs/module_selenium-webdriver_firefox_profile_class_Profile.html +0 -50
  179. package/docs/module_selenium-webdriver_http.html +0 -9
  180. package/docs/module_selenium-webdriver_http_class_Executor.html +0 -22
  181. package/docs/module_selenium-webdriver_http_class_HttpClient.html +0 -16
  182. package/docs/module_selenium-webdriver_http_class_Request.html +0 -12
  183. package/docs/module_selenium-webdriver_http_class_Response.html +0 -13
  184. package/docs/module_selenium-webdriver_http_util.html +0 -17
  185. package/docs/module_selenium-webdriver_ie.html +0 -11
  186. package/docs/module_selenium-webdriver_ie_class_Driver.html +0 -274
  187. package/docs/module_selenium-webdriver_ie_class_Options.html +0 -89
  188. package/docs/module_selenium-webdriver_ie_enum_Level.html +0 -1
  189. package/docs/module_selenium-webdriver_io.html +0 -37
  190. package/docs/module_selenium-webdriver_io_exec.html +0 -6
  191. package/docs/module_selenium-webdriver_namespace_By.html +0 -56
  192. package/docs/module_selenium-webdriver_namespace_error.html +0 -4
  193. package/docs/module_selenium-webdriver_namespace_logging.html +0 -18
  194. package/docs/module_selenium-webdriver_namespace_promise.html +0 -163
  195. package/docs/module_selenium-webdriver_namespace_stacktrace.html +0 -17
  196. package/docs/module_selenium-webdriver_namespace_until.html +0 -82
  197. package/docs/module_selenium-webdriver_net.html +0 -7
  198. package/docs/module_selenium-webdriver_net_portprober.html +0 -12
  199. package/docs/module_selenium-webdriver_opera.html +0 -62
  200. package/docs/module_selenium-webdriver_opera_class_Driver.html +0 -276
  201. package/docs/module_selenium-webdriver_opera_class_Options.html +0 -44
  202. package/docs/module_selenium-webdriver_opera_class_ServiceBuilder.html +0 -35
  203. package/docs/module_selenium-webdriver_phantomjs.html +0 -2
  204. package/docs/module_selenium-webdriver_phantomjs_class_Driver.html +0 -299
  205. package/docs/module_selenium-webdriver_proxy.html +0 -28
  206. package/docs/module_selenium-webdriver_remote.html +0 -8
  207. package/docs/module_selenium-webdriver_remote_class_DriverService.html +0 -32
  208. package/docs/module_selenium-webdriver_remote_class_FileDetector.html +0 -22
  209. package/docs/module_selenium-webdriver_remote_class_SeleniumServer.html +0 -41
  210. package/docs/module_selenium-webdriver_safari.html +0 -9
  211. package/docs/module_selenium-webdriver_safari_class_Driver.html +0 -279
  212. package/docs/module_selenium-webdriver_safari_class_Options.html +0 -23
  213. package/docs/module_selenium-webdriver_testing.html +0 -74
  214. package/docs/module_selenium-webdriver_testing_assert.html +0 -9
  215. package/docs/namespace_bot.html +0 -4
  216. package/docs/namespace_bot_json.html +0 -20
  217. package/docs/namespace_bot_response.html +0 -18
  218. package/docs/namespace_bot_userAgent.html +0 -33
  219. package/docs/namespace_webdriver.html +0 -30
  220. package/docs/namespace_webdriver_By.html +0 -56
  221. package/docs/namespace_webdriver_http.html +0 -6
  222. package/docs/namespace_webdriver_logging.html +0 -70
  223. package/docs/namespace_webdriver_promise.html +0 -688
  224. package/docs/namespace_webdriver_stacktrace.html +0 -17
  225. package/docs/namespace_webdriver_testing.html +0 -7
  226. package/docs/namespace_webdriver_testing_assert.html +0 -9
  227. package/docs/namespace_webdriver_testing_asserts.html +0 -18
  228. package/docs/namespace_webdriver_until.html +0 -82
  229. package/docs/source/_base.js.src.html +0 -1
  230. package/docs/source/builder.js.src.html +0 -1
  231. package/docs/source/chrome.js.src.html +0 -1
  232. package/docs/source/error.js.src.html +0 -1
  233. package/docs/source/executors.js.src.html +0 -1
  234. package/docs/source/firefox/binary.js.src.html +0 -1
  235. package/docs/source/firefox/extension.js.src.html +0 -1
  236. package/docs/source/firefox/index.js.src.html +0 -1
  237. package/docs/source/firefox/profile.js.src.html +0 -1
  238. package/docs/source/http/index.js.src.html +0 -1
  239. package/docs/source/http/util.js.src.html +0 -1
  240. package/docs/source/ie.js.src.html +0 -1
  241. package/docs/source/index.js.src.html +0 -1
  242. package/docs/source/io/exec.js.src.html +0 -1
  243. package/docs/source/io/index.js.src.html +0 -1
  244. package/docs/source/lib/atoms/error.js.src.html +0 -1
  245. package/docs/source/lib/atoms/json.js.src.html +0 -1
  246. package/docs/source/lib/atoms/response.js.src.html +0 -1
  247. package/docs/source/lib/atoms/userAgent.js.src.html +0 -1
  248. package/docs/source/lib/goog/array/array.js.src.html +0 -1
  249. package/docs/source/lib/goog/asserts/asserts.js.src.html +0 -1
  250. package/docs/source/lib/goog/async/freelist.js.src.html +0 -1
  251. package/docs/source/lib/goog/async/nexttick.js.src.html +0 -1
  252. package/docs/source/lib/goog/async/run.js.src.html +0 -1
  253. package/docs/source/lib/goog/async/workqueue.js.src.html +0 -1
  254. package/docs/source/lib/goog/base.js.src.html +0 -1
  255. package/docs/source/lib/goog/debug/debug.js.src.html +0 -1
  256. package/docs/source/lib/goog/debug/entrypointregistry.js.src.html +0 -1
  257. package/docs/source/lib/goog/debug/error.js.src.html +0 -1
  258. package/docs/source/lib/goog/debug/logbuffer.js.src.html +0 -1
  259. package/docs/source/lib/goog/debug/logger.js.src.html +0 -1
  260. package/docs/source/lib/goog/debug/logrecord.js.src.html +0 -1
  261. package/docs/source/lib/goog/deps.js.src.html +0 -1
  262. package/docs/source/lib/goog/disposable/disposable.js.src.html +0 -1
  263. package/docs/source/lib/goog/disposable/idisposable.js.src.html +0 -1
  264. package/docs/source/lib/goog/dom/browserfeature.js.src.html +0 -1
  265. package/docs/source/lib/goog/dom/dom.js.src.html +0 -1
  266. package/docs/source/lib/goog/dom/nodetype.js.src.html +0 -1
  267. package/docs/source/lib/goog/dom/safe.js.src.html +0 -1
  268. package/docs/source/lib/goog/dom/tagname.js.src.html +0 -1
  269. package/docs/source/lib/goog/dom/tags.js.src.html +0 -1
  270. package/docs/source/lib/goog/dom/vendor.js.src.html +0 -1
  271. package/docs/source/lib/goog/events/browserevent.js.src.html +0 -1
  272. package/docs/source/lib/goog/events/browserfeature.js.src.html +0 -1
  273. package/docs/source/lib/goog/events/event.js.src.html +0 -1
  274. package/docs/source/lib/goog/events/eventid.js.src.html +0 -1
  275. package/docs/source/lib/goog/events/events.js.src.html +0 -1
  276. package/docs/source/lib/goog/events/eventtarget.js.src.html +0 -1
  277. package/docs/source/lib/goog/events/eventtype.js.src.html +0 -1
  278. package/docs/source/lib/goog/events/keycodes.js.src.html +0 -1
  279. package/docs/source/lib/goog/events/listenable.js.src.html +0 -1
  280. package/docs/source/lib/goog/events/listener.js.src.html +0 -1
  281. package/docs/source/lib/goog/events/listenermap.js.src.html +0 -1
  282. package/docs/source/lib/goog/fs/url.js.src.html +0 -1
  283. package/docs/source/lib/goog/functions/functions.js.src.html +0 -1
  284. package/docs/source/lib/goog/html/safehtml.js.src.html +0 -1
  285. package/docs/source/lib/goog/html/safescript.js.src.html +0 -1
  286. package/docs/source/lib/goog/html/safestyle.js.src.html +0 -1
  287. package/docs/source/lib/goog/html/safestylesheet.js.src.html +0 -1
  288. package/docs/source/lib/goog/html/safeurl.js.src.html +0 -1
  289. package/docs/source/lib/goog/html/trustedresourceurl.js.src.html +0 -1
  290. package/docs/source/lib/goog/html/uncheckedconversions.js.src.html +0 -1
  291. package/docs/source/lib/goog/i18n/bidi.js.src.html +0 -1
  292. package/docs/source/lib/goog/iter/iter.js.src.html +0 -1
  293. package/docs/source/lib/goog/json/json.js.src.html +0 -1
  294. package/docs/source/lib/goog/labs/testing/assertthat.js.src.html +0 -1
  295. package/docs/source/lib/goog/labs/testing/logicmatcher.js.src.html +0 -1
  296. package/docs/source/lib/goog/labs/testing/matcher.js.src.html +0 -1
  297. package/docs/source/lib/goog/labs/testing/numbermatcher.js.src.html +0 -1
  298. package/docs/source/lib/goog/labs/testing/objectmatcher.js.src.html +0 -1
  299. package/docs/source/lib/goog/labs/testing/stringmatcher.js.src.html +0 -1
  300. package/docs/source/lib/goog/labs/useragent/browser.js.src.html +0 -1
  301. package/docs/source/lib/goog/labs/useragent/engine.js.src.html +0 -1
  302. package/docs/source/lib/goog/labs/useragent/platform.js.src.html +0 -1
  303. package/docs/source/lib/goog/labs/useragent/util.js.src.html +0 -1
  304. package/docs/source/lib/goog/log/log.js.src.html +0 -1
  305. package/docs/source/lib/goog/math/box.js.src.html +0 -1
  306. package/docs/source/lib/goog/math/coordinate.js.src.html +0 -1
  307. package/docs/source/lib/goog/math/math.js.src.html +0 -1
  308. package/docs/source/lib/goog/math/rect.js.src.html +0 -1
  309. package/docs/source/lib/goog/math/size.js.src.html +0 -1
  310. package/docs/source/lib/goog/net/wrapperxmlhttpfactory.js.src.html +0 -1
  311. package/docs/source/lib/goog/net/xhrlike.js.src.html +0 -1
  312. package/docs/source/lib/goog/net/xmlhttp.js.src.html +0 -1
  313. package/docs/source/lib/goog/net/xmlhttpfactory.js.src.html +0 -1
  314. package/docs/source/lib/goog/object/object.js.src.html +0 -1
  315. package/docs/source/lib/goog/promise/promise.js.src.html +0 -1
  316. package/docs/source/lib/goog/promise/resolver.js.src.html +0 -1
  317. package/docs/source/lib/goog/promise/thenable.js.src.html +0 -1
  318. package/docs/source/lib/goog/reflect/reflect.js.src.html +0 -1
  319. package/docs/source/lib/goog/string/const.js.src.html +0 -1
  320. package/docs/source/lib/goog/string/string.js.src.html +0 -1
  321. package/docs/source/lib/goog/string/typedstring.js.src.html +0 -1
  322. package/docs/source/lib/goog/structs/collection.js.src.html +0 -1
  323. package/docs/source/lib/goog/structs/map.js.src.html +0 -1
  324. package/docs/source/lib/goog/structs/set.js.src.html +0 -1
  325. package/docs/source/lib/goog/structs/structs.js.src.html +0 -1
  326. package/docs/source/lib/goog/style/style.js.src.html +0 -1
  327. package/docs/source/lib/goog/testing/asserts.js.src.html +0 -1
  328. package/docs/source/lib/goog/testing/events/events.js.src.html +0 -1
  329. package/docs/source/lib/goog/testing/functionmock.js.src.html +0 -1
  330. package/docs/source/lib/goog/testing/jsunit.js.src.html +0 -1
  331. package/docs/source/lib/goog/testing/loosemock.js.src.html +0 -1
  332. package/docs/source/lib/goog/testing/mock.js.src.html +0 -1
  333. package/docs/source/lib/goog/testing/mockclock.js.src.html +0 -1
  334. package/docs/source/lib/goog/testing/mockcontrol.js.src.html +0 -1
  335. package/docs/source/lib/goog/testing/mockinterface.js.src.html +0 -1
  336. package/docs/source/lib/goog/testing/mockmatchers.js.src.html +0 -1
  337. package/docs/source/lib/goog/testing/objectpropertystring.js.src.html +0 -1
  338. package/docs/source/lib/goog/testing/propertyreplacer.js.src.html +0 -1
  339. package/docs/source/lib/goog/testing/recordfunction.js.src.html +0 -1
  340. package/docs/source/lib/goog/testing/stacktrace.js.src.html +0 -1
  341. package/docs/source/lib/goog/testing/strictmock.js.src.html +0 -1
  342. package/docs/source/lib/goog/testing/testcase.js.src.html +0 -1
  343. package/docs/source/lib/goog/testing/testrunner.js.src.html +0 -1
  344. package/docs/source/lib/goog/uri/uri.js.src.html +0 -1
  345. package/docs/source/lib/goog/uri/utils.js.src.html +0 -1
  346. package/docs/source/lib/goog/useragent/product.js.src.html +0 -1
  347. package/docs/source/lib/goog/useragent/product_isversion.js.src.html +0 -1
  348. package/docs/source/lib/goog/useragent/useragent.js.src.html +0 -1
  349. package/docs/source/lib/webdriver/actionsequence.js.src.html +0 -1
  350. package/docs/source/lib/webdriver/button.js.src.html +0 -1
  351. package/docs/source/lib/webdriver/capabilities.js.src.html +0 -1
  352. package/docs/source/lib/webdriver/command.js.src.html +0 -1
  353. package/docs/source/lib/webdriver/events.js.src.html +0 -1
  354. package/docs/source/lib/webdriver/http/http.js.src.html +0 -1
  355. package/docs/source/lib/webdriver/key.js.src.html +0 -1
  356. package/docs/source/lib/webdriver/locators.js.src.html +0 -1
  357. package/docs/source/lib/webdriver/logging.js.src.html +0 -1
  358. package/docs/source/lib/webdriver/promise.js.src.html +0 -1
  359. package/docs/source/lib/webdriver/serializable.js.src.html +0 -1
  360. package/docs/source/lib/webdriver/session.js.src.html +0 -1
  361. package/docs/source/lib/webdriver/stacktrace.js.src.html +0 -1
  362. package/docs/source/lib/webdriver/testing/asserts.js.src.html +0 -1
  363. package/docs/source/lib/webdriver/touchsequence.js.src.html +0 -1
  364. package/docs/source/lib/webdriver/until.js.src.html +0 -1
  365. package/docs/source/lib/webdriver/webdriver.js.src.html +0 -1
  366. package/docs/source/net/index.js.src.html +0 -1
  367. package/docs/source/net/portprober.js.src.html +0 -1
  368. package/docs/source/opera.js.src.html +0 -1
  369. package/docs/source/phantomjs.js.src.html +0 -1
  370. package/docs/source/proxy.js.src.html +0 -1
  371. package/docs/source/remote/index.js.src.html +0 -1
  372. package/docs/source/safari.js.src.html +0 -1
  373. package/docs/source/testing/assert.js.src.html +0 -1
  374. package/docs/source/testing/index.js.src.html +0 -1
  375. package/docs/types.js +0 -1
  376. package/lib/atoms/error.js +0 -202
  377. package/lib/atoms/json.js +0 -80
  378. package/lib/atoms/response.js +0 -110
  379. package/lib/atoms/userAgent.js +0 -257
  380. package/lib/goog/LICENSE +0 -176
  381. package/lib/goog/array/array.js +0 -1654
  382. package/lib/goog/asserts/asserts.js +0 -365
  383. package/lib/goog/async/freelist.js +0 -88
  384. package/lib/goog/async/nexttick.js +0 -241
  385. package/lib/goog/async/run.js +0 -133
  386. package/lib/goog/async/workqueue.js +0 -139
  387. package/lib/goog/base.js +0 -2548
  388. package/lib/goog/debug/debug.js +0 -653
  389. package/lib/goog/debug/entrypointregistry.js +0 -158
  390. package/lib/goog/debug/error.js +0 -63
  391. package/lib/goog/debug/logbuffer.js +0 -148
  392. package/lib/goog/debug/logger.js +0 -873
  393. package/lib/goog/debug/logrecord.js +0 -242
  394. package/lib/goog/deps.js +0 -151
  395. package/lib/goog/disposable/disposable.js +0 -307
  396. package/lib/goog/disposable/idisposable.js +0 -45
  397. package/lib/goog/dom/browserfeature.js +0 -72
  398. package/lib/goog/dom/dom.js +0 -2991
  399. package/lib/goog/dom/nodetype.js +0 -48
  400. package/lib/goog/dom/safe.js +0 -347
  401. package/lib/goog/dom/tagname.js +0 -160
  402. package/lib/goog/dom/tags.js +0 -41
  403. package/lib/goog/dom/vendor.js +0 -96
  404. package/lib/goog/events/browserevent.js +0 -400
  405. package/lib/goog/events/browserfeature.js +0 -85
  406. package/lib/goog/events/event.js +0 -143
  407. package/lib/goog/events/eventid.js +0 -47
  408. package/lib/goog/events/events.js +0 -984
  409. package/lib/goog/events/eventtarget.js +0 -394
  410. package/lib/goog/events/eventtype.js +0 -237
  411. package/lib/goog/events/keycodes.js +0 -427
  412. package/lib/goog/events/listenable.js +0 -335
  413. package/lib/goog/events/listener.js +0 -131
  414. package/lib/goog/events/listenermap.js +0 -308
  415. package/lib/goog/fs/url.js +0 -109
  416. package/lib/goog/functions/functions.js +0 -442
  417. package/lib/goog/html/safehtml.js +0 -757
  418. package/lib/goog/html/safescript.js +0 -234
  419. package/lib/goog/html/safestyle.js +0 -442
  420. package/lib/goog/html/safestylesheet.js +0 -276
  421. package/lib/goog/html/safeurl.js +0 -398
  422. package/lib/goog/html/trustedresourceurl.js +0 -224
  423. package/lib/goog/html/uncheckedconversions.js +0 -232
  424. package/lib/goog/i18n/bidi.js +0 -908
  425. package/lib/goog/iter/iter.js +0 -1302
  426. package/lib/goog/json/json.js +0 -363
  427. package/lib/goog/labs/testing/assertthat.js +0 -58
  428. package/lib/goog/labs/testing/logicmatcher.js +0 -212
  429. package/lib/goog/labs/testing/matcher.js +0 -80
  430. package/lib/goog/labs/testing/numbermatcher.js +0 -346
  431. package/lib/goog/labs/testing/objectmatcher.js +0 -317
  432. package/lib/goog/labs/testing/stringmatcher.js +0 -415
  433. package/lib/goog/labs/useragent/browser.js +0 -341
  434. package/lib/goog/labs/useragent/engine.js +0 -160
  435. package/lib/goog/labs/useragent/platform.js +0 -160
  436. package/lib/goog/labs/useragent/util.js +0 -148
  437. package/lib/goog/log/log.js +0 -197
  438. package/lib/goog/math/box.js +0 -398
  439. package/lib/goog/math/coordinate.js +0 -268
  440. package/lib/goog/math/math.js +0 -451
  441. package/lib/goog/math/rect.js +0 -476
  442. package/lib/goog/math/size.js +0 -227
  443. package/lib/goog/net/wrapperxmlhttpfactory.js +0 -71
  444. package/lib/goog/net/xhrlike.js +0 -124
  445. package/lib/goog/net/xmlhttp.js +0 -246
  446. package/lib/goog/net/xmlhttpfactory.js +0 -67
  447. package/lib/goog/object/object.js +0 -686
  448. package/lib/goog/promise/promise.js +0 -1350
  449. package/lib/goog/promise/resolver.js +0 -48
  450. package/lib/goog/promise/thenable.js +0 -126
  451. package/lib/goog/reflect/reflect.js +0 -77
  452. package/lib/goog/string/const.js +0 -182
  453. package/lib/goog/string/string.js +0 -1599
  454. package/lib/goog/string/typedstring.js +0 -48
  455. package/lib/goog/structs/collection.js +0 -56
  456. package/lib/goog/structs/map.js +0 -457
  457. package/lib/goog/structs/set.js +0 -279
  458. package/lib/goog/structs/structs.js +0 -354
  459. package/lib/goog/style/style.js +0 -2037
  460. package/lib/goog/testing/asserts.js +0 -1278
  461. package/lib/goog/testing/events/events.js +0 -767
  462. package/lib/goog/testing/functionmock.js +0 -175
  463. package/lib/goog/testing/jsunit.js +0 -162
  464. package/lib/goog/testing/loosemock.js +0 -242
  465. package/lib/goog/testing/mock.js +0 -645
  466. package/lib/goog/testing/mockclock.js +0 -606
  467. package/lib/goog/testing/mockcontrol.js +0 -220
  468. package/lib/goog/testing/mockinterface.js +0 -45
  469. package/lib/goog/testing/mockmatchers.js +0 -400
  470. package/lib/goog/testing/objectpropertystring.js +0 -68
  471. package/lib/goog/testing/propertyreplacer.js +0 -262
  472. package/lib/goog/testing/recordfunction.js +0 -215
  473. package/lib/goog/testing/stacktrace.js +0 -594
  474. package/lib/goog/testing/strictmock.js +0 -130
  475. package/lib/goog/testing/testcase.js +0 -1629
  476. package/lib/goog/testing/testrunner.js +0 -440
  477. package/lib/goog/uri/uri.js +0 -1524
  478. package/lib/goog/uri/utils.js +0 -1064
  479. package/lib/goog/useragent/product.js +0 -183
  480. package/lib/goog/useragent/product_isversion.js +0 -144
  481. package/lib/goog/useragent/useragent.js +0 -572
  482. package/lib/webdriver/actionsequence.js +0 -356
  483. package/lib/webdriver/builder.js +0 -207
  484. package/lib/webdriver/capabilities.js +0 -412
  485. package/lib/webdriver/events.js +0 -179
  486. package/lib/webdriver/firefoxdomexecutor.js +0 -175
  487. package/lib/webdriver/http/corsclient.js +0 -133
  488. package/lib/webdriver/http/http.js +0 -525
  489. package/lib/webdriver/http/xhrclient.js +0 -67
  490. package/lib/webdriver/locators.js +0 -257
  491. package/lib/webdriver/logging.js +0 -347
  492. package/lib/webdriver/session.js +0 -74
  493. package/lib/webdriver/stacktrace.js +0 -619
  494. package/lib/webdriver/test/builder_test.js +0 -53
  495. package/lib/webdriver/test/capabilities_test.js +0 -72
  496. package/lib/webdriver/test/events_test.js +0 -203
  497. package/lib/webdriver/test/http/corsclient_test.js +0 -151
  498. package/lib/webdriver/test/http/http_test.js +0 -428
  499. package/lib/webdriver/test/http/xhrclient_test.js +0 -196
  500. package/lib/webdriver/test/locators_test.js +0 -59
  501. package/lib/webdriver/test/logging_test.js +0 -85
  502. package/lib/webdriver/test/promise_error_test.js +0 -892
  503. package/lib/webdriver/test/promise_flow_test.js +0 -2365
  504. package/lib/webdriver/test/promise_generator_test.js +0 -323
  505. package/lib/webdriver/test/promise_test.js +0 -2012
  506. package/lib/webdriver/test/stacktrace_test.js +0 -480
  507. package/lib/webdriver/test/test_bootstrap.js +0 -67
  508. package/lib/webdriver/test/testing/asserts_test.js +0 -117
  509. package/lib/webdriver/test/testing/client_test.js +0 -88
  510. package/lib/webdriver/test/testing/testcase_test.js +0 -229
  511. package/lib/webdriver/test/testutil.js +0 -209
  512. package/lib/webdriver/test/testutil_test.js +0 -104
  513. package/lib/webdriver/test/until_test.js +0 -411
  514. package/lib/webdriver/test/webdriver_generator_test.js +0 -92
  515. package/lib/webdriver/test/webdriver_test.js +0 -2369
  516. package/lib/webdriver/testing/asserts.js +0 -487
  517. package/lib/webdriver/testing/client.js +0 -179
  518. package/lib/webdriver/testing/jsunit.js +0 -363
  519. package/lib/webdriver/testing/testcase.js +0 -168
  520. package/lib/webdriver/testing/window.js +0 -244
  521. package/lib/webdriver/touchsequence.js +0 -248
  522. package/lib/webdriver/until.js +0 -412
  523. package/lib/webdriver/webdriver.js +0 -2511
  524. package/test/_base_test.js +0 -129
@@ -1 +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>useragent.js</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 class="srcfile"><h1>lib/goog/useragent/useragent.js</h1><div><table><tr><td><a id="l1"></a><a href="#l1">1</a><td>// Copyright 2006 The Closure Library Authors. All Rights Reserved.<tr><td><a id="l2"></a><a href="#l2">2</a><td>//<tr><td><a id="l3"></a><a href="#l3">3</a><td>// Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);<tr><td><a id="l4"></a><a href="#l4">4</a><td>// you may not use this file except in compliance with the License.<tr><td><a id="l5"></a><a href="#l5">5</a><td>// You may obtain a copy of the License at<tr><td><a id="l6"></a><a href="#l6">6</a><td>//<tr><td><a id="l7"></a><a href="#l7">7</a><td>// http://www.apache.org/licenses/LICENSE-2.0<tr><td><a id="l8"></a><a href="#l8">8</a><td>//<tr><td><a id="l9"></a><a href="#l9">9</a><td>// Unless required by applicable law or agreed to in writing, software<tr><td><a id="l10"></a><a href="#l10">10</a><td>// distributed under the License is distributed on an &quot;AS-IS&quot; BASIS,<tr><td><a id="l11"></a><a href="#l11">11</a><td>// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<tr><td><a id="l12"></a><a href="#l12">12</a><td>// See the License for the specific language governing permissions and<tr><td><a id="l13"></a><a href="#l13">13</a><td>// limitations under the License.<tr><td><a id="l14"></a><a href="#l14">14</a><td><tr><td><a id="l15"></a><a href="#l15">15</a><td>/**<tr><td><a id="l16"></a><a href="#l16">16</a><td> * @fileoverview Rendering engine detection.<tr><td><a id="l17"></a><a href="#l17">17</a><td> * @see &lt;a href=&quot;http://www.useragentstring.com/&quot;&gt;User agent strings&lt;/a&gt;<tr><td><a id="l18"></a><a href="#l18">18</a><td> * For information on the browser brand (such as Safari versus Chrome), see<tr><td><a id="l19"></a><a href="#l19">19</a><td> * goog.userAgent.product.<tr><td><a id="l20"></a><a href="#l20">20</a><td> * @author arv@google.com (Erik Arvidsson)<tr><td><a id="l21"></a><a href="#l21">21</a><td> * @see ../demos/useragent.html<tr><td><a id="l22"></a><a href="#l22">22</a><td> */<tr><td><a id="l23"></a><a href="#l23">23</a><td><tr><td><a id="l24"></a><a href="#l24">24</a><td>goog.provide(&#39;goog.userAgent&#39;);<tr><td><a id="l25"></a><a href="#l25">25</a><td><tr><td><a id="l26"></a><a href="#l26">26</a><td>goog.require(&#39;goog.labs.userAgent.browser&#39;);<tr><td><a id="l27"></a><a href="#l27">27</a><td>goog.require(&#39;goog.labs.userAgent.engine&#39;);<tr><td><a id="l28"></a><a href="#l28">28</a><td>goog.require(&#39;goog.labs.userAgent.platform&#39;);<tr><td><a id="l29"></a><a href="#l29">29</a><td>goog.require(&#39;goog.labs.userAgent.util&#39;);<tr><td><a id="l30"></a><a href="#l30">30</a><td>goog.require(&#39;goog.string&#39;);<tr><td><a id="l31"></a><a href="#l31">31</a><td><tr><td><a id="l32"></a><a href="#l32">32</a><td><tr><td><a id="l33"></a><a href="#l33">33</a><td>/**<tr><td><a id="l34"></a><a href="#l34">34</a><td> * @define {boolean} Whether we know at compile-time that the browser is IE.<tr><td><a id="l35"></a><a href="#l35">35</a><td> */<tr><td><a id="l36"></a><a href="#l36">36</a><td>goog.define(&#39;goog.userAgent.ASSUME_IE&#39;, false);<tr><td><a id="l37"></a><a href="#l37">37</a><td><tr><td><a id="l38"></a><a href="#l38">38</a><td><tr><td><a id="l39"></a><a href="#l39">39</a><td>/**<tr><td><a id="l40"></a><a href="#l40">40</a><td> * @define {boolean} Whether we know at compile-time that the browser is EDGE.<tr><td><a id="l41"></a><a href="#l41">41</a><td> */<tr><td><a id="l42"></a><a href="#l42">42</a><td>goog.define(&#39;goog.userAgent.ASSUME_EDGE&#39;, false);<tr><td><a id="l43"></a><a href="#l43">43</a><td><tr><td><a id="l44"></a><a href="#l44">44</a><td><tr><td><a id="l45"></a><a href="#l45">45</a><td>/**<tr><td><a id="l46"></a><a href="#l46">46</a><td> * @define {boolean} Whether we know at compile-time that the browser is GECKO.<tr><td><a id="l47"></a><a href="#l47">47</a><td> */<tr><td><a id="l48"></a><a href="#l48">48</a><td>goog.define(&#39;goog.userAgent.ASSUME_GECKO&#39;, false);<tr><td><a id="l49"></a><a href="#l49">49</a><td><tr><td><a id="l50"></a><a href="#l50">50</a><td><tr><td><a id="l51"></a><a href="#l51">51</a><td>/**<tr><td><a id="l52"></a><a href="#l52">52</a><td> * @define {boolean} Whether we know at compile-time that the browser is WEBKIT.<tr><td><a id="l53"></a><a href="#l53">53</a><td> */<tr><td><a id="l54"></a><a href="#l54">54</a><td>goog.define(&#39;goog.userAgent.ASSUME_WEBKIT&#39;, false);<tr><td><a id="l55"></a><a href="#l55">55</a><td><tr><td><a id="l56"></a><a href="#l56">56</a><td><tr><td><a id="l57"></a><a href="#l57">57</a><td>/**<tr><td><a id="l58"></a><a href="#l58">58</a><td> * @define {boolean} Whether we know at compile-time that the browser is a<tr><td><a id="l59"></a><a href="#l59">59</a><td> * mobile device running WebKit e.g. iPhone or Android.<tr><td><a id="l60"></a><a href="#l60">60</a><td> */<tr><td><a id="l61"></a><a href="#l61">61</a><td>goog.define(&#39;goog.userAgent.ASSUME_MOBILE_WEBKIT&#39;, false);<tr><td><a id="l62"></a><a href="#l62">62</a><td><tr><td><a id="l63"></a><a href="#l63">63</a><td><tr><td><a id="l64"></a><a href="#l64">64</a><td>/**<tr><td><a id="l65"></a><a href="#l65">65</a><td> * @define {boolean} Whether we know at compile-time that the browser is OPERA.<tr><td><a id="l66"></a><a href="#l66">66</a><td> */<tr><td><a id="l67"></a><a href="#l67">67</a><td>goog.define(&#39;goog.userAgent.ASSUME_OPERA&#39;, false);<tr><td><a id="l68"></a><a href="#l68">68</a><td><tr><td><a id="l69"></a><a href="#l69">69</a><td><tr><td><a id="l70"></a><a href="#l70">70</a><td>/**<tr><td><a id="l71"></a><a href="#l71">71</a><td> * @define {boolean} Whether the<tr><td><a id="l72"></a><a href="#l72">72</a><td> * {@code goog.userAgent.isVersionOrHigher}<tr><td><a id="l73"></a><a href="#l73">73</a><td> * function will return true for any version.<tr><td><a id="l74"></a><a href="#l74">74</a><td> */<tr><td><a id="l75"></a><a href="#l75">75</a><td>goog.define(&#39;goog.userAgent.ASSUME_ANY_VERSION&#39;, false);<tr><td><a id="l76"></a><a href="#l76">76</a><td><tr><td><a id="l77"></a><a href="#l77">77</a><td><tr><td><a id="l78"></a><a href="#l78">78</a><td>/**<tr><td><a id="l79"></a><a href="#l79">79</a><td> * Whether we know the browser engine at compile-time.<tr><td><a id="l80"></a><a href="#l80">80</a><td> * @type {boolean}<tr><td><a id="l81"></a><a href="#l81">81</a><td> * @private<tr><td><a id="l82"></a><a href="#l82">82</a><td> */<tr><td><a id="l83"></a><a href="#l83">83</a><td>goog.userAgent.BROWSER_KNOWN_ =<tr><td><a id="l84"></a><a href="#l84">84</a><td> goog.userAgent.ASSUME_IE ||<tr><td><a id="l85"></a><a href="#l85">85</a><td> goog.userAgent.ASSUME_EDGE ||<tr><td><a id="l86"></a><a href="#l86">86</a><td> goog.userAgent.ASSUME_GECKO ||<tr><td><a id="l87"></a><a href="#l87">87</a><td> goog.userAgent.ASSUME_MOBILE_WEBKIT ||<tr><td><a id="l88"></a><a href="#l88">88</a><td> goog.userAgent.ASSUME_WEBKIT ||<tr><td><a id="l89"></a><a href="#l89">89</a><td> goog.userAgent.ASSUME_OPERA;<tr><td><a id="l90"></a><a href="#l90">90</a><td><tr><td><a id="l91"></a><a href="#l91">91</a><td><tr><td><a id="l92"></a><a href="#l92">92</a><td>/**<tr><td><a id="l93"></a><a href="#l93">93</a><td> * Returns the userAgent string for the current browser.<tr><td><a id="l94"></a><a href="#l94">94</a><td> *<tr><td><a id="l95"></a><a href="#l95">95</a><td> * @return {string} The userAgent string.<tr><td><a id="l96"></a><a href="#l96">96</a><td> */<tr><td><a id="l97"></a><a href="#l97">97</a><td>goog.userAgent.getUserAgentString = function() {<tr><td><a id="l98"></a><a href="#l98">98</a><td> return goog.labs.userAgent.util.getUserAgent();<tr><td><a id="l99"></a><a href="#l99">99</a><td>};<tr><td><a id="l100"></a><a href="#l100">100</a><td><tr><td><a id="l101"></a><a href="#l101">101</a><td><tr><td><a id="l102"></a><a href="#l102">102</a><td>/**<tr><td><a id="l103"></a><a href="#l103">103</a><td> * TODO(nnaze): Change type to &quot;Navigator&quot; and update compilation targets.<tr><td><a id="l104"></a><a href="#l104">104</a><td> * @return {Object} The native navigator object.<tr><td><a id="l105"></a><a href="#l105">105</a><td> */<tr><td><a id="l106"></a><a href="#l106">106</a><td>goog.userAgent.getNavigator = function() {<tr><td><a id="l107"></a><a href="#l107">107</a><td> // Need a local navigator reference instead of using the global one,<tr><td><a id="l108"></a><a href="#l108">108</a><td> // to avoid the rare case where they reference different objects.<tr><td><a id="l109"></a><a href="#l109">109</a><td> // (in a WorkerPool, for example).<tr><td><a id="l110"></a><a href="#l110">110</a><td> return goog.global[&#39;navigator&#39;] || null;<tr><td><a id="l111"></a><a href="#l111">111</a><td>};<tr><td><a id="l112"></a><a href="#l112">112</a><td><tr><td><a id="l113"></a><a href="#l113">113</a><td><tr><td><a id="l114"></a><a href="#l114">114</a><td>/**<tr><td><a id="l115"></a><a href="#l115">115</a><td> * Whether the user agent is Opera.<tr><td><a id="l116"></a><a href="#l116">116</a><td> * @type {boolean}<tr><td><a id="l117"></a><a href="#l117">117</a><td> */<tr><td><a id="l118"></a><a href="#l118">118</a><td>goog.userAgent.OPERA = goog.userAgent.BROWSER_KNOWN_ ?<tr><td><a id="l119"></a><a href="#l119">119</a><td> goog.userAgent.ASSUME_OPERA :<tr><td><a id="l120"></a><a href="#l120">120</a><td> goog.labs.userAgent.browser.isOpera();<tr><td><a id="l121"></a><a href="#l121">121</a><td><tr><td><a id="l122"></a><a href="#l122">122</a><td><tr><td><a id="l123"></a><a href="#l123">123</a><td>/**<tr><td><a id="l124"></a><a href="#l124">124</a><td> * Whether the user agent is Internet Explorer.<tr><td><a id="l125"></a><a href="#l125">125</a><td> * @type {boolean}<tr><td><a id="l126"></a><a href="#l126">126</a><td> */<tr><td><a id="l127"></a><a href="#l127">127</a><td>goog.userAgent.IE = goog.userAgent.BROWSER_KNOWN_ ?<tr><td><a id="l128"></a><a href="#l128">128</a><td> goog.userAgent.ASSUME_IE :<tr><td><a id="l129"></a><a href="#l129">129</a><td> goog.labs.userAgent.browser.isIE();<tr><td><a id="l130"></a><a href="#l130">130</a><td><tr><td><a id="l131"></a><a href="#l131">131</a><td><tr><td><a id="l132"></a><a href="#l132">132</a><td>/**<tr><td><a id="l133"></a><a href="#l133">133</a><td> * Whether the user agent is Microsoft Edge.<tr><td><a id="l134"></a><a href="#l134">134</a><td> * @type {boolean}<tr><td><a id="l135"></a><a href="#l135">135</a><td> */<tr><td><a id="l136"></a><a href="#l136">136</a><td>goog.userAgent.EDGE = goog.userAgent.BROWSER_KNOWN_ ?<tr><td><a id="l137"></a><a href="#l137">137</a><td> goog.userAgent.ASSUME_EDGE :<tr><td><a id="l138"></a><a href="#l138">138</a><td> goog.labs.userAgent.engine.isEdge();<tr><td><a id="l139"></a><a href="#l139">139</a><td><tr><td><a id="l140"></a><a href="#l140">140</a><td><tr><td><a id="l141"></a><a href="#l141">141</a><td>/**<tr><td><a id="l142"></a><a href="#l142">142</a><td> * Whether the user agent is MS Internet Explorer or MS Edge.<tr><td><a id="l143"></a><a href="#l143">143</a><td> * @type {boolean}<tr><td><a id="l144"></a><a href="#l144">144</a><td> */<tr><td><a id="l145"></a><a href="#l145">145</a><td>goog.userAgent.EDGE_OR_IE = goog.userAgent.EDGE || goog.userAgent.IE;<tr><td><a id="l146"></a><a href="#l146">146</a><td><tr><td><a id="l147"></a><a href="#l147">147</a><td><tr><td><a id="l148"></a><a href="#l148">148</a><td>/**<tr><td><a id="l149"></a><a href="#l149">149</a><td> * Whether the user agent is Gecko. Gecko is the rendering engine used by<tr><td><a id="l150"></a><a href="#l150">150</a><td> * Mozilla, Firefox, and others.<tr><td><a id="l151"></a><a href="#l151">151</a><td> * @type {boolean}<tr><td><a id="l152"></a><a href="#l152">152</a><td> */<tr><td><a id="l153"></a><a href="#l153">153</a><td>goog.userAgent.GECKO = goog.userAgent.BROWSER_KNOWN_ ?<tr><td><a id="l154"></a><a href="#l154">154</a><td> goog.userAgent.ASSUME_GECKO :<tr><td><a id="l155"></a><a href="#l155">155</a><td> goog.labs.userAgent.engine.isGecko();<tr><td><a id="l156"></a><a href="#l156">156</a><td><tr><td><a id="l157"></a><a href="#l157">157</a><td><tr><td><a id="l158"></a><a href="#l158">158</a><td>/**<tr><td><a id="l159"></a><a href="#l159">159</a><td> * Whether the user agent is WebKit. WebKit is the rendering engine that<tr><td><a id="l160"></a><a href="#l160">160</a><td> * Safari, Android and others use.<tr><td><a id="l161"></a><a href="#l161">161</a><td> * @type {boolean}<tr><td><a id="l162"></a><a href="#l162">162</a><td> */<tr><td><a id="l163"></a><a href="#l163">163</a><td>goog.userAgent.WEBKIT = goog.userAgent.BROWSER_KNOWN_ ?<tr><td><a id="l164"></a><a href="#l164">164</a><td> goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_MOBILE_WEBKIT :<tr><td><a id="l165"></a><a href="#l165">165</a><td> goog.labs.userAgent.engine.isWebKit();<tr><td><a id="l166"></a><a href="#l166">166</a><td><tr><td><a id="l167"></a><a href="#l167">167</a><td><tr><td><a id="l168"></a><a href="#l168">168</a><td>/**<tr><td><a id="l169"></a><a href="#l169">169</a><td> * Whether the user agent is running on a mobile device.<tr><td><a id="l170"></a><a href="#l170">170</a><td> *<tr><td><a id="l171"></a><a href="#l171">171</a><td> * This is a separate function so that the logic can be tested.<tr><td><a id="l172"></a><a href="#l172">172</a><td> *<tr><td><a id="l173"></a><a href="#l173">173</a><td> * TODO(nnaze): Investigate swapping in goog.labs.userAgent.device.isMobile().<tr><td><a id="l174"></a><a href="#l174">174</a><td> *<tr><td><a id="l175"></a><a href="#l175">175</a><td> * @return {boolean} Whether the user agent is running on a mobile device.<tr><td><a id="l176"></a><a href="#l176">176</a><td> * @private<tr><td><a id="l177"></a><a href="#l177">177</a><td> */<tr><td><a id="l178"></a><a href="#l178">178</a><td>goog.userAgent.isMobile_ = function() {<tr><td><a id="l179"></a><a href="#l179">179</a><td> return goog.userAgent.WEBKIT &amp;&amp;<tr><td><a id="l180"></a><a href="#l180">180</a><td> goog.labs.userAgent.util.matchUserAgent(&#39;Mobile&#39;);<tr><td><a id="l181"></a><a href="#l181">181</a><td>};<tr><td><a id="l182"></a><a href="#l182">182</a><td><tr><td><a id="l183"></a><a href="#l183">183</a><td><tr><td><a id="l184"></a><a href="#l184">184</a><td>/**<tr><td><a id="l185"></a><a href="#l185">185</a><td> * Whether the user agent is running on a mobile device.<tr><td><a id="l186"></a><a href="#l186">186</a><td> *<tr><td><a id="l187"></a><a href="#l187">187</a><td> * TODO(nnaze): Consider deprecating MOBILE when labs.userAgent<tr><td><a id="l188"></a><a href="#l188">188</a><td> * is promoted as the gecko/webkit logic is likely inaccurate.<tr><td><a id="l189"></a><a href="#l189">189</a><td> *<tr><td><a id="l190"></a><a href="#l190">190</a><td> * @type {boolean}<tr><td><a id="l191"></a><a href="#l191">191</a><td> */<tr><td><a id="l192"></a><a href="#l192">192</a><td>goog.userAgent.MOBILE = goog.userAgent.ASSUME_MOBILE_WEBKIT ||<tr><td><a id="l193"></a><a href="#l193">193</a><td> goog.userAgent.isMobile_();<tr><td><a id="l194"></a><a href="#l194">194</a><td><tr><td><a id="l195"></a><a href="#l195">195</a><td><tr><td><a id="l196"></a><a href="#l196">196</a><td>/**<tr><td><a id="l197"></a><a href="#l197">197</a><td> * Used while transitioning code to use WEBKIT instead.<tr><td><a id="l198"></a><a href="#l198">198</a><td> * @type {boolean}<tr><td><a id="l199"></a><a href="#l199">199</a><td> * @deprecated Use {@link goog.userAgent.product.SAFARI} instead.<tr><td><a id="l200"></a><a href="#l200">200</a><td> * TODO(nicksantos): Delete this from goog.userAgent.<tr><td><a id="l201"></a><a href="#l201">201</a><td> */<tr><td><a id="l202"></a><a href="#l202">202</a><td>goog.userAgent.SAFARI = goog.userAgent.WEBKIT;<tr><td><a id="l203"></a><a href="#l203">203</a><td><tr><td><a id="l204"></a><a href="#l204">204</a><td><tr><td><a id="l205"></a><a href="#l205">205</a><td>/**<tr><td><a id="l206"></a><a href="#l206">206</a><td> * @return {string} the platform (operating system) the user agent is running<tr><td><a id="l207"></a><a href="#l207">207</a><td> * on. Default to empty string because navigator.platform may not be defined<tr><td><a id="l208"></a><a href="#l208">208</a><td> * (on Rhino, for example).<tr><td><a id="l209"></a><a href="#l209">209</a><td> * @private<tr><td><a id="l210"></a><a href="#l210">210</a><td> */<tr><td><a id="l211"></a><a href="#l211">211</a><td>goog.userAgent.determinePlatform_ = function() {<tr><td><a id="l212"></a><a href="#l212">212</a><td> var navigator = goog.userAgent.getNavigator();<tr><td><a id="l213"></a><a href="#l213">213</a><td> return navigator &amp;&amp; navigator.platform || &#39;&#39;;<tr><td><a id="l214"></a><a href="#l214">214</a><td>};<tr><td><a id="l215"></a><a href="#l215">215</a><td><tr><td><a id="l216"></a><a href="#l216">216</a><td><tr><td><a id="l217"></a><a href="#l217">217</a><td>/**<tr><td><a id="l218"></a><a href="#l218">218</a><td> * The platform (operating system) the user agent is running on. Default to<tr><td><a id="l219"></a><a href="#l219">219</a><td> * empty string because navigator.platform may not be defined (on Rhino, for<tr><td><a id="l220"></a><a href="#l220">220</a><td> * example).<tr><td><a id="l221"></a><a href="#l221">221</a><td> * @type {string}<tr><td><a id="l222"></a><a href="#l222">222</a><td> */<tr><td><a id="l223"></a><a href="#l223">223</a><td>goog.userAgent.PLATFORM = goog.userAgent.determinePlatform_();<tr><td><a id="l224"></a><a href="#l224">224</a><td><tr><td><a id="l225"></a><a href="#l225">225</a><td><tr><td><a id="l226"></a><a href="#l226">226</a><td>/**<tr><td><a id="l227"></a><a href="#l227">227</a><td> * @define {boolean} Whether the user agent is running on a Macintosh operating<tr><td><a id="l228"></a><a href="#l228">228</a><td> * system.<tr><td><a id="l229"></a><a href="#l229">229</a><td> */<tr><td><a id="l230"></a><a href="#l230">230</a><td>goog.define(&#39;goog.userAgent.ASSUME_MAC&#39;, false);<tr><td><a id="l231"></a><a href="#l231">231</a><td><tr><td><a id="l232"></a><a href="#l232">232</a><td><tr><td><a id="l233"></a><a href="#l233">233</a><td>/**<tr><td><a id="l234"></a><a href="#l234">234</a><td> * @define {boolean} Whether the user agent is running on a Windows operating<tr><td><a id="l235"></a><a href="#l235">235</a><td> * system.<tr><td><a id="l236"></a><a href="#l236">236</a><td> */<tr><td><a id="l237"></a><a href="#l237">237</a><td>goog.define(&#39;goog.userAgent.ASSUME_WINDOWS&#39;, false);<tr><td><a id="l238"></a><a href="#l238">238</a><td><tr><td><a id="l239"></a><a href="#l239">239</a><td><tr><td><a id="l240"></a><a href="#l240">240</a><td>/**<tr><td><a id="l241"></a><a href="#l241">241</a><td> * @define {boolean} Whether the user agent is running on a Linux operating<tr><td><a id="l242"></a><a href="#l242">242</a><td> * system.<tr><td><a id="l243"></a><a href="#l243">243</a><td> */<tr><td><a id="l244"></a><a href="#l244">244</a><td>goog.define(&#39;goog.userAgent.ASSUME_LINUX&#39;, false);<tr><td><a id="l245"></a><a href="#l245">245</a><td><tr><td><a id="l246"></a><a href="#l246">246</a><td><tr><td><a id="l247"></a><a href="#l247">247</a><td>/**<tr><td><a id="l248"></a><a href="#l248">248</a><td> * @define {boolean} Whether the user agent is running on a X11 windowing<tr><td><a id="l249"></a><a href="#l249">249</a><td> * system.<tr><td><a id="l250"></a><a href="#l250">250</a><td> */<tr><td><a id="l251"></a><a href="#l251">251</a><td>goog.define(&#39;goog.userAgent.ASSUME_X11&#39;, false);<tr><td><a id="l252"></a><a href="#l252">252</a><td><tr><td><a id="l253"></a><a href="#l253">253</a><td><tr><td><a id="l254"></a><a href="#l254">254</a><td>/**<tr><td><a id="l255"></a><a href="#l255">255</a><td> * @define {boolean} Whether the user agent is running on Android.<tr><td><a id="l256"></a><a href="#l256">256</a><td> */<tr><td><a id="l257"></a><a href="#l257">257</a><td>goog.define(&#39;goog.userAgent.ASSUME_ANDROID&#39;, false);<tr><td><a id="l258"></a><a href="#l258">258</a><td><tr><td><a id="l259"></a><a href="#l259">259</a><td><tr><td><a id="l260"></a><a href="#l260">260</a><td>/**<tr><td><a id="l261"></a><a href="#l261">261</a><td> * @define {boolean} Whether the user agent is running on an iPhone.<tr><td><a id="l262"></a><a href="#l262">262</a><td> */<tr><td><a id="l263"></a><a href="#l263">263</a><td>goog.define(&#39;goog.userAgent.ASSUME_IPHONE&#39;, false);<tr><td><a id="l264"></a><a href="#l264">264</a><td><tr><td><a id="l265"></a><a href="#l265">265</a><td><tr><td><a id="l266"></a><a href="#l266">266</a><td>/**<tr><td><a id="l267"></a><a href="#l267">267</a><td> * @define {boolean} Whether the user agent is running on an iPad.<tr><td><a id="l268"></a><a href="#l268">268</a><td> */<tr><td><a id="l269"></a><a href="#l269">269</a><td>goog.define(&#39;goog.userAgent.ASSUME_IPAD&#39;, false);<tr><td><a id="l270"></a><a href="#l270">270</a><td><tr><td><a id="l271"></a><a href="#l271">271</a><td><tr><td><a id="l272"></a><a href="#l272">272</a><td>/**<tr><td><a id="l273"></a><a href="#l273">273</a><td> * @type {boolean}<tr><td><a id="l274"></a><a href="#l274">274</a><td> * @private<tr><td><a id="l275"></a><a href="#l275">275</a><td> */<tr><td><a id="l276"></a><a href="#l276">276</a><td>goog.userAgent.PLATFORM_KNOWN_ =<tr><td><a id="l277"></a><a href="#l277">277</a><td> goog.userAgent.ASSUME_MAC ||<tr><td><a id="l278"></a><a href="#l278">278</a><td> goog.userAgent.ASSUME_WINDOWS ||<tr><td><a id="l279"></a><a href="#l279">279</a><td> goog.userAgent.ASSUME_LINUX ||<tr><td><a id="l280"></a><a href="#l280">280</a><td> goog.userAgent.ASSUME_X11 ||<tr><td><a id="l281"></a><a href="#l281">281</a><td> goog.userAgent.ASSUME_ANDROID ||<tr><td><a id="l282"></a><a href="#l282">282</a><td> goog.userAgent.ASSUME_IPHONE ||<tr><td><a id="l283"></a><a href="#l283">283</a><td> goog.userAgent.ASSUME_IPAD;<tr><td><a id="l284"></a><a href="#l284">284</a><td><tr><td><a id="l285"></a><a href="#l285">285</a><td><tr><td><a id="l286"></a><a href="#l286">286</a><td>/**<tr><td><a id="l287"></a><a href="#l287">287</a><td> * Whether the user agent is running on a Macintosh operating system.<tr><td><a id="l288"></a><a href="#l288">288</a><td> * @type {boolean}<tr><td><a id="l289"></a><a href="#l289">289</a><td> */<tr><td><a id="l290"></a><a href="#l290">290</a><td>goog.userAgent.MAC = goog.userAgent.PLATFORM_KNOWN_ ?<tr><td><a id="l291"></a><a href="#l291">291</a><td> goog.userAgent.ASSUME_MAC : goog.labs.userAgent.platform.isMacintosh();<tr><td><a id="l292"></a><a href="#l292">292</a><td><tr><td><a id="l293"></a><a href="#l293">293</a><td><tr><td><a id="l294"></a><a href="#l294">294</a><td>/**<tr><td><a id="l295"></a><a href="#l295">295</a><td> * Whether the user agent is running on a Windows operating system.<tr><td><a id="l296"></a><a href="#l296">296</a><td> * @type {boolean}<tr><td><a id="l297"></a><a href="#l297">297</a><td> */<tr><td><a id="l298"></a><a href="#l298">298</a><td>goog.userAgent.WINDOWS = goog.userAgent.PLATFORM_KNOWN_ ?<tr><td><a id="l299"></a><a href="#l299">299</a><td> goog.userAgent.ASSUME_WINDOWS :<tr><td><a id="l300"></a><a href="#l300">300</a><td> goog.labs.userAgent.platform.isWindows();<tr><td><a id="l301"></a><a href="#l301">301</a><td><tr><td><a id="l302"></a><a href="#l302">302</a><td><tr><td><a id="l303"></a><a href="#l303">303</a><td>/**<tr><td><a id="l304"></a><a href="#l304">304</a><td> * Whether the user agent is Linux per the legacy behavior of<tr><td><a id="l305"></a><a href="#l305">305</a><td> * goog.userAgent.LINUX, which considered ChromeOS to also be<tr><td><a id="l306"></a><a href="#l306">306</a><td> * Linux.<tr><td><a id="l307"></a><a href="#l307">307</a><td> * @return {boolean}<tr><td><a id="l308"></a><a href="#l308">308</a><td> * @private<tr><td><a id="l309"></a><a href="#l309">309</a><td> */<tr><td><a id="l310"></a><a href="#l310">310</a><td>goog.userAgent.isLegacyLinux_ = function() {<tr><td><a id="l311"></a><a href="#l311">311</a><td> return goog.labs.userAgent.platform.isLinux() ||<tr><td><a id="l312"></a><a href="#l312">312</a><td> goog.labs.userAgent.platform.isChromeOS();<tr><td><a id="l313"></a><a href="#l313">313</a><td>};<tr><td><a id="l314"></a><a href="#l314">314</a><td><tr><td><a id="l315"></a><a href="#l315">315</a><td><tr><td><a id="l316"></a><a href="#l316">316</a><td>/**<tr><td><a id="l317"></a><a href="#l317">317</a><td> * Whether the user agent is running on a Linux operating system.<tr><td><a id="l318"></a><a href="#l318">318</a><td> *<tr><td><a id="l319"></a><a href="#l319">319</a><td> * Note that goog.userAgent.LINUX considers ChromeOS to be Linux,<tr><td><a id="l320"></a><a href="#l320">320</a><td> * while goog.labs.userAgent.platform considers ChromeOS and<tr><td><a id="l321"></a><a href="#l321">321</a><td> * Linux to be different OSes.<tr><td><a id="l322"></a><a href="#l322">322</a><td> *<tr><td><a id="l323"></a><a href="#l323">323</a><td> * @type {boolean}<tr><td><a id="l324"></a><a href="#l324">324</a><td> */<tr><td><a id="l325"></a><a href="#l325">325</a><td>goog.userAgent.LINUX = goog.userAgent.PLATFORM_KNOWN_ ?<tr><td><a id="l326"></a><a href="#l326">326</a><td> goog.userAgent.ASSUME_LINUX :<tr><td><a id="l327"></a><a href="#l327">327</a><td> goog.userAgent.isLegacyLinux_();<tr><td><a id="l328"></a><a href="#l328">328</a><td><tr><td><a id="l329"></a><a href="#l329">329</a><td><tr><td><a id="l330"></a><a href="#l330">330</a><td>/**<tr><td><a id="l331"></a><a href="#l331">331</a><td> * @return {boolean} Whether the user agent is an X11 windowing system.<tr><td><a id="l332"></a><a href="#l332">332</a><td> * @private<tr><td><a id="l333"></a><a href="#l333">333</a><td> */<tr><td><a id="l334"></a><a href="#l334">334</a><td>goog.userAgent.isX11_ = function() {<tr><td><a id="l335"></a><a href="#l335">335</a><td> var navigator = goog.userAgent.getNavigator();<tr><td><a id="l336"></a><a href="#l336">336</a><td> return !!navigator &amp;&amp;<tr><td><a id="l337"></a><a href="#l337">337</a><td> goog.string.contains(navigator[&#39;appVersion&#39;] || &#39;&#39;, &#39;X11&#39;);<tr><td><a id="l338"></a><a href="#l338">338</a><td>};<tr><td><a id="l339"></a><a href="#l339">339</a><td><tr><td><a id="l340"></a><a href="#l340">340</a><td><tr><td><a id="l341"></a><a href="#l341">341</a><td>/**<tr><td><a id="l342"></a><a href="#l342">342</a><td> * Whether the user agent is running on a X11 windowing system.<tr><td><a id="l343"></a><a href="#l343">343</a><td> * @type {boolean}<tr><td><a id="l344"></a><a href="#l344">344</a><td> */<tr><td><a id="l345"></a><a href="#l345">345</a><td>goog.userAgent.X11 = goog.userAgent.PLATFORM_KNOWN_ ?<tr><td><a id="l346"></a><a href="#l346">346</a><td> goog.userAgent.ASSUME_X11 :<tr><td><a id="l347"></a><a href="#l347">347</a><td> goog.userAgent.isX11_();<tr><td><a id="l348"></a><a href="#l348">348</a><td><tr><td><a id="l349"></a><a href="#l349">349</a><td><tr><td><a id="l350"></a><a href="#l350">350</a><td>/**<tr><td><a id="l351"></a><a href="#l351">351</a><td> * Whether the user agent is running on Android.<tr><td><a id="l352"></a><a href="#l352">352</a><td> * @type {boolean}<tr><td><a id="l353"></a><a href="#l353">353</a><td> */<tr><td><a id="l354"></a><a href="#l354">354</a><td>goog.userAgent.ANDROID = goog.userAgent.PLATFORM_KNOWN_ ?<tr><td><a id="l355"></a><a href="#l355">355</a><td> goog.userAgent.ASSUME_ANDROID :<tr><td><a id="l356"></a><a href="#l356">356</a><td> goog.labs.userAgent.platform.isAndroid();<tr><td><a id="l357"></a><a href="#l357">357</a><td><tr><td><a id="l358"></a><a href="#l358">358</a><td><tr><td><a id="l359"></a><a href="#l359">359</a><td>/**<tr><td><a id="l360"></a><a href="#l360">360</a><td> * Whether the user agent is running on an iPhone.<tr><td><a id="l361"></a><a href="#l361">361</a><td> * @type {boolean}<tr><td><a id="l362"></a><a href="#l362">362</a><td> */<tr><td><a id="l363"></a><a href="#l363">363</a><td>goog.userAgent.IPHONE = goog.userAgent.PLATFORM_KNOWN_ ?<tr><td><a id="l364"></a><a href="#l364">364</a><td> goog.userAgent.ASSUME_IPHONE :<tr><td><a id="l365"></a><a href="#l365">365</a><td> goog.labs.userAgent.platform.isIphone();<tr><td><a id="l366"></a><a href="#l366">366</a><td><tr><td><a id="l367"></a><a href="#l367">367</a><td><tr><td><a id="l368"></a><a href="#l368">368</a><td>/**<tr><td><a id="l369"></a><a href="#l369">369</a><td> * Whether the user agent is running on an iPad.<tr><td><a id="l370"></a><a href="#l370">370</a><td> * @type {boolean}<tr><td><a id="l371"></a><a href="#l371">371</a><td> */<tr><td><a id="l372"></a><a href="#l372">372</a><td>goog.userAgent.IPAD = goog.userAgent.PLATFORM_KNOWN_ ?<tr><td><a id="l373"></a><a href="#l373">373</a><td> goog.userAgent.ASSUME_IPAD :<tr><td><a id="l374"></a><a href="#l374">374</a><td> goog.labs.userAgent.platform.isIpad();<tr><td><a id="l375"></a><a href="#l375">375</a><td><tr><td><a id="l376"></a><a href="#l376">376</a><td><tr><td><a id="l377"></a><a href="#l377">377</a><td>/**<tr><td><a id="l378"></a><a href="#l378">378</a><td> * @return {string} The string that describes the version number of the user<tr><td><a id="l379"></a><a href="#l379">379</a><td> * agent.<tr><td><a id="l380"></a><a href="#l380">380</a><td> * Assumes user agent is opera.<tr><td><a id="l381"></a><a href="#l381">381</a><td> * @private<tr><td><a id="l382"></a><a href="#l382">382</a><td> */<tr><td><a id="l383"></a><a href="#l383">383</a><td>goog.userAgent.operaVersion_ = function() {<tr><td><a id="l384"></a><a href="#l384">384</a><td> var version = goog.global.opera.version;<tr><td><a id="l385"></a><a href="#l385">385</a><td> try {<tr><td><a id="l386"></a><a href="#l386">386</a><td> return version();<tr><td><a id="l387"></a><a href="#l387">387</a><td> } catch (e) {<tr><td><a id="l388"></a><a href="#l388">388</a><td> return version;<tr><td><a id="l389"></a><a href="#l389">389</a><td> }<tr><td><a id="l390"></a><a href="#l390">390</a><td>};<tr><td><a id="l391"></a><a href="#l391">391</a><td><tr><td><a id="l392"></a><a href="#l392">392</a><td><tr><td><a id="l393"></a><a href="#l393">393</a><td>/**<tr><td><a id="l394"></a><a href="#l394">394</a><td> * @return {string} The string that describes the version number of the user<tr><td><a id="l395"></a><a href="#l395">395</a><td> * agent.<tr><td><a id="l396"></a><a href="#l396">396</a><td> * @private<tr><td><a id="l397"></a><a href="#l397">397</a><td> */<tr><td><a id="l398"></a><a href="#l398">398</a><td>goog.userAgent.determineVersion_ = function() {<tr><td><a id="l399"></a><a href="#l399">399</a><td> // All browsers have different ways to detect the version and they all have<tr><td><a id="l400"></a><a href="#l400">400</a><td> // different naming schemes.<tr><td><a id="l401"></a><a href="#l401">401</a><td><tr><td><a id="l402"></a><a href="#l402">402</a><td> if (goog.userAgent.OPERA &amp;&amp; goog.global[&#39;opera&#39;]) {<tr><td><a id="l403"></a><a href="#l403">403</a><td> return goog.userAgent.operaVersion_();<tr><td><a id="l404"></a><a href="#l404">404</a><td> }<tr><td><a id="l405"></a><a href="#l405">405</a><td><tr><td><a id="l406"></a><a href="#l406">406</a><td> // version is a string rather than a number because it may contain &#39;b&#39;, &#39;a&#39;,<tr><td><a id="l407"></a><a href="#l407">407</a><td> // and so on.<tr><td><a id="l408"></a><a href="#l408">408</a><td> var version = &#39;&#39;;<tr><td><a id="l409"></a><a href="#l409">409</a><td> var arr = goog.userAgent.getVersionRegexResult_();<tr><td><a id="l410"></a><a href="#l410">410</a><td> if (arr) {<tr><td><a id="l411"></a><a href="#l411">411</a><td> version = arr ? arr[1] : &#39;&#39;;<tr><td><a id="l412"></a><a href="#l412">412</a><td> }<tr><td><a id="l413"></a><a href="#l413">413</a><td><tr><td><a id="l414"></a><a href="#l414">414</a><td> if (goog.userAgent.IE) {<tr><td><a id="l415"></a><a href="#l415">415</a><td> // IE9 can be in document mode 9 but be reporting an inconsistent user agent<tr><td><a id="l416"></a><a href="#l416">416</a><td> // version. If it is identifying as a version lower than 9 we take the<tr><td><a id="l417"></a><a href="#l417">417</a><td> // documentMode as the version instead. IE8 has similar behavior.<tr><td><a id="l418"></a><a href="#l418">418</a><td> // It is recommended to set the X-UA-Compatible header to ensure that IE9<tr><td><a id="l419"></a><a href="#l419">419</a><td> // uses documentMode 9.<tr><td><a id="l420"></a><a href="#l420">420</a><td> var docMode = goog.userAgent.getDocumentMode_();<tr><td><a id="l421"></a><a href="#l421">421</a><td> if (docMode &gt; parseFloat(version)) {<tr><td><a id="l422"></a><a href="#l422">422</a><td> return String(docMode);<tr><td><a id="l423"></a><a href="#l423">423</a><td> }<tr><td><a id="l424"></a><a href="#l424">424</a><td> }<tr><td><a id="l425"></a><a href="#l425">425</a><td><tr><td><a id="l426"></a><a href="#l426">426</a><td> return version;<tr><td><a id="l427"></a><a href="#l427">427</a><td>};<tr><td><a id="l428"></a><a href="#l428">428</a><td><tr><td><a id="l429"></a><a href="#l429">429</a><td><tr><td><a id="l430"></a><a href="#l430">430</a><td>/**<tr><td><a id="l431"></a><a href="#l431">431</a><td> * @return {Array|undefined} The version regex matches from parsing the user<tr><td><a id="l432"></a><a href="#l432">432</a><td> * agent string. These regex statements must be executed inline so they can<tr><td><a id="l433"></a><a href="#l433">433</a><td> * be compiled out by the closure compiler with the rest of the useragent<tr><td><a id="l434"></a><a href="#l434">434</a><td> * detection logic when ASSUME_* is specified.<tr><td><a id="l435"></a><a href="#l435">435</a><td> * @private<tr><td><a id="l436"></a><a href="#l436">436</a><td> */<tr><td><a id="l437"></a><a href="#l437">437</a><td>goog.userAgent.getVersionRegexResult_ = function() {<tr><td><a id="l438"></a><a href="#l438">438</a><td> var userAgent = goog.userAgent.getUserAgentString();<tr><td><a id="l439"></a><a href="#l439">439</a><td> if (goog.userAgent.GECKO) {<tr><td><a id="l440"></a><a href="#l440">440</a><td> return /rv\:([^\);]+)(\)|;)/.exec(userAgent);<tr><td><a id="l441"></a><a href="#l441">441</a><td> }<tr><td><a id="l442"></a><a href="#l442">442</a><td> if (goog.userAgent.EDGE) {<tr><td><a id="l443"></a><a href="#l443">443</a><td> return /Edge\/([\d\.]+)/.exec(userAgent);<tr><td><a id="l444"></a><a href="#l444">444</a><td> }<tr><td><a id="l445"></a><a href="#l445">445</a><td> if (goog.userAgent.IE) {<tr><td><a id="l446"></a><a href="#l446">446</a><td> return /\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(userAgent);<tr><td><a id="l447"></a><a href="#l447">447</a><td> }<tr><td><a id="l448"></a><a href="#l448">448</a><td> if (goog.userAgent.WEBKIT) {<tr><td><a id="l449"></a><a href="#l449">449</a><td> // WebKit/125.4<tr><td><a id="l450"></a><a href="#l450">450</a><td> return /WebKit\/(\S+)/.exec(userAgent);<tr><td><a id="l451"></a><a href="#l451">451</a><td> }<tr><td><a id="l452"></a><a href="#l452">452</a><td>};<tr><td><a id="l453"></a><a href="#l453">453</a><td><tr><td><a id="l454"></a><a href="#l454">454</a><td><tr><td><a id="l455"></a><a href="#l455">455</a><td>/**<tr><td><a id="l456"></a><a href="#l456">456</a><td> * @return {number|undefined} Returns the document mode (for testing).<tr><td><a id="l457"></a><a href="#l457">457</a><td> * @private<tr><td><a id="l458"></a><a href="#l458">458</a><td> */<tr><td><a id="l459"></a><a href="#l459">459</a><td>goog.userAgent.getDocumentMode_ = function() {<tr><td><a id="l460"></a><a href="#l460">460</a><td> // NOTE(user): goog.userAgent may be used in context where there is no DOM.<tr><td><a id="l461"></a><a href="#l461">461</a><td> var doc = goog.global[&#39;document&#39;];<tr><td><a id="l462"></a><a href="#l462">462</a><td> return doc ? doc[&#39;documentMode&#39;] : undefined;<tr><td><a id="l463"></a><a href="#l463">463</a><td>};<tr><td><a id="l464"></a><a href="#l464">464</a><td><tr><td><a id="l465"></a><a href="#l465">465</a><td><tr><td><a id="l466"></a><a href="#l466">466</a><td>/**<tr><td><a id="l467"></a><a href="#l467">467</a><td> * The version of the user agent. This is a string because it might contain<tr><td><a id="l468"></a><a href="#l468">468</a><td> * &#39;b&#39; (as in beta) as well as multiple dots.<tr><td><a id="l469"></a><a href="#l469">469</a><td> * @type {string}<tr><td><a id="l470"></a><a href="#l470">470</a><td> */<tr><td><a id="l471"></a><a href="#l471">471</a><td>goog.userAgent.VERSION = goog.userAgent.determineVersion_();<tr><td><a id="l472"></a><a href="#l472">472</a><td><tr><td><a id="l473"></a><a href="#l473">473</a><td><tr><td><a id="l474"></a><a href="#l474">474</a><td>/**<tr><td><a id="l475"></a><a href="#l475">475</a><td> * Compares two version numbers.<tr><td><a id="l476"></a><a href="#l476">476</a><td> *<tr><td><a id="l477"></a><a href="#l477">477</a><td> * @param {string} v1 Version of first item.<tr><td><a id="l478"></a><a href="#l478">478</a><td> * @param {string} v2 Version of second item.<tr><td><a id="l479"></a><a href="#l479">479</a><td> *<tr><td><a id="l480"></a><a href="#l480">480</a><td> * @return {number} 1 if first argument is higher<tr><td><a id="l481"></a><a href="#l481">481</a><td> * 0 if arguments are equal<tr><td><a id="l482"></a><a href="#l482">482</a><td> * -1 if second argument is higher.<tr><td><a id="l483"></a><a href="#l483">483</a><td> * @deprecated Use goog.string.compareVersions.<tr><td><a id="l484"></a><a href="#l484">484</a><td> */<tr><td><a id="l485"></a><a href="#l485">485</a><td>goog.userAgent.compare = function(v1, v2) {<tr><td><a id="l486"></a><a href="#l486">486</a><td> return goog.string.compareVersions(v1, v2);<tr><td><a id="l487"></a><a href="#l487">487</a><td>};<tr><td><a id="l488"></a><a href="#l488">488</a><td><tr><td><a id="l489"></a><a href="#l489">489</a><td><tr><td><a id="l490"></a><a href="#l490">490</a><td>/**<tr><td><a id="l491"></a><a href="#l491">491</a><td> * Cache for {@link goog.userAgent.isVersionOrHigher}.<tr><td><a id="l492"></a><a href="#l492">492</a><td> * Calls to compareVersions are surprisingly expensive and, as a browser&#39;s<tr><td><a id="l493"></a><a href="#l493">493</a><td> * version number is unlikely to change during a session, we cache the results.<tr><td><a id="l494"></a><a href="#l494">494</a><td> * @const<tr><td><a id="l495"></a><a href="#l495">495</a><td> * @private<tr><td><a id="l496"></a><a href="#l496">496</a><td> */<tr><td><a id="l497"></a><a href="#l497">497</a><td>goog.userAgent.isVersionOrHigherCache_ = {};<tr><td><a id="l498"></a><a href="#l498">498</a><td><tr><td><a id="l499"></a><a href="#l499">499</a><td><tr><td><a id="l500"></a><a href="#l500">500</a><td>/**<tr><td><a id="l501"></a><a href="#l501">501</a><td> * Whether the user agent version is higher or the same as the given version.<tr><td><a id="l502"></a><a href="#l502">502</a><td> * NOTE: When checking the version numbers for Firefox and Safari, be sure to<tr><td><a id="l503"></a><a href="#l503">503</a><td> * use the engine&#39;s version, not the browser&#39;s version number. For example,<tr><td><a id="l504"></a><a href="#l504">504</a><td> * Firefox 3.0 corresponds to Gecko 1.9 and Safari 3.0 to Webkit 522.11.<tr><td><a id="l505"></a><a href="#l505">505</a><td> * Opera and Internet Explorer versions match the product release number.&lt;br&gt;<tr><td><a id="l506"></a><a href="#l506">506</a><td> * @see &lt;a href=&quot;http://en.wikipedia.org/wiki/Safari_version_history&quot;&gt;<tr><td><a id="l507"></a><a href="#l507">507</a><td> * Webkit&lt;/a&gt;<tr><td><a id="l508"></a><a href="#l508">508</a><td> * @see &lt;a href=&quot;http://en.wikipedia.org/wiki/Gecko_engine&quot;&gt;Gecko&lt;/a&gt;<tr><td><a id="l509"></a><a href="#l509">509</a><td> *<tr><td><a id="l510"></a><a href="#l510">510</a><td> * @param {string|number} version The version to check.<tr><td><a id="l511"></a><a href="#l511">511</a><td> * @return {boolean} Whether the user agent version is higher or the same as<tr><td><a id="l512"></a><a href="#l512">512</a><td> * the given version.<tr><td><a id="l513"></a><a href="#l513">513</a><td> */<tr><td><a id="l514"></a><a href="#l514">514</a><td>goog.userAgent.isVersionOrHigher = function(version) {<tr><td><a id="l515"></a><a href="#l515">515</a><td> return goog.userAgent.ASSUME_ANY_VERSION ||<tr><td><a id="l516"></a><a href="#l516">516</a><td> goog.userAgent.isVersionOrHigherCache_[version] ||<tr><td><a id="l517"></a><a href="#l517">517</a><td> (goog.userAgent.isVersionOrHigherCache_[version] =<tr><td><a id="l518"></a><a href="#l518">518</a><td> goog.string.compareVersions(goog.userAgent.VERSION, version) &gt;= 0);<tr><td><a id="l519"></a><a href="#l519">519</a><td>};<tr><td><a id="l520"></a><a href="#l520">520</a><td><tr><td><a id="l521"></a><a href="#l521">521</a><td><tr><td><a id="l522"></a><a href="#l522">522</a><td>/**<tr><td><a id="l523"></a><a href="#l523">523</a><td> * Deprecated alias to {@code goog.userAgent.isVersionOrHigher}.<tr><td><a id="l524"></a><a href="#l524">524</a><td> * @param {string|number} version The version to check.<tr><td><a id="l525"></a><a href="#l525">525</a><td> * @return {boolean} Whether the user agent version is higher or the same as<tr><td><a id="l526"></a><a href="#l526">526</a><td> * the given version.<tr><td><a id="l527"></a><a href="#l527">527</a><td> * @deprecated Use goog.userAgent.isVersionOrHigher().<tr><td><a id="l528"></a><a href="#l528">528</a><td> */<tr><td><a id="l529"></a><a href="#l529">529</a><td>goog.userAgent.isVersion = goog.userAgent.isVersionOrHigher;<tr><td><a id="l530"></a><a href="#l530">530</a><td><tr><td><a id="l531"></a><a href="#l531">531</a><td><tr><td><a id="l532"></a><a href="#l532">532</a><td>/**<tr><td><a id="l533"></a><a href="#l533">533</a><td> * Whether the IE effective document mode is higher or the same as the given<tr><td><a id="l534"></a><a href="#l534">534</a><td> * document mode version.<tr><td><a id="l535"></a><a href="#l535">535</a><td> * NOTE: Only for IE, return false for another browser.<tr><td><a id="l536"></a><a href="#l536">536</a><td> *<tr><td><a id="l537"></a><a href="#l537">537</a><td> * @param {number} documentMode The document mode version to check.<tr><td><a id="l538"></a><a href="#l538">538</a><td> * @return {boolean} Whether the IE effective document mode is higher or the<tr><td><a id="l539"></a><a href="#l539">539</a><td> * same as the given version.<tr><td><a id="l540"></a><a href="#l540">540</a><td> */<tr><td><a id="l541"></a><a href="#l541">541</a><td>goog.userAgent.isDocumentModeOrHigher = function(documentMode) {<tr><td><a id="l542"></a><a href="#l542">542</a><td> return goog.userAgent.DOCUMENT_MODE &gt;= documentMode;<tr><td><a id="l543"></a><a href="#l543">543</a><td>};<tr><td><a id="l544"></a><a href="#l544">544</a><td><tr><td><a id="l545"></a><a href="#l545">545</a><td><tr><td><a id="l546"></a><a href="#l546">546</a><td>/**<tr><td><a id="l547"></a><a href="#l547">547</a><td> * Deprecated alias to {@code goog.userAgent.isDocumentModeOrHigher}.<tr><td><a id="l548"></a><a href="#l548">548</a><td> * @param {number} version The version to check.<tr><td><a id="l549"></a><a href="#l549">549</a><td> * @return {boolean} Whether the IE effective document mode is higher or the<tr><td><a id="l550"></a><a href="#l550">550</a><td> * same as the given version.<tr><td><a id="l551"></a><a href="#l551">551</a><td> * @deprecated Use goog.userAgent.isDocumentModeOrHigher().<tr><td><a id="l552"></a><a href="#l552">552</a><td> */<tr><td><a id="l553"></a><a href="#l553">553</a><td>goog.userAgent.isDocumentMode = goog.userAgent.isDocumentModeOrHigher;<tr><td><a id="l554"></a><a href="#l554">554</a><td><tr><td><a id="l555"></a><a href="#l555">555</a><td><tr><td><a id="l556"></a><a href="#l556">556</a><td>/**<tr><td><a id="l557"></a><a href="#l557">557</a><td> * For IE version &lt; 7, documentMode is undefined, so attempt to use the<tr><td><a id="l558"></a><a href="#l558">558</a><td> * CSS1Compat property to see if we are in standards mode. If we are in<tr><td><a id="l559"></a><a href="#l559">559</a><td> * standards mode, treat the browser version as the document mode. Otherwise,<tr><td><a id="l560"></a><a href="#l560">560</a><td> * IE is emulating version 5.<tr><td><a id="l561"></a><a href="#l561">561</a><td> * @type {number|undefined}<tr><td><a id="l562"></a><a href="#l562">562</a><td> * @const<tr><td><a id="l563"></a><a href="#l563">563</a><td> */<tr><td><a id="l564"></a><a href="#l564">564</a><td>goog.userAgent.DOCUMENT_MODE = (function() {<tr><td><a id="l565"></a><a href="#l565">565</a><td> var doc = goog.global[&#39;document&#39;];<tr><td><a id="l566"></a><a href="#l566">566</a><td> var mode = goog.userAgent.getDocumentMode_();<tr><td><a id="l567"></a><a href="#l567">567</a><td> if (!doc || !goog.userAgent.IE) {<tr><td><a id="l568"></a><a href="#l568">568</a><td> return undefined;<tr><td><a id="l569"></a><a href="#l569">569</a><td> }<tr><td><a id="l570"></a><a href="#l570">570</a><td> return mode || (doc[&#39;compatMode&#39;] == &#39;CSS1Compat&#39; ?<tr><td><a id="l571"></a><a href="#l571">571</a><td> parseInt(goog.userAgent.VERSION, 10) : 5);<tr><td><a id="l572"></a><a href="#l572">572</a><td>})();</table></div></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>
@@ -1 +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>actionsequence.js</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 class="srcfile"><h1>lib/webdriver/actionsequence.js</h1><div><table><tr><td><a id="l1"></a><a href="#l1">1</a><td>// Licensed to the Software Freedom Conservancy (SFC) under one<tr><td><a id="l2"></a><a href="#l2">2</a><td>// or more contributor license agreements. See the NOTICE file<tr><td><a id="l3"></a><a href="#l3">3</a><td>// distributed with this work for additional information<tr><td><a id="l4"></a><a href="#l4">4</a><td>// regarding copyright ownership. The SFC licenses this file<tr><td><a id="l5"></a><a href="#l5">5</a><td>// to you under the Apache License, Version 2.0 (the<tr><td><a id="l6"></a><a href="#l6">6</a><td>// &quot;License&quot;); you may not use this file except in compliance<tr><td><a id="l7"></a><a href="#l7">7</a><td>// with the License. You may obtain a copy of the License at<tr><td><a id="l8"></a><a href="#l8">8</a><td>//<tr><td><a id="l9"></a><a href="#l9">9</a><td>// http://www.apache.org/licenses/LICENSE-2.0<tr><td><a id="l10"></a><a href="#l10">10</a><td>//<tr><td><a id="l11"></a><a href="#l11">11</a><td>// Unless required by applicable law or agreed to in writing,<tr><td><a id="l12"></a><a href="#l12">12</a><td>// software distributed under the License is distributed on an<tr><td><a id="l13"></a><a href="#l13">13</a><td>// &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<tr><td><a id="l14"></a><a href="#l14">14</a><td>// KIND, either express or implied. See the License for the<tr><td><a id="l15"></a><a href="#l15">15</a><td>// specific language governing permissions and limitations<tr><td><a id="l16"></a><a href="#l16">16</a><td>// under the License.<tr><td><a id="l17"></a><a href="#l17">17</a><td><tr><td><a id="l18"></a><a href="#l18">18</a><td>goog.provide(&#39;webdriver.ActionSequence&#39;);<tr><td><a id="l19"></a><a href="#l19">19</a><td><tr><td><a id="l20"></a><a href="#l20">20</a><td>goog.require(&#39;goog.array&#39;);<tr><td><a id="l21"></a><a href="#l21">21</a><td>goog.require(&#39;webdriver.Button&#39;);<tr><td><a id="l22"></a><a href="#l22">22</a><td>goog.require(&#39;webdriver.Command&#39;);<tr><td><a id="l23"></a><a href="#l23">23</a><td>goog.require(&#39;webdriver.CommandName&#39;);<tr><td><a id="l24"></a><a href="#l24">24</a><td>goog.require(&#39;webdriver.Key&#39;);<tr><td><a id="l25"></a><a href="#l25">25</a><td><tr><td><a id="l26"></a><a href="#l26">26</a><td><tr><td><a id="l27"></a><a href="#l27">27</a><td><tr><td><a id="l28"></a><a href="#l28">28</a><td>/**<tr><td><a id="l29"></a><a href="#l29">29</a><td> * Class for defining sequences of complex user interactions. Each sequence<tr><td><a id="l30"></a><a href="#l30">30</a><td> * will not be executed until {@link #perform} is called.<tr><td><a id="l31"></a><a href="#l31">31</a><td> *<tr><td><a id="l32"></a><a href="#l32">32</a><td> * Example:<tr><td><a id="l33"></a><a href="#l33">33</a><td> *<tr><td><a id="l34"></a><a href="#l34">34</a><td> * new webdriver.ActionSequence(driver).<tr><td><a id="l35"></a><a href="#l35">35</a><td> * keyDown(webdriver.Key.SHIFT).<tr><td><a id="l36"></a><a href="#l36">36</a><td> * click(element1).<tr><td><a id="l37"></a><a href="#l37">37</a><td> * click(element2).<tr><td><a id="l38"></a><a href="#l38">38</a><td> * dragAndDrop(element3, element4).<tr><td><a id="l39"></a><a href="#l39">39</a><td> * keyUp(webdriver.Key.SHIFT).<tr><td><a id="l40"></a><a href="#l40">40</a><td> * perform();<tr><td><a id="l41"></a><a href="#l41">41</a><td> *<tr><td><a id="l42"></a><a href="#l42">42</a><td> * @param {!webdriver.WebDriver} driver The driver instance to use.<tr><td><a id="l43"></a><a href="#l43">43</a><td> * @constructor<tr><td><a id="l44"></a><a href="#l44">44</a><td> */<tr><td><a id="l45"></a><a href="#l45">45</a><td>webdriver.ActionSequence = function(driver) {<tr><td><a id="l46"></a><a href="#l46">46</a><td><tr><td><a id="l47"></a><a href="#l47">47</a><td> /** @private {!webdriver.WebDriver} */<tr><td><a id="l48"></a><a href="#l48">48</a><td> this.driver_ = driver;<tr><td><a id="l49"></a><a href="#l49">49</a><td><tr><td><a id="l50"></a><a href="#l50">50</a><td> /** @private {!Array.&lt;{description: string, command: !webdriver.Command}&gt;} */<tr><td><a id="l51"></a><a href="#l51">51</a><td> this.actions_ = [];<tr><td><a id="l52"></a><a href="#l52">52</a><td>};<tr><td><a id="l53"></a><a href="#l53">53</a><td><tr><td><a id="l54"></a><a href="#l54">54</a><td><tr><td><a id="l55"></a><a href="#l55">55</a><td>/**<tr><td><a id="l56"></a><a href="#l56">56</a><td> * Schedules an action to be executed each time {@link #perform} is called on<tr><td><a id="l57"></a><a href="#l57">57</a><td> * this instance.<tr><td><a id="l58"></a><a href="#l58">58</a><td> * @param {string} description A description of the command.<tr><td><a id="l59"></a><a href="#l59">59</a><td> * @param {!webdriver.Command} command The command.<tr><td><a id="l60"></a><a href="#l60">60</a><td> * @private<tr><td><a id="l61"></a><a href="#l61">61</a><td> */<tr><td><a id="l62"></a><a href="#l62">62</a><td>webdriver.ActionSequence.prototype.schedule_ = function(description, command) {<tr><td><a id="l63"></a><a href="#l63">63</a><td> this.actions_.push({<tr><td><a id="l64"></a><a href="#l64">64</a><td> description: description,<tr><td><a id="l65"></a><a href="#l65">65</a><td> command: command<tr><td><a id="l66"></a><a href="#l66">66</a><td> });<tr><td><a id="l67"></a><a href="#l67">67</a><td>};<tr><td><a id="l68"></a><a href="#l68">68</a><td><tr><td><a id="l69"></a><a href="#l69">69</a><td><tr><td><a id="l70"></a><a href="#l70">70</a><td>/**<tr><td><a id="l71"></a><a href="#l71">71</a><td> * Executes this action sequence.<tr><td><a id="l72"></a><a href="#l72">72</a><td> * @return {!webdriver.promise.Promise} A promise that will be resolved once<tr><td><a id="l73"></a><a href="#l73">73</a><td> * this sequence has completed.<tr><td><a id="l74"></a><a href="#l74">74</a><td> */<tr><td><a id="l75"></a><a href="#l75">75</a><td>webdriver.ActionSequence.prototype.perform = function() {<tr><td><a id="l76"></a><a href="#l76">76</a><td> // Make a protected copy of the scheduled actions. This will protect against<tr><td><a id="l77"></a><a href="#l77">77</a><td> // users defining additional commands before this sequence is actually<tr><td><a id="l78"></a><a href="#l78">78</a><td> // executed.<tr><td><a id="l79"></a><a href="#l79">79</a><td> var actions = goog.array.clone(this.actions_);<tr><td><a id="l80"></a><a href="#l80">80</a><td> var driver = this.driver_;<tr><td><a id="l81"></a><a href="#l81">81</a><td> return driver.controlFlow().execute(function() {<tr><td><a id="l82"></a><a href="#l82">82</a><td> goog.array.forEach(actions, function(action) {<tr><td><a id="l83"></a><a href="#l83">83</a><td> driver.schedule(action.command, action.description);<tr><td><a id="l84"></a><a href="#l84">84</a><td> });<tr><td><a id="l85"></a><a href="#l85">85</a><td> }, &#39;ActionSequence.perform&#39;);<tr><td><a id="l86"></a><a href="#l86">86</a><td>};<tr><td><a id="l87"></a><a href="#l87">87</a><td><tr><td><a id="l88"></a><a href="#l88">88</a><td><tr><td><a id="l89"></a><a href="#l89">89</a><td>/**<tr><td><a id="l90"></a><a href="#l90">90</a><td> * Moves the mouse. The location to move to may be specified in terms of the<tr><td><a id="l91"></a><a href="#l91">91</a><td> * mouse&#39;s current location, an offset relative to the top-left corner of an<tr><td><a id="l92"></a><a href="#l92">92</a><td> * element, or an element (in which case the middle of the element is used).<tr><td><a id="l93"></a><a href="#l93">93</a><td> * @param {(!webdriver.WebElement|{x: number, y: number})} location The<tr><td><a id="l94"></a><a href="#l94">94</a><td> * location to drag to, as either another WebElement or an offset in pixels.<tr><td><a id="l95"></a><a href="#l95">95</a><td> * @param {{x: number, y: number}=} opt_offset If the target {@code location}<tr><td><a id="l96"></a><a href="#l96">96</a><td> * is defined as a {@link webdriver.WebElement}, this parameter defines an<tr><td><a id="l97"></a><a href="#l97">97</a><td> * offset within that element. The offset should be specified in pixels<tr><td><a id="l98"></a><a href="#l98">98</a><td> * relative to the top-left corner of the element&#39;s bounding box. If<tr><td><a id="l99"></a><a href="#l99">99</a><td> * omitted, the element&#39;s center will be used as the target offset.<tr><td><a id="l100"></a><a href="#l100">100</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l101"></a><a href="#l101">101</a><td> */<tr><td><a id="l102"></a><a href="#l102">102</a><td>webdriver.ActionSequence.prototype.mouseMove = function(location, opt_offset) {<tr><td><a id="l103"></a><a href="#l103">103</a><td> var command = new webdriver.Command(webdriver.CommandName.MOVE_TO);<tr><td><a id="l104"></a><a href="#l104">104</a><td><tr><td><a id="l105"></a><a href="#l105">105</a><td> if (goog.isNumber(location.x)) {<tr><td><a id="l106"></a><a href="#l106">106</a><td> setOffset(/** @type {{x: number, y: number}} */(location));<tr><td><a id="l107"></a><a href="#l107">107</a><td> } else {<tr><td><a id="l108"></a><a href="#l108">108</a><td> command.setParameter(&#39;element&#39;, location.getRawId());<tr><td><a id="l109"></a><a href="#l109">109</a><td> if (opt_offset) {<tr><td><a id="l110"></a><a href="#l110">110</a><td> setOffset(opt_offset);<tr><td><a id="l111"></a><a href="#l111">111</a><td> }<tr><td><a id="l112"></a><a href="#l112">112</a><td> }<tr><td><a id="l113"></a><a href="#l113">113</a><td><tr><td><a id="l114"></a><a href="#l114">114</a><td> this.schedule_(&#39;mouseMove&#39;, command);<tr><td><a id="l115"></a><a href="#l115">115</a><td> return this;<tr><td><a id="l116"></a><a href="#l116">116</a><td><tr><td><a id="l117"></a><a href="#l117">117</a><td> /** @param {{x: number, y: number}} offset The offset to use. */<tr><td><a id="l118"></a><a href="#l118">118</a><td> function setOffset(offset) {<tr><td><a id="l119"></a><a href="#l119">119</a><td> command.setParameter(&#39;xoffset&#39;, offset.x || 0);<tr><td><a id="l120"></a><a href="#l120">120</a><td> command.setParameter(&#39;yoffset&#39;, offset.y || 0);<tr><td><a id="l121"></a><a href="#l121">121</a><td> }<tr><td><a id="l122"></a><a href="#l122">122</a><td>};<tr><td><a id="l123"></a><a href="#l123">123</a><td><tr><td><a id="l124"></a><a href="#l124">124</a><td><tr><td><a id="l125"></a><a href="#l125">125</a><td>/**<tr><td><a id="l126"></a><a href="#l126">126</a><td> * Schedules a mouse action.<tr><td><a id="l127"></a><a href="#l127">127</a><td> * @param {string} description A simple descriptive label for the scheduled<tr><td><a id="l128"></a><a href="#l128">128</a><td> * action.<tr><td><a id="l129"></a><a href="#l129">129</a><td> * @param {!webdriver.CommandName} commandName The name of the command.<tr><td><a id="l130"></a><a href="#l130">130</a><td> * @param {(webdriver.WebElement|webdriver.Button)=} opt_elementOrButton Either<tr><td><a id="l131"></a><a href="#l131">131</a><td> * the element to interact with or the button to click with.<tr><td><a id="l132"></a><a href="#l132">132</a><td> * Defaults to {@link webdriver.Button.LEFT} if neither an element nor<tr><td><a id="l133"></a><a href="#l133">133</a><td> * button is specified.<tr><td><a id="l134"></a><a href="#l134">134</a><td> * @param {webdriver.Button=} opt_button The button to use. Defaults to<tr><td><a id="l135"></a><a href="#l135">135</a><td> * {@link webdriver.Button.LEFT}. Ignored if the previous argument is<tr><td><a id="l136"></a><a href="#l136">136</a><td> * provided as a button.<tr><td><a id="l137"></a><a href="#l137">137</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l138"></a><a href="#l138">138</a><td> * @private<tr><td><a id="l139"></a><a href="#l139">139</a><td> */<tr><td><a id="l140"></a><a href="#l140">140</a><td>webdriver.ActionSequence.prototype.scheduleMouseAction_ = function(<tr><td><a id="l141"></a><a href="#l141">141</a><td> description, commandName, opt_elementOrButton, opt_button) {<tr><td><a id="l142"></a><a href="#l142">142</a><td> var button;<tr><td><a id="l143"></a><a href="#l143">143</a><td> if (goog.isNumber(opt_elementOrButton)) {<tr><td><a id="l144"></a><a href="#l144">144</a><td> button = opt_elementOrButton;<tr><td><a id="l145"></a><a href="#l145">145</a><td> } else {<tr><td><a id="l146"></a><a href="#l146">146</a><td> if (opt_elementOrButton) {<tr><td><a id="l147"></a><a href="#l147">147</a><td> this.mouseMove(<tr><td><a id="l148"></a><a href="#l148">148</a><td> /** @type {!webdriver.WebElement} */ (opt_elementOrButton));<tr><td><a id="l149"></a><a href="#l149">149</a><td> }<tr><td><a id="l150"></a><a href="#l150">150</a><td> button = goog.isDef(opt_button) ? opt_button : webdriver.Button.LEFT;<tr><td><a id="l151"></a><a href="#l151">151</a><td> }<tr><td><a id="l152"></a><a href="#l152">152</a><td><tr><td><a id="l153"></a><a href="#l153">153</a><td> var command = new webdriver.Command(commandName).<tr><td><a id="l154"></a><a href="#l154">154</a><td> setParameter(&#39;button&#39;, button);<tr><td><a id="l155"></a><a href="#l155">155</a><td> this.schedule_(description, command);<tr><td><a id="l156"></a><a href="#l156">156</a><td> return this;<tr><td><a id="l157"></a><a href="#l157">157</a><td>};<tr><td><a id="l158"></a><a href="#l158">158</a><td><tr><td><a id="l159"></a><a href="#l159">159</a><td><tr><td><a id="l160"></a><a href="#l160">160</a><td>/**<tr><td><a id="l161"></a><a href="#l161">161</a><td> * Presses a mouse button. The mouse button will not be released until<tr><td><a id="l162"></a><a href="#l162">162</a><td> * {@link #mouseUp} is called, regardless of whether that call is made in this<tr><td><a id="l163"></a><a href="#l163">163</a><td> * sequence or another. The behavior for out-of-order events (e.g. mouseDown,<tr><td><a id="l164"></a><a href="#l164">164</a><td> * click) is undefined.<tr><td><a id="l165"></a><a href="#l165">165</a><td> *<tr><td><a id="l166"></a><a href="#l166">166</a><td> * If an element is provided, the mouse will first be moved to the center<tr><td><a id="l167"></a><a href="#l167">167</a><td> * of that element. This is equivalent to:<tr><td><a id="l168"></a><a href="#l168">168</a><td> *<tr><td><a id="l169"></a><a href="#l169">169</a><td> * sequence.mouseMove(element).mouseDown()<tr><td><a id="l170"></a><a href="#l170">170</a><td> *<tr><td><a id="l171"></a><a href="#l171">171</a><td> * Warning: this method currently only supports the left mouse button. See<tr><td><a id="l172"></a><a href="#l172">172</a><td> * [issue 4047](http://code.google.com/p/selenium/issues/detail?id=4047).<tr><td><a id="l173"></a><a href="#l173">173</a><td> *<tr><td><a id="l174"></a><a href="#l174">174</a><td> * @param {(webdriver.WebElement|webdriver.Button)=} opt_elementOrButton Either<tr><td><a id="l175"></a><a href="#l175">175</a><td> * the element to interact with or the button to click with.<tr><td><a id="l176"></a><a href="#l176">176</a><td> * Defaults to {@link webdriver.Button.LEFT} if neither an element nor<tr><td><a id="l177"></a><a href="#l177">177</a><td> * button is specified.<tr><td><a id="l178"></a><a href="#l178">178</a><td> * @param {webdriver.Button=} opt_button The button to use. Defaults to<tr><td><a id="l179"></a><a href="#l179">179</a><td> * {@link webdriver.Button.LEFT}. Ignored if a button is provided as the<tr><td><a id="l180"></a><a href="#l180">180</a><td> * first argument.<tr><td><a id="l181"></a><a href="#l181">181</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l182"></a><a href="#l182">182</a><td> */<tr><td><a id="l183"></a><a href="#l183">183</a><td>webdriver.ActionSequence.prototype.mouseDown = function(opt_elementOrButton,<tr><td><a id="l184"></a><a href="#l184">184</a><td> opt_button) {<tr><td><a id="l185"></a><a href="#l185">185</a><td> return this.scheduleMouseAction_(&#39;mouseDown&#39;,<tr><td><a id="l186"></a><a href="#l186">186</a><td> webdriver.CommandName.MOUSE_DOWN, opt_elementOrButton, opt_button);<tr><td><a id="l187"></a><a href="#l187">187</a><td>};<tr><td><a id="l188"></a><a href="#l188">188</a><td><tr><td><a id="l189"></a><a href="#l189">189</a><td><tr><td><a id="l190"></a><a href="#l190">190</a><td>/**<tr><td><a id="l191"></a><a href="#l191">191</a><td> * Releases a mouse button. Behavior is undefined for calling this function<tr><td><a id="l192"></a><a href="#l192">192</a><td> * without a previous call to {@link #mouseDown}.<tr><td><a id="l193"></a><a href="#l193">193</a><td> *<tr><td><a id="l194"></a><a href="#l194">194</a><td> * If an element is provided, the mouse will first be moved to the center<tr><td><a id="l195"></a><a href="#l195">195</a><td> * of that element. This is equivalent to:<tr><td><a id="l196"></a><a href="#l196">196</a><td> *<tr><td><a id="l197"></a><a href="#l197">197</a><td> * sequence.mouseMove(element).mouseUp()<tr><td><a id="l198"></a><a href="#l198">198</a><td> *<tr><td><a id="l199"></a><a href="#l199">199</a><td> * Warning: this method currently only supports the left mouse button. See<tr><td><a id="l200"></a><a href="#l200">200</a><td> * [issue 4047](http://code.google.com/p/selenium/issues/detail?id=4047).<tr><td><a id="l201"></a><a href="#l201">201</a><td> *<tr><td><a id="l202"></a><a href="#l202">202</a><td> * @param {(webdriver.WebElement|webdriver.Button)=} opt_elementOrButton Either<tr><td><a id="l203"></a><a href="#l203">203</a><td> * the element to interact with or the button to click with.<tr><td><a id="l204"></a><a href="#l204">204</a><td> * Defaults to {@link webdriver.Button.LEFT} if neither an element nor<tr><td><a id="l205"></a><a href="#l205">205</a><td> * button is specified.<tr><td><a id="l206"></a><a href="#l206">206</a><td> * @param {webdriver.Button=} opt_button The button to use. Defaults to<tr><td><a id="l207"></a><a href="#l207">207</a><td> * {@link webdriver.Button.LEFT}. Ignored if a button is provided as the<tr><td><a id="l208"></a><a href="#l208">208</a><td> * first argument.<tr><td><a id="l209"></a><a href="#l209">209</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l210"></a><a href="#l210">210</a><td> */<tr><td><a id="l211"></a><a href="#l211">211</a><td>webdriver.ActionSequence.prototype.mouseUp = function(opt_elementOrButton,<tr><td><a id="l212"></a><a href="#l212">212</a><td> opt_button) {<tr><td><a id="l213"></a><a href="#l213">213</a><td> return this.scheduleMouseAction_(&#39;mouseUp&#39;,<tr><td><a id="l214"></a><a href="#l214">214</a><td> webdriver.CommandName.MOUSE_UP, opt_elementOrButton, opt_button);<tr><td><a id="l215"></a><a href="#l215">215</a><td>};<tr><td><a id="l216"></a><a href="#l216">216</a><td><tr><td><a id="l217"></a><a href="#l217">217</a><td><tr><td><a id="l218"></a><a href="#l218">218</a><td>/**<tr><td><a id="l219"></a><a href="#l219">219</a><td> * Convenience function for performing a &quot;drag and drop&quot; manuever. The target<tr><td><a id="l220"></a><a href="#l220">220</a><td> * element may be moved to the location of another element, or by an offset (in<tr><td><a id="l221"></a><a href="#l221">221</a><td> * pixels).<tr><td><a id="l222"></a><a href="#l222">222</a><td> * @param {!webdriver.WebElement} element The element to drag.<tr><td><a id="l223"></a><a href="#l223">223</a><td> * @param {(!webdriver.WebElement|{x: number, y: number})} location The<tr><td><a id="l224"></a><a href="#l224">224</a><td> * location to drag to, either as another WebElement or an offset in pixels.<tr><td><a id="l225"></a><a href="#l225">225</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l226"></a><a href="#l226">226</a><td> */<tr><td><a id="l227"></a><a href="#l227">227</a><td>webdriver.ActionSequence.prototype.dragAndDrop = function(element, location) {<tr><td><a id="l228"></a><a href="#l228">228</a><td> return this.mouseDown(element).mouseMove(location).mouseUp();<tr><td><a id="l229"></a><a href="#l229">229</a><td>};<tr><td><a id="l230"></a><a href="#l230">230</a><td><tr><td><a id="l231"></a><a href="#l231">231</a><td><tr><td><a id="l232"></a><a href="#l232">232</a><td>/**<tr><td><a id="l233"></a><a href="#l233">233</a><td> * Clicks a mouse button.<tr><td><a id="l234"></a><a href="#l234">234</a><td> *<tr><td><a id="l235"></a><a href="#l235">235</a><td> * If an element is provided, the mouse will first be moved to the center<tr><td><a id="l236"></a><a href="#l236">236</a><td> * of that element. This is equivalent to:<tr><td><a id="l237"></a><a href="#l237">237</a><td> *<tr><td><a id="l238"></a><a href="#l238">238</a><td> * sequence.mouseMove(element).click()<tr><td><a id="l239"></a><a href="#l239">239</a><td> *<tr><td><a id="l240"></a><a href="#l240">240</a><td> * @param {(webdriver.WebElement|webdriver.Button)=} opt_elementOrButton Either<tr><td><a id="l241"></a><a href="#l241">241</a><td> * the element to interact with or the button to click with.<tr><td><a id="l242"></a><a href="#l242">242</a><td> * Defaults to {@link webdriver.Button.LEFT} if neither an element nor<tr><td><a id="l243"></a><a href="#l243">243</a><td> * button is specified.<tr><td><a id="l244"></a><a href="#l244">244</a><td> * @param {webdriver.Button=} opt_button The button to use. Defaults to<tr><td><a id="l245"></a><a href="#l245">245</a><td> * {@link webdriver.Button.LEFT}. Ignored if a button is provided as the<tr><td><a id="l246"></a><a href="#l246">246</a><td> * first argument.<tr><td><a id="l247"></a><a href="#l247">247</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l248"></a><a href="#l248">248</a><td> */<tr><td><a id="l249"></a><a href="#l249">249</a><td>webdriver.ActionSequence.prototype.click = function(opt_elementOrButton,<tr><td><a id="l250"></a><a href="#l250">250</a><td> opt_button) {<tr><td><a id="l251"></a><a href="#l251">251</a><td> return this.scheduleMouseAction_(&#39;click&#39;,<tr><td><a id="l252"></a><a href="#l252">252</a><td> webdriver.CommandName.CLICK, opt_elementOrButton, opt_button);<tr><td><a id="l253"></a><a href="#l253">253</a><td>};<tr><td><a id="l254"></a><a href="#l254">254</a><td><tr><td><a id="l255"></a><a href="#l255">255</a><td><tr><td><a id="l256"></a><a href="#l256">256</a><td>/**<tr><td><a id="l257"></a><a href="#l257">257</a><td> * Double-clicks a mouse button.<tr><td><a id="l258"></a><a href="#l258">258</a><td> *<tr><td><a id="l259"></a><a href="#l259">259</a><td> * If an element is provided, the mouse will first be moved to the center of<tr><td><a id="l260"></a><a href="#l260">260</a><td> * that element. This is equivalent to:<tr><td><a id="l261"></a><a href="#l261">261</a><td> *<tr><td><a id="l262"></a><a href="#l262">262</a><td> * sequence.mouseMove(element).doubleClick()<tr><td><a id="l263"></a><a href="#l263">263</a><td> *<tr><td><a id="l264"></a><a href="#l264">264</a><td> * Warning: this method currently only supports the left mouse button. See<tr><td><a id="l265"></a><a href="#l265">265</a><td> * [issue 4047](http://code.google.com/p/selenium/issues/detail?id=4047).<tr><td><a id="l266"></a><a href="#l266">266</a><td> *<tr><td><a id="l267"></a><a href="#l267">267</a><td> * @param {(webdriver.WebElement|webdriver.Button)=} opt_elementOrButton Either<tr><td><a id="l268"></a><a href="#l268">268</a><td> * the element to interact with or the button to click with.<tr><td><a id="l269"></a><a href="#l269">269</a><td> * Defaults to {@link webdriver.Button.LEFT} if neither an element nor<tr><td><a id="l270"></a><a href="#l270">270</a><td> * button is specified.<tr><td><a id="l271"></a><a href="#l271">271</a><td> * @param {webdriver.Button=} opt_button The button to use. Defaults to<tr><td><a id="l272"></a><a href="#l272">272</a><td> * {@link webdriver.Button.LEFT}. Ignored if a button is provided as the<tr><td><a id="l273"></a><a href="#l273">273</a><td> * first argument.<tr><td><a id="l274"></a><a href="#l274">274</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l275"></a><a href="#l275">275</a><td> */<tr><td><a id="l276"></a><a href="#l276">276</a><td>webdriver.ActionSequence.prototype.doubleClick = function(opt_elementOrButton,<tr><td><a id="l277"></a><a href="#l277">277</a><td> opt_button) {<tr><td><a id="l278"></a><a href="#l278">278</a><td> return this.scheduleMouseAction_(&#39;doubleClick&#39;,<tr><td><a id="l279"></a><a href="#l279">279</a><td> webdriver.CommandName.DOUBLE_CLICK, opt_elementOrButton, opt_button);<tr><td><a id="l280"></a><a href="#l280">280</a><td>};<tr><td><a id="l281"></a><a href="#l281">281</a><td><tr><td><a id="l282"></a><a href="#l282">282</a><td><tr><td><a id="l283"></a><a href="#l283">283</a><td>/**<tr><td><a id="l284"></a><a href="#l284">284</a><td> * Schedules a keyboard action.<tr><td><a id="l285"></a><a href="#l285">285</a><td> * @param {string} description A simple descriptive label for the scheduled<tr><td><a id="l286"></a><a href="#l286">286</a><td> * action.<tr><td><a id="l287"></a><a href="#l287">287</a><td> * @param {!Array.&lt;(string|!webdriver.Key)&gt;} keys The keys to send.<tr><td><a id="l288"></a><a href="#l288">288</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l289"></a><a href="#l289">289</a><td> * @private<tr><td><a id="l290"></a><a href="#l290">290</a><td> */<tr><td><a id="l291"></a><a href="#l291">291</a><td>webdriver.ActionSequence.prototype.scheduleKeyboardAction_ = function(<tr><td><a id="l292"></a><a href="#l292">292</a><td> description, keys) {<tr><td><a id="l293"></a><a href="#l293">293</a><td> var command =<tr><td><a id="l294"></a><a href="#l294">294</a><td> new webdriver.Command(webdriver.CommandName.SEND_KEYS_TO_ACTIVE_ELEMENT).<tr><td><a id="l295"></a><a href="#l295">295</a><td> setParameter(&#39;value&#39;, keys);<tr><td><a id="l296"></a><a href="#l296">296</a><td> this.schedule_(description, command);<tr><td><a id="l297"></a><a href="#l297">297</a><td> return this;<tr><td><a id="l298"></a><a href="#l298">298</a><td>};<tr><td><a id="l299"></a><a href="#l299">299</a><td><tr><td><a id="l300"></a><a href="#l300">300</a><td><tr><td><a id="l301"></a><a href="#l301">301</a><td>/**<tr><td><a id="l302"></a><a href="#l302">302</a><td> * Checks that a key is a modifier key.<tr><td><a id="l303"></a><a href="#l303">303</a><td> * @param {!webdriver.Key} key The key to check.<tr><td><a id="l304"></a><a href="#l304">304</a><td> * @throws {Error} If the key is not a modifier key.<tr><td><a id="l305"></a><a href="#l305">305</a><td> * @private<tr><td><a id="l306"></a><a href="#l306">306</a><td> */<tr><td><a id="l307"></a><a href="#l307">307</a><td>webdriver.ActionSequence.checkModifierKey_ = function(key) {<tr><td><a id="l308"></a><a href="#l308">308</a><td> if (key !== webdriver.Key.ALT &amp;&amp; key !== webdriver.Key.CONTROL &amp;&amp;<tr><td><a id="l309"></a><a href="#l309">309</a><td> key !== webdriver.Key.SHIFT &amp;&amp; key !== webdriver.Key.COMMAND) {<tr><td><a id="l310"></a><a href="#l310">310</a><td> throw Error(&#39;Not a modifier key&#39;);<tr><td><a id="l311"></a><a href="#l311">311</a><td> }<tr><td><a id="l312"></a><a href="#l312">312</a><td>};<tr><td><a id="l313"></a><a href="#l313">313</a><td><tr><td><a id="l314"></a><a href="#l314">314</a><td><tr><td><a id="l315"></a><a href="#l315">315</a><td>/**<tr><td><a id="l316"></a><a href="#l316">316</a><td> * Performs a modifier key press. The modifier key is &lt;em&gt;not released&lt;/em&gt;<tr><td><a id="l317"></a><a href="#l317">317</a><td> * until {@link #keyUp} or {@link #sendKeys} is called. The key press will be<tr><td><a id="l318"></a><a href="#l318">318</a><td> * targetted at the currently focused element.<tr><td><a id="l319"></a><a href="#l319">319</a><td> * @param {!webdriver.Key} key The modifier key to push. Must be one of<tr><td><a id="l320"></a><a href="#l320">320</a><td> * {ALT, CONTROL, SHIFT, COMMAND, META}.<tr><td><a id="l321"></a><a href="#l321">321</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l322"></a><a href="#l322">322</a><td> * @throws {Error} If the key is not a valid modifier key.<tr><td><a id="l323"></a><a href="#l323">323</a><td> */<tr><td><a id="l324"></a><a href="#l324">324</a><td>webdriver.ActionSequence.prototype.keyDown = function(key) {<tr><td><a id="l325"></a><a href="#l325">325</a><td> webdriver.ActionSequence.checkModifierKey_(key);<tr><td><a id="l326"></a><a href="#l326">326</a><td> return this.scheduleKeyboardAction_(&#39;keyDown&#39;, [key]);<tr><td><a id="l327"></a><a href="#l327">327</a><td>};<tr><td><a id="l328"></a><a href="#l328">328</a><td><tr><td><a id="l329"></a><a href="#l329">329</a><td><tr><td><a id="l330"></a><a href="#l330">330</a><td>/**<tr><td><a id="l331"></a><a href="#l331">331</a><td> * Performs a modifier key release. The release is targetted at the currently<tr><td><a id="l332"></a><a href="#l332">332</a><td> * focused element.<tr><td><a id="l333"></a><a href="#l333">333</a><td> * @param {!webdriver.Key} key The modifier key to release. Must be one of<tr><td><a id="l334"></a><a href="#l334">334</a><td> * {ALT, CONTROL, SHIFT, COMMAND, META}.<tr><td><a id="l335"></a><a href="#l335">335</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l336"></a><a href="#l336">336</a><td> * @throws {Error} If the key is not a valid modifier key.<tr><td><a id="l337"></a><a href="#l337">337</a><td> */<tr><td><a id="l338"></a><a href="#l338">338</a><td>webdriver.ActionSequence.prototype.keyUp = function(key) {<tr><td><a id="l339"></a><a href="#l339">339</a><td> webdriver.ActionSequence.checkModifierKey_(key);<tr><td><a id="l340"></a><a href="#l340">340</a><td> return this.scheduleKeyboardAction_(&#39;keyUp&#39;, [key]);<tr><td><a id="l341"></a><a href="#l341">341</a><td>};<tr><td><a id="l342"></a><a href="#l342">342</a><td><tr><td><a id="l343"></a><a href="#l343">343</a><td><tr><td><a id="l344"></a><a href="#l344">344</a><td>/**<tr><td><a id="l345"></a><a href="#l345">345</a><td> * Simulates typing multiple keys. Each modifier key encountered in the<tr><td><a id="l346"></a><a href="#l346">346</a><td> * sequence will not be released until it is encountered again. All key events<tr><td><a id="l347"></a><a href="#l347">347</a><td> * will be targetted at the currently focused element.<tr><td><a id="l348"></a><a href="#l348">348</a><td> * @param {...(string|!webdriver.Key|!Array.&lt;(string|!webdriver.Key)&gt;)} var_args<tr><td><a id="l349"></a><a href="#l349">349</a><td> * The keys to type.<tr><td><a id="l350"></a><a href="#l350">350</a><td> * @return {!webdriver.ActionSequence} A self reference.<tr><td><a id="l351"></a><a href="#l351">351</a><td> * @throws {Error} If the key is not a valid modifier key.<tr><td><a id="l352"></a><a href="#l352">352</a><td> */<tr><td><a id="l353"></a><a href="#l353">353</a><td>webdriver.ActionSequence.prototype.sendKeys = function(var_args) {<tr><td><a id="l354"></a><a href="#l354">354</a><td> var keys = goog.array.flatten(goog.array.slice(arguments, 0));<tr><td><a id="l355"></a><a href="#l355">355</a><td> return this.scheduleKeyboardAction_(&#39;sendKeys&#39;, keys);<tr><td><a id="l356"></a><a href="#l356">356</a><td>};</table></div></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>
@@ -1 +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>button.js</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 class="srcfile"><h1>lib/webdriver/button.js</h1><div><table><tr><td><a id="l1"></a><a href="#l1">1</a><td>// Licensed to the Software Freedom Conservancy (SFC) under one<tr><td><a id="l2"></a><a href="#l2">2</a><td>// or more contributor license agreements. See the NOTICE file<tr><td><a id="l3"></a><a href="#l3">3</a><td>// distributed with this work for additional information<tr><td><a id="l4"></a><a href="#l4">4</a><td>// regarding copyright ownership. The SFC licenses this file<tr><td><a id="l5"></a><a href="#l5">5</a><td>// to you under the Apache License, Version 2.0 (the<tr><td><a id="l6"></a><a href="#l6">6</a><td>// &quot;License&quot;); you may not use this file except in compliance<tr><td><a id="l7"></a><a href="#l7">7</a><td>// with the License. You may obtain a copy of the License at<tr><td><a id="l8"></a><a href="#l8">8</a><td>//<tr><td><a id="l9"></a><a href="#l9">9</a><td>// http://www.apache.org/licenses/LICENSE-2.0<tr><td><a id="l10"></a><a href="#l10">10</a><td>//<tr><td><a id="l11"></a><a href="#l11">11</a><td>// Unless required by applicable law or agreed to in writing,<tr><td><a id="l12"></a><a href="#l12">12</a><td>// software distributed under the License is distributed on an<tr><td><a id="l13"></a><a href="#l13">13</a><td>// &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<tr><td><a id="l14"></a><a href="#l14">14</a><td>// KIND, either express or implied. See the License for the<tr><td><a id="l15"></a><a href="#l15">15</a><td>// specific language governing permissions and limitations<tr><td><a id="l16"></a><a href="#l16">16</a><td>// under the License.<tr><td><a id="l17"></a><a href="#l17">17</a><td><tr><td><a id="l18"></a><a href="#l18">18</a><td>goog.provide(&#39;webdriver.Button&#39;);<tr><td><a id="l19"></a><a href="#l19">19</a><td><tr><td><a id="l20"></a><a href="#l20">20</a><td><tr><td><a id="l21"></a><a href="#l21">21</a><td>/**<tr><td><a id="l22"></a><a href="#l22">22</a><td> * Enumeration of the buttons used in the advanced interactions API.<tr><td><a id="l23"></a><a href="#l23">23</a><td> * @enum {number}<tr><td><a id="l24"></a><a href="#l24">24</a><td> */<tr><td><a id="l25"></a><a href="#l25">25</a><td>webdriver.Button = {<tr><td><a id="l26"></a><a href="#l26">26</a><td> LEFT: 0,<tr><td><a id="l27"></a><a href="#l27">27</a><td> MIDDLE: 1,<tr><td><a id="l28"></a><a href="#l28">28</a><td> RIGHT: 2<tr><td><a id="l29"></a><a href="#l29">29</a><td>};</table></div></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>
@@ -1 +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>capabilities.js</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 class="srcfile"><h1>lib/webdriver/capabilities.js</h1><div><table><tr><td><a id="l1"></a><a href="#l1">1</a><td>// Licensed to the Software Freedom Conservancy (SFC) under one<tr><td><a id="l2"></a><a href="#l2">2</a><td>// or more contributor license agreements. See the NOTICE file<tr><td><a id="l3"></a><a href="#l3">3</a><td>// distributed with this work for additional information<tr><td><a id="l4"></a><a href="#l4">4</a><td>// regarding copyright ownership. The SFC licenses this file<tr><td><a id="l5"></a><a href="#l5">5</a><td>// to you under the Apache License, Version 2.0 (the<tr><td><a id="l6"></a><a href="#l6">6</a><td>// &quot;License&quot;); you may not use this file except in compliance<tr><td><a id="l7"></a><a href="#l7">7</a><td>// with the License. You may obtain a copy of the License at<tr><td><a id="l8"></a><a href="#l8">8</a><td>//<tr><td><a id="l9"></a><a href="#l9">9</a><td>// http://www.apache.org/licenses/LICENSE-2.0<tr><td><a id="l10"></a><a href="#l10">10</a><td>//<tr><td><a id="l11"></a><a href="#l11">11</a><td>// Unless required by applicable law or agreed to in writing,<tr><td><a id="l12"></a><a href="#l12">12</a><td>// software distributed under the License is distributed on an<tr><td><a id="l13"></a><a href="#l13">13</a><td>// &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<tr><td><a id="l14"></a><a href="#l14">14</a><td>// KIND, either express or implied. See the License for the<tr><td><a id="l15"></a><a href="#l15">15</a><td>// specific language governing permissions and limitations<tr><td><a id="l16"></a><a href="#l16">16</a><td>// under the License.<tr><td><a id="l17"></a><a href="#l17">17</a><td><tr><td><a id="l18"></a><a href="#l18">18</a><td>/**<tr><td><a id="l19"></a><a href="#l19">19</a><td> * @fileoverview Defines the webdriver.Capabilities class.<tr><td><a id="l20"></a><a href="#l20">20</a><td> */<tr><td><a id="l21"></a><a href="#l21">21</a><td><tr><td><a id="l22"></a><a href="#l22">22</a><td>goog.provide(&#39;webdriver.Browser&#39;);<tr><td><a id="l23"></a><a href="#l23">23</a><td>goog.provide(&#39;webdriver.Capabilities&#39;);<tr><td><a id="l24"></a><a href="#l24">24</a><td>goog.provide(&#39;webdriver.Capability&#39;);<tr><td><a id="l25"></a><a href="#l25">25</a><td>goog.provide(&#39;webdriver.ProxyConfig&#39;);<tr><td><a id="l26"></a><a href="#l26">26</a><td><tr><td><a id="l27"></a><a href="#l27">27</a><td>goog.require(&#39;webdriver.Serializable&#39;);<tr><td><a id="l28"></a><a href="#l28">28</a><td>goog.require(&#39;webdriver.logging&#39;);<tr><td><a id="l29"></a><a href="#l29">29</a><td><tr><td><a id="l30"></a><a href="#l30">30</a><td><tr><td><a id="l31"></a><a href="#l31">31</a><td><tr><td><a id="l32"></a><a href="#l32">32</a><td>/**<tr><td><a id="l33"></a><a href="#l33">33</a><td> * Recognized browser names.<tr><td><a id="l34"></a><a href="#l34">34</a><td> * @enum {string}<tr><td><a id="l35"></a><a href="#l35">35</a><td> */<tr><td><a id="l36"></a><a href="#l36">36</a><td>webdriver.Browser = {<tr><td><a id="l37"></a><a href="#l37">37</a><td> ANDROID: &#39;android&#39;,<tr><td><a id="l38"></a><a href="#l38">38</a><td> CHROME: &#39;chrome&#39;,<tr><td><a id="l39"></a><a href="#l39">39</a><td> FIREFOX: &#39;firefox&#39;,<tr><td><a id="l40"></a><a href="#l40">40</a><td> IE: &#39;internet explorer&#39;,<tr><td><a id="l41"></a><a href="#l41">41</a><td> INTERNET_EXPLORER: &#39;internet explorer&#39;,<tr><td><a id="l42"></a><a href="#l42">42</a><td> IPAD: &#39;iPad&#39;,<tr><td><a id="l43"></a><a href="#l43">43</a><td> IPHONE: &#39;iPhone&#39;,<tr><td><a id="l44"></a><a href="#l44">44</a><td> OPERA: &#39;opera&#39;,<tr><td><a id="l45"></a><a href="#l45">45</a><td> PHANTOM_JS: &#39;phantomjs&#39;,<tr><td><a id="l46"></a><a href="#l46">46</a><td> SAFARI: &#39;safari&#39;,<tr><td><a id="l47"></a><a href="#l47">47</a><td> HTMLUNIT: &#39;htmlunit&#39;<tr><td><a id="l48"></a><a href="#l48">48</a><td>};<tr><td><a id="l49"></a><a href="#l49">49</a><td><tr><td><a id="l50"></a><a href="#l50">50</a><td><tr><td><a id="l51"></a><a href="#l51">51</a><td><tr><td><a id="l52"></a><a href="#l52">52</a><td>/**<tr><td><a id="l53"></a><a href="#l53">53</a><td> * Describes how a proxy should be configured for a WebDriver session.<tr><td><a id="l54"></a><a href="#l54">54</a><td> * Proxy configuration object, as defined by the WebDriver wire protocol.<tr><td><a id="l55"></a><a href="#l55">55</a><td> * @typedef {(<tr><td><a id="l56"></a><a href="#l56">56</a><td> * {proxyType: string}|<tr><td><a id="l57"></a><a href="#l57">57</a><td> * {proxyType: string,<tr><td><a id="l58"></a><a href="#l58">58</a><td> * proxyAutoconfigUrl: string}|<tr><td><a id="l59"></a><a href="#l59">59</a><td> * {proxyType: string,<tr><td><a id="l60"></a><a href="#l60">60</a><td> * ftpProxy: string,<tr><td><a id="l61"></a><a href="#l61">61</a><td> * httpProxy: string,<tr><td><a id="l62"></a><a href="#l62">62</a><td> * sslProxy: string,<tr><td><a id="l63"></a><a href="#l63">63</a><td> * noProxy: string})}<tr><td><a id="l64"></a><a href="#l64">64</a><td> */<tr><td><a id="l65"></a><a href="#l65">65</a><td>webdriver.ProxyConfig;<tr><td><a id="l66"></a><a href="#l66">66</a><td><tr><td><a id="l67"></a><a href="#l67">67</a><td><tr><td><a id="l68"></a><a href="#l68">68</a><td><tr><td><a id="l69"></a><a href="#l69">69</a><td>/**<tr><td><a id="l70"></a><a href="#l70">70</a><td> * Common webdriver capability keys.<tr><td><a id="l71"></a><a href="#l71">71</a><td> * @enum {string}<tr><td><a id="l72"></a><a href="#l72">72</a><td> */<tr><td><a id="l73"></a><a href="#l73">73</a><td>webdriver.Capability = {<tr><td><a id="l74"></a><a href="#l74">74</a><td><tr><td><a id="l75"></a><a href="#l75">75</a><td> /**<tr><td><a id="l76"></a><a href="#l76">76</a><td> * Indicates whether a driver should accept all SSL certs by default. This<tr><td><a id="l77"></a><a href="#l77">77</a><td> * capability only applies when requesting a new session. To query whether<tr><td><a id="l78"></a><a href="#l78">78</a><td> * a driver can handle insecure SSL certs, see {@link #SECURE_SSL}.<tr><td><a id="l79"></a><a href="#l79">79</a><td> */<tr><td><a id="l80"></a><a href="#l80">80</a><td> ACCEPT_SSL_CERTS: &#39;acceptSslCerts&#39;,<tr><td><a id="l81"></a><a href="#l81">81</a><td><tr><td><a id="l82"></a><a href="#l82">82</a><td><tr><td><a id="l83"></a><a href="#l83">83</a><td> /**<tr><td><a id="l84"></a><a href="#l84">84</a><td> * The browser name. Common browser names are defined in the<tr><td><a id="l85"></a><a href="#l85">85</a><td> * {@link webdriver.Browser} enum.<tr><td><a id="l86"></a><a href="#l86">86</a><td> */<tr><td><a id="l87"></a><a href="#l87">87</a><td> BROWSER_NAME: &#39;browserName&#39;,<tr><td><a id="l88"></a><a href="#l88">88</a><td><tr><td><a id="l89"></a><a href="#l89">89</a><td> /**<tr><td><a id="l90"></a><a href="#l90">90</a><td> * Defines how elements should be scrolled into the viewport for interaction.<tr><td><a id="l91"></a><a href="#l91">91</a><td> * This capability will be set to zero (0) if elements are aligned with the<tr><td><a id="l92"></a><a href="#l92">92</a><td> * top of the viewport, or one (1) if aligned with the bottom. The default<tr><td><a id="l93"></a><a href="#l93">93</a><td> * behavior is to align with the top of the viewport.<tr><td><a id="l94"></a><a href="#l94">94</a><td> */<tr><td><a id="l95"></a><a href="#l95">95</a><td> ELEMENT_SCROLL_BEHAVIOR: &#39;elementScrollBehavior&#39;,<tr><td><a id="l96"></a><a href="#l96">96</a><td><tr><td><a id="l97"></a><a href="#l97">97</a><td> /**<tr><td><a id="l98"></a><a href="#l98">98</a><td> * Whether the driver is capable of handling modal alerts (e.g. alert,<tr><td><a id="l99"></a><a href="#l99">99</a><td> * confirm, prompt). To define how a driver &lt;i&gt;should&lt;/i&gt; handle alerts,<tr><td><a id="l100"></a><a href="#l100">100</a><td> * use {@link #UNEXPECTED_ALERT_BEHAVIOR}.<tr><td><a id="l101"></a><a href="#l101">101</a><td> */<tr><td><a id="l102"></a><a href="#l102">102</a><td> HANDLES_ALERTS: &#39;handlesAlerts&#39;,<tr><td><a id="l103"></a><a href="#l103">103</a><td><tr><td><a id="l104"></a><a href="#l104">104</a><td> /**<tr><td><a id="l105"></a><a href="#l105">105</a><td> * Key for the logging driver logging preferences.<tr><td><a id="l106"></a><a href="#l106">106</a><td> */<tr><td><a id="l107"></a><a href="#l107">107</a><td> LOGGING_PREFS: &#39;loggingPrefs&#39;,<tr><td><a id="l108"></a><a href="#l108">108</a><td><tr><td><a id="l109"></a><a href="#l109">109</a><td> /**<tr><td><a id="l110"></a><a href="#l110">110</a><td> * Whether this session generates native events when simulating user input.<tr><td><a id="l111"></a><a href="#l111">111</a><td> */<tr><td><a id="l112"></a><a href="#l112">112</a><td> NATIVE_EVENTS: &#39;nativeEvents&#39;,<tr><td><a id="l113"></a><a href="#l113">113</a><td><tr><td><a id="l114"></a><a href="#l114">114</a><td> /**<tr><td><a id="l115"></a><a href="#l115">115</a><td> * Describes the platform the browser is running on. Will be one of<tr><td><a id="l116"></a><a href="#l116">116</a><td> * ANDROID, IOS, LINUX, MAC, UNIX, or WINDOWS. When &lt;i&gt;requesting&lt;/i&gt; a<tr><td><a id="l117"></a><a href="#l117">117</a><td> * session, ANY may be used to indicate no platform preference (this is<tr><td><a id="l118"></a><a href="#l118">118</a><td> * semantically equivalent to omitting the platform capability).<tr><td><a id="l119"></a><a href="#l119">119</a><td> */<tr><td><a id="l120"></a><a href="#l120">120</a><td> PLATFORM: &#39;platform&#39;,<tr><td><a id="l121"></a><a href="#l121">121</a><td><tr><td><a id="l122"></a><a href="#l122">122</a><td> /**<tr><td><a id="l123"></a><a href="#l123">123</a><td> * Describes the proxy configuration to use for a new WebDriver session.<tr><td><a id="l124"></a><a href="#l124">124</a><td> */<tr><td><a id="l125"></a><a href="#l125">125</a><td> PROXY: &#39;proxy&#39;,<tr><td><a id="l126"></a><a href="#l126">126</a><td><tr><td><a id="l127"></a><a href="#l127">127</a><td> /** Whether the driver supports changing the brower&#39;s orientation. */<tr><td><a id="l128"></a><a href="#l128">128</a><td> ROTATABLE: &#39;rotatable&#39;,<tr><td><a id="l129"></a><a href="#l129">129</a><td><tr><td><a id="l130"></a><a href="#l130">130</a><td> /**<tr><td><a id="l131"></a><a href="#l131">131</a><td> * Whether a driver is only capable of handling secure SSL certs. To request<tr><td><a id="l132"></a><a href="#l132">132</a><td> * that a driver accept insecure SSL certs by default, use<tr><td><a id="l133"></a><a href="#l133">133</a><td> * {@link #ACCEPT_SSL_CERTS}.<tr><td><a id="l134"></a><a href="#l134">134</a><td> */<tr><td><a id="l135"></a><a href="#l135">135</a><td> SECURE_SSL: &#39;secureSsl&#39;,<tr><td><a id="l136"></a><a href="#l136">136</a><td><tr><td><a id="l137"></a><a href="#l137">137</a><td> /** Whether the driver supports manipulating the app cache. */<tr><td><a id="l138"></a><a href="#l138">138</a><td> SUPPORTS_APPLICATION_CACHE: &#39;applicationCacheEnabled&#39;,<tr><td><a id="l139"></a><a href="#l139">139</a><td><tr><td><a id="l140"></a><a href="#l140">140</a><td> /** Whether the driver supports locating elements with CSS selectors. */<tr><td><a id="l141"></a><a href="#l141">141</a><td> SUPPORTS_CSS_SELECTORS: &#39;cssSelectorsEnabled&#39;,<tr><td><a id="l142"></a><a href="#l142">142</a><td><tr><td><a id="l143"></a><a href="#l143">143</a><td> /** Whether the browser supports JavaScript. */<tr><td><a id="l144"></a><a href="#l144">144</a><td> SUPPORTS_JAVASCRIPT: &#39;javascriptEnabled&#39;,<tr><td><a id="l145"></a><a href="#l145">145</a><td><tr><td><a id="l146"></a><a href="#l146">146</a><td> /** Whether the driver supports controlling the browser&#39;s location info. */<tr><td><a id="l147"></a><a href="#l147">147</a><td> SUPPORTS_LOCATION_CONTEXT: &#39;locationContextEnabled&#39;,<tr><td><a id="l148"></a><a href="#l148">148</a><td><tr><td><a id="l149"></a><a href="#l149">149</a><td> /** Whether the driver supports taking screenshots. */<tr><td><a id="l150"></a><a href="#l150">150</a><td> TAKES_SCREENSHOT: &#39;takesScreenshot&#39;,<tr><td><a id="l151"></a><a href="#l151">151</a><td><tr><td><a id="l152"></a><a href="#l152">152</a><td> /**<tr><td><a id="l153"></a><a href="#l153">153</a><td> * Defines how the driver should handle unexpected alerts. The value should<tr><td><a id="l154"></a><a href="#l154">154</a><td> * be one of &quot;accept&quot;, &quot;dismiss&quot;, or &quot;ignore.<tr><td><a id="l155"></a><a href="#l155">155</a><td> */<tr><td><a id="l156"></a><a href="#l156">156</a><td> UNEXPECTED_ALERT_BEHAVIOR: &#39;unexpectedAlertBehavior&#39;,<tr><td><a id="l157"></a><a href="#l157">157</a><td><tr><td><a id="l158"></a><a href="#l158">158</a><td> /** Defines the browser version. */<tr><td><a id="l159"></a><a href="#l159">159</a><td> VERSION: &#39;version&#39;<tr><td><a id="l160"></a><a href="#l160">160</a><td>};<tr><td><a id="l161"></a><a href="#l161">161</a><td><tr><td><a id="l162"></a><a href="#l162">162</a><td><tr><td><a id="l163"></a><a href="#l163">163</a><td><tr><td><a id="l164"></a><a href="#l164">164</a><td>/**<tr><td><a id="l165"></a><a href="#l165">165</a><td> * @param {(webdriver.Capabilities|Object)=} opt_other Another set of<tr><td><a id="l166"></a><a href="#l166">166</a><td> * capabilities to merge into this instance.<tr><td><a id="l167"></a><a href="#l167">167</a><td> * @constructor<tr><td><a id="l168"></a><a href="#l168">168</a><td> * @extends {webdriver.Serializable.&lt;!Object.&lt;string, ?&gt;&gt;}<tr><td><a id="l169"></a><a href="#l169">169</a><td> */<tr><td><a id="l170"></a><a href="#l170">170</a><td>webdriver.Capabilities = function(opt_other) {<tr><td><a id="l171"></a><a href="#l171">171</a><td> webdriver.Serializable.call(this);<tr><td><a id="l172"></a><a href="#l172">172</a><td><tr><td><a id="l173"></a><a href="#l173">173</a><td> /** @private {!Object.&lt;string, ?&gt;} */<tr><td><a id="l174"></a><a href="#l174">174</a><td> this.caps_ = {};<tr><td><a id="l175"></a><a href="#l175">175</a><td><tr><td><a id="l176"></a><a href="#l176">176</a><td> if (opt_other) {<tr><td><a id="l177"></a><a href="#l177">177</a><td> this.merge(opt_other);<tr><td><a id="l178"></a><a href="#l178">178</a><td> }<tr><td><a id="l179"></a><a href="#l179">179</a><td>};<tr><td><a id="l180"></a><a href="#l180">180</a><td>goog.inherits(webdriver.Capabilities, webdriver.Serializable);<tr><td><a id="l181"></a><a href="#l181">181</a><td><tr><td><a id="l182"></a><a href="#l182">182</a><td><tr><td><a id="l183"></a><a href="#l183">183</a><td>/**<tr><td><a id="l184"></a><a href="#l184">184</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for Android.<tr><td><a id="l185"></a><a href="#l185">185</a><td> */<tr><td><a id="l186"></a><a href="#l186">186</a><td>webdriver.Capabilities.android = function() {<tr><td><a id="l187"></a><a href="#l187">187</a><td> return new webdriver.Capabilities().<tr><td><a id="l188"></a><a href="#l188">188</a><td> set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.ANDROID).<tr><td><a id="l189"></a><a href="#l189">189</a><td> set(webdriver.Capability.PLATFORM, &#39;ANDROID&#39;);<tr><td><a id="l190"></a><a href="#l190">190</a><td>};<tr><td><a id="l191"></a><a href="#l191">191</a><td><tr><td><a id="l192"></a><a href="#l192">192</a><td><tr><td><a id="l193"></a><a href="#l193">193</a><td>/**<tr><td><a id="l194"></a><a href="#l194">194</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for Chrome.<tr><td><a id="l195"></a><a href="#l195">195</a><td> */<tr><td><a id="l196"></a><a href="#l196">196</a><td>webdriver.Capabilities.chrome = function() {<tr><td><a id="l197"></a><a href="#l197">197</a><td> return new webdriver.Capabilities().<tr><td><a id="l198"></a><a href="#l198">198</a><td> set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.CHROME);<tr><td><a id="l199"></a><a href="#l199">199</a><td>};<tr><td><a id="l200"></a><a href="#l200">200</a><td><tr><td><a id="l201"></a><a href="#l201">201</a><td><tr><td><a id="l202"></a><a href="#l202">202</a><td>/**<tr><td><a id="l203"></a><a href="#l203">203</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for Firefox.<tr><td><a id="l204"></a><a href="#l204">204</a><td> */<tr><td><a id="l205"></a><a href="#l205">205</a><td>webdriver.Capabilities.firefox = function() {<tr><td><a id="l206"></a><a href="#l206">206</a><td> return new webdriver.Capabilities().<tr><td><a id="l207"></a><a href="#l207">207</a><td> set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.FIREFOX);<tr><td><a id="l208"></a><a href="#l208">208</a><td>};<tr><td><a id="l209"></a><a href="#l209">209</a><td><tr><td><a id="l210"></a><a href="#l210">210</a><td><tr><td><a id="l211"></a><a href="#l211">211</a><td>/**<tr><td><a id="l212"></a><a href="#l212">212</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for<tr><td><a id="l213"></a><a href="#l213">213</a><td> * Internet Explorer.<tr><td><a id="l214"></a><a href="#l214">214</a><td> */<tr><td><a id="l215"></a><a href="#l215">215</a><td>webdriver.Capabilities.ie = function() {<tr><td><a id="l216"></a><a href="#l216">216</a><td> return new webdriver.Capabilities().<tr><td><a id="l217"></a><a href="#l217">217</a><td> set(webdriver.Capability.BROWSER_NAME,<tr><td><a id="l218"></a><a href="#l218">218</a><td> webdriver.Browser.INTERNET_EXPLORER).<tr><td><a id="l219"></a><a href="#l219">219</a><td> set(webdriver.Capability.PLATFORM, &#39;WINDOWS&#39;);<tr><td><a id="l220"></a><a href="#l220">220</a><td>};<tr><td><a id="l221"></a><a href="#l221">221</a><td><tr><td><a id="l222"></a><a href="#l222">222</a><td><tr><td><a id="l223"></a><a href="#l223">223</a><td>/**<tr><td><a id="l224"></a><a href="#l224">224</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for iPad.<tr><td><a id="l225"></a><a href="#l225">225</a><td> */<tr><td><a id="l226"></a><a href="#l226">226</a><td>webdriver.Capabilities.ipad = function() {<tr><td><a id="l227"></a><a href="#l227">227</a><td> return new webdriver.Capabilities().<tr><td><a id="l228"></a><a href="#l228">228</a><td> set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.IPAD).<tr><td><a id="l229"></a><a href="#l229">229</a><td> set(webdriver.Capability.PLATFORM, &#39;MAC&#39;);<tr><td><a id="l230"></a><a href="#l230">230</a><td>};<tr><td><a id="l231"></a><a href="#l231">231</a><td><tr><td><a id="l232"></a><a href="#l232">232</a><td><tr><td><a id="l233"></a><a href="#l233">233</a><td>/**<tr><td><a id="l234"></a><a href="#l234">234</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for iPhone.<tr><td><a id="l235"></a><a href="#l235">235</a><td> */<tr><td><a id="l236"></a><a href="#l236">236</a><td>webdriver.Capabilities.iphone = function() {<tr><td><a id="l237"></a><a href="#l237">237</a><td> return new webdriver.Capabilities().<tr><td><a id="l238"></a><a href="#l238">238</a><td> set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.IPHONE).<tr><td><a id="l239"></a><a href="#l239">239</a><td> set(webdriver.Capability.PLATFORM, &#39;MAC&#39;);<tr><td><a id="l240"></a><a href="#l240">240</a><td>};<tr><td><a id="l241"></a><a href="#l241">241</a><td><tr><td><a id="l242"></a><a href="#l242">242</a><td><tr><td><a id="l243"></a><a href="#l243">243</a><td>/**<tr><td><a id="l244"></a><a href="#l244">244</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for Opera.<tr><td><a id="l245"></a><a href="#l245">245</a><td> */<tr><td><a id="l246"></a><a href="#l246">246</a><td>webdriver.Capabilities.opera = function() {<tr><td><a id="l247"></a><a href="#l247">247</a><td> return new webdriver.Capabilities().<tr><td><a id="l248"></a><a href="#l248">248</a><td> set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.OPERA);<tr><td><a id="l249"></a><a href="#l249">249</a><td>};<tr><td><a id="l250"></a><a href="#l250">250</a><td><tr><td><a id="l251"></a><a href="#l251">251</a><td>/**<tr><td><a id="l252"></a><a href="#l252">252</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for<tr><td><a id="l253"></a><a href="#l253">253</a><td> * PhantomJS.<tr><td><a id="l254"></a><a href="#l254">254</a><td> */<tr><td><a id="l255"></a><a href="#l255">255</a><td>webdriver.Capabilities.phantomjs = function() {<tr><td><a id="l256"></a><a href="#l256">256</a><td> return new webdriver.Capabilities().<tr><td><a id="l257"></a><a href="#l257">257</a><td> set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.PHANTOM_JS);<tr><td><a id="l258"></a><a href="#l258">258</a><td>};<tr><td><a id="l259"></a><a href="#l259">259</a><td><tr><td><a id="l260"></a><a href="#l260">260</a><td><tr><td><a id="l261"></a><a href="#l261">261</a><td>/**<tr><td><a id="l262"></a><a href="#l262">262</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for Safari.<tr><td><a id="l263"></a><a href="#l263">263</a><td> */<tr><td><a id="l264"></a><a href="#l264">264</a><td>webdriver.Capabilities.safari = function() {<tr><td><a id="l265"></a><a href="#l265">265</a><td> return new webdriver.Capabilities().<tr><td><a id="l266"></a><a href="#l266">266</a><td> set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.SAFARI).<tr><td><a id="l267"></a><a href="#l267">267</a><td> set(webdriver.Capability.PLATFORM, &#39;MAC&#39;);<tr><td><a id="l268"></a><a href="#l268">268</a><td>};<tr><td><a id="l269"></a><a href="#l269">269</a><td><tr><td><a id="l270"></a><a href="#l270">270</a><td><tr><td><a id="l271"></a><a href="#l271">271</a><td>/**<tr><td><a id="l272"></a><a href="#l272">272</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for HTMLUnit.<tr><td><a id="l273"></a><a href="#l273">273</a><td> */<tr><td><a id="l274"></a><a href="#l274">274</a><td>webdriver.Capabilities.htmlunit = function() {<tr><td><a id="l275"></a><a href="#l275">275</a><td> return new webdriver.Capabilities().<tr><td><a id="l276"></a><a href="#l276">276</a><td> set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.HTMLUNIT);<tr><td><a id="l277"></a><a href="#l277">277</a><td>};<tr><td><a id="l278"></a><a href="#l278">278</a><td><tr><td><a id="l279"></a><a href="#l279">279</a><td><tr><td><a id="l280"></a><a href="#l280">280</a><td>/**<tr><td><a id="l281"></a><a href="#l281">281</a><td> * @return {!webdriver.Capabilities} A basic set of capabilities for HTMLUnit<tr><td><a id="l282"></a><a href="#l282">282</a><td> * with enabled Javascript.<tr><td><a id="l283"></a><a href="#l283">283</a><td> */<tr><td><a id="l284"></a><a href="#l284">284</a><td>webdriver.Capabilities.htmlunitwithjs = function() {<tr><td><a id="l285"></a><a href="#l285">285</a><td> return new webdriver.Capabilities().<tr><td><a id="l286"></a><a href="#l286">286</a><td> set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.HTMLUNIT).<tr><td><a id="l287"></a><a href="#l287">287</a><td> set(webdriver.Capability.SUPPORTS_JAVASCRIPT, true);<tr><td><a id="l288"></a><a href="#l288">288</a><td>};<tr><td><a id="l289"></a><a href="#l289">289</a><td><tr><td><a id="l290"></a><a href="#l290">290</a><td><tr><td><a id="l291"></a><a href="#l291">291</a><td>/**<tr><td><a id="l292"></a><a href="#l292">292</a><td> * @return {!Object.&lt;string, ?&gt;} The JSON representation of this instance. Note,<tr><td><a id="l293"></a><a href="#l293">293</a><td> * the returned object may contain nested promises that are promised values.<tr><td><a id="l294"></a><a href="#l294">294</a><td> * @override<tr><td><a id="l295"></a><a href="#l295">295</a><td> */<tr><td><a id="l296"></a><a href="#l296">296</a><td>webdriver.Capabilities.prototype.serialize = function() {<tr><td><a id="l297"></a><a href="#l297">297</a><td> return this.caps_;<tr><td><a id="l298"></a><a href="#l298">298</a><td>};<tr><td><a id="l299"></a><a href="#l299">299</a><td><tr><td><a id="l300"></a><a href="#l300">300</a><td><tr><td><a id="l301"></a><a href="#l301">301</a><td>/**<tr><td><a id="l302"></a><a href="#l302">302</a><td> * Merges another set of capabilities into this instance. Any duplicates in<tr><td><a id="l303"></a><a href="#l303">303</a><td> * the provided set will override those already set on this instance.<tr><td><a id="l304"></a><a href="#l304">304</a><td> * @param {!(webdriver.Capabilities|Object)} other The capabilities to<tr><td><a id="l305"></a><a href="#l305">305</a><td> * merge into this instance.<tr><td><a id="l306"></a><a href="#l306">306</a><td> * @return {!webdriver.Capabilities} A self reference.<tr><td><a id="l307"></a><a href="#l307">307</a><td> */<tr><td><a id="l308"></a><a href="#l308">308</a><td>webdriver.Capabilities.prototype.merge = function(other) {<tr><td><a id="l309"></a><a href="#l309">309</a><td> var caps = other instanceof webdriver.Capabilities ?<tr><td><a id="l310"></a><a href="#l310">310</a><td> other.caps_ : other;<tr><td><a id="l311"></a><a href="#l311">311</a><td> for (var key in caps) {<tr><td><a id="l312"></a><a href="#l312">312</a><td> if (caps.hasOwnProperty(key)) {<tr><td><a id="l313"></a><a href="#l313">313</a><td> this.set(key, caps[key]);<tr><td><a id="l314"></a><a href="#l314">314</a><td> }<tr><td><a id="l315"></a><a href="#l315">315</a><td> }<tr><td><a id="l316"></a><a href="#l316">316</a><td> return this;<tr><td><a id="l317"></a><a href="#l317">317</a><td>};<tr><td><a id="l318"></a><a href="#l318">318</a><td><tr><td><a id="l319"></a><a href="#l319">319</a><td><tr><td><a id="l320"></a><a href="#l320">320</a><td>/**<tr><td><a id="l321"></a><a href="#l321">321</a><td> * @param {string} key The capability to set.<tr><td><a id="l322"></a><a href="#l322">322</a><td> * @param {*} value The capability value. Capability values must be JSON<tr><td><a id="l323"></a><a href="#l323">323</a><td> * serializable. Pass {@code null} to unset the capability.<tr><td><a id="l324"></a><a href="#l324">324</a><td> * @return {!webdriver.Capabilities} A self reference.<tr><td><a id="l325"></a><a href="#l325">325</a><td> */<tr><td><a id="l326"></a><a href="#l326">326</a><td>webdriver.Capabilities.prototype.set = function(key, value) {<tr><td><a id="l327"></a><a href="#l327">327</a><td> if (goog.isDefAndNotNull(value)) {<tr><td><a id="l328"></a><a href="#l328">328</a><td> this.caps_[key] = value;<tr><td><a id="l329"></a><a href="#l329">329</a><td> } else {<tr><td><a id="l330"></a><a href="#l330">330</a><td> delete this.caps_[key];<tr><td><a id="l331"></a><a href="#l331">331</a><td> }<tr><td><a id="l332"></a><a href="#l332">332</a><td> return this;<tr><td><a id="l333"></a><a href="#l333">333</a><td>};<tr><td><a id="l334"></a><a href="#l334">334</a><td><tr><td><a id="l335"></a><a href="#l335">335</a><td><tr><td><a id="l336"></a><a href="#l336">336</a><td>/**<tr><td><a id="l337"></a><a href="#l337">337</a><td> * @param {string} key The capability to return.<tr><td><a id="l338"></a><a href="#l338">338</a><td> * @return {*} The capability with the given key, or {@code null} if it has<tr><td><a id="l339"></a><a href="#l339">339</a><td> * not been set.<tr><td><a id="l340"></a><a href="#l340">340</a><td> */<tr><td><a id="l341"></a><a href="#l341">341</a><td>webdriver.Capabilities.prototype.get = function(key) {<tr><td><a id="l342"></a><a href="#l342">342</a><td> var val = null;<tr><td><a id="l343"></a><a href="#l343">343</a><td> if (this.caps_.hasOwnProperty(key)) {<tr><td><a id="l344"></a><a href="#l344">344</a><td> val = this.caps_[key];<tr><td><a id="l345"></a><a href="#l345">345</a><td> }<tr><td><a id="l346"></a><a href="#l346">346</a><td> return goog.isDefAndNotNull(val) ? val : null;<tr><td><a id="l347"></a><a href="#l347">347</a><td>};<tr><td><a id="l348"></a><a href="#l348">348</a><td><tr><td><a id="l349"></a><a href="#l349">349</a><td><tr><td><a id="l350"></a><a href="#l350">350</a><td>/**<tr><td><a id="l351"></a><a href="#l351">351</a><td> * @param {string} key The capability to check.<tr><td><a id="l352"></a><a href="#l352">352</a><td> * @return {boolean} Whether the specified capability is set.<tr><td><a id="l353"></a><a href="#l353">353</a><td> */<tr><td><a id="l354"></a><a href="#l354">354</a><td>webdriver.Capabilities.prototype.has = function(key) {<tr><td><a id="l355"></a><a href="#l355">355</a><td> return !!this.get(key);<tr><td><a id="l356"></a><a href="#l356">356</a><td>};<tr><td><a id="l357"></a><a href="#l357">357</a><td><tr><td><a id="l358"></a><a href="#l358">358</a><td><tr><td><a id="l359"></a><a href="#l359">359</a><td>/**<tr><td><a id="l360"></a><a href="#l360">360</a><td> * Sets the logging preferences. Preferences may be specified as a<tr><td><a id="l361"></a><a href="#l361">361</a><td> * {@link webdriver.logging.Preferences} instance, or a as a map of log-type to<tr><td><a id="l362"></a><a href="#l362">362</a><td> * log-level.<tr><td><a id="l363"></a><a href="#l363">363</a><td> * @param {!(webdriver.logging.Preferences|Object.&lt;string, string&gt;)} prefs The<tr><td><a id="l364"></a><a href="#l364">364</a><td> * logging preferences.<tr><td><a id="l365"></a><a href="#l365">365</a><td> * @return {!webdriver.Capabilities} A self reference.<tr><td><a id="l366"></a><a href="#l366">366</a><td> */<tr><td><a id="l367"></a><a href="#l367">367</a><td>webdriver.Capabilities.prototype.setLoggingPrefs = function(prefs) {<tr><td><a id="l368"></a><a href="#l368">368</a><td> return this.set(webdriver.Capability.LOGGING_PREFS, prefs);<tr><td><a id="l369"></a><a href="#l369">369</a><td>};<tr><td><a id="l370"></a><a href="#l370">370</a><td><tr><td><a id="l371"></a><a href="#l371">371</a><td><tr><td><a id="l372"></a><a href="#l372">372</a><td>/**<tr><td><a id="l373"></a><a href="#l373">373</a><td> * Sets the proxy configuration for this instance.<tr><td><a id="l374"></a><a href="#l374">374</a><td> * @param {webdriver.ProxyConfig} proxy The desired proxy configuration.<tr><td><a id="l375"></a><a href="#l375">375</a><td> * @return {!webdriver.Capabilities} A self reference.<tr><td><a id="l376"></a><a href="#l376">376</a><td> */<tr><td><a id="l377"></a><a href="#l377">377</a><td>webdriver.Capabilities.prototype.setProxy = function(proxy) {<tr><td><a id="l378"></a><a href="#l378">378</a><td> return this.set(webdriver.Capability.PROXY, proxy);<tr><td><a id="l379"></a><a href="#l379">379</a><td>};<tr><td><a id="l380"></a><a href="#l380">380</a><td><tr><td><a id="l381"></a><a href="#l381">381</a><td><tr><td><a id="l382"></a><a href="#l382">382</a><td>/**<tr><td><a id="l383"></a><a href="#l383">383</a><td> * Sets whether native events should be used.<tr><td><a id="l384"></a><a href="#l384">384</a><td> * @param {boolean} enabled Whether to enable native events.<tr><td><a id="l385"></a><a href="#l385">385</a><td> * @return {!webdriver.Capabilities} A self reference.<tr><td><a id="l386"></a><a href="#l386">386</a><td> */<tr><td><a id="l387"></a><a href="#l387">387</a><td>webdriver.Capabilities.prototype.setEnableNativeEvents = function(enabled) {<tr><td><a id="l388"></a><a href="#l388">388</a><td> return this.set(webdriver.Capability.NATIVE_EVENTS, enabled);<tr><td><a id="l389"></a><a href="#l389">389</a><td>};<tr><td><a id="l390"></a><a href="#l390">390</a><td><tr><td><a id="l391"></a><a href="#l391">391</a><td><tr><td><a id="l392"></a><a href="#l392">392</a><td>/**<tr><td><a id="l393"></a><a href="#l393">393</a><td> * Sets how elements should be scrolled into view for interaction.<tr><td><a id="l394"></a><a href="#l394">394</a><td> * @param {number} behavior The desired scroll behavior: either 0 to align with<tr><td><a id="l395"></a><a href="#l395">395</a><td> * the top of the viewport or 1 to align with the bottom.<tr><td><a id="l396"></a><a href="#l396">396</a><td> * @return {!webdriver.Capabilities} A self reference.<tr><td><a id="l397"></a><a href="#l397">397</a><td> */<tr><td><a id="l398"></a><a href="#l398">398</a><td>webdriver.Capabilities.prototype.setScrollBehavior = function(behavior) {<tr><td><a id="l399"></a><a href="#l399">399</a><td> return this.set(webdriver.Capability.ELEMENT_SCROLL_BEHAVIOR, behavior);<tr><td><a id="l400"></a><a href="#l400">400</a><td>};<tr><td><a id="l401"></a><a href="#l401">401</a><td><tr><td><a id="l402"></a><a href="#l402">402</a><td><tr><td><a id="l403"></a><a href="#l403">403</a><td>/**<tr><td><a id="l404"></a><a href="#l404">404</a><td> * Sets the default action to take with an unexpected alert before returning<tr><td><a id="l405"></a><a href="#l405">405</a><td> * an error.<tr><td><a id="l406"></a><a href="#l406">406</a><td> * @param {string} behavior The desired behavior; should be &quot;accept&quot;, &quot;dismiss&quot;,<tr><td><a id="l407"></a><a href="#l407">407</a><td> * or &quot;ignore&quot;. Defaults to &quot;dismiss&quot;.<tr><td><a id="l408"></a><a href="#l408">408</a><td> * @return {!webdriver.Capabilities} A self reference.<tr><td><a id="l409"></a><a href="#l409">409</a><td> */<tr><td><a id="l410"></a><a href="#l410">410</a><td>webdriver.Capabilities.prototype.setAlertBehavior = function(behavior) {<tr><td><a id="l411"></a><a href="#l411">411</a><td> return this.set(webdriver.Capability.UNEXPECTED_ALERT_BEHAVIOR, behavior);<tr><td><a id="l412"></a><a href="#l412">412</a><td>};</table></div></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>