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>until.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/until.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 common conditions for use with<tr><td><a id="l20"></a><a href="#l20">20</a><td> * {@link webdriver.WebDriver#wait WebDriver wait}.<tr><td><a id="l21"></a><a href="#l21">21</a><td> *<tr><td><a id="l22"></a><a href="#l22">22</a><td> * Sample usage:<tr><td><a id="l23"></a><a href="#l23">23</a><td> *<tr><td><a id="l24"></a><a href="#l24">24</a><td> * driver.get(&#39;http://www.google.com/ncr&#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> * var query = driver.wait(until.elementLocated(By.name(&#39;q&#39;)));<tr><td><a id="l27"></a><a href="#l27">27</a><td> * query.sendKeys(&#39;webdriver\n&#39;);<tr><td><a id="l28"></a><a href="#l28">28</a><td> *<tr><td><a id="l29"></a><a href="#l29">29</a><td> * driver.wait(until.titleIs(&#39;webdriver - Google Search&#39;));<tr><td><a id="l30"></a><a href="#l30">30</a><td> *<tr><td><a id="l31"></a><a href="#l31">31</a><td> * To define a custom condition, simply call WebDriver.wait with a function<tr><td><a id="l32"></a><a href="#l32">32</a><td> * that will eventually return a truthy-value (neither null, undefined, false,<tr><td><a id="l33"></a><a href="#l33">33</a><td> * 0, or the empty string):<tr><td><a id="l34"></a><a href="#l34">34</a><td> *<tr><td><a id="l35"></a><a href="#l35">35</a><td> * driver.wait(function() {<tr><td><a id="l36"></a><a href="#l36">36</a><td> * return driver.getTitle().then(function(title) {<tr><td><a id="l37"></a><a href="#l37">37</a><td> * return title === &#39;webdriver - Google Search&#39;;<tr><td><a id="l38"></a><a href="#l38">38</a><td> * });<tr><td><a id="l39"></a><a href="#l39">39</a><td> * }, 1000);<tr><td><a id="l40"></a><a href="#l40">40</a><td> */<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.provide(&#39;webdriver.until&#39;);<tr><td><a id="l43"></a><a href="#l43">43</a><td><tr><td><a id="l44"></a><a href="#l44">44</a><td>goog.require(&#39;bot.ErrorCode&#39;);<tr><td><a id="l45"></a><a href="#l45">45</a><td>goog.require(&#39;goog.array&#39;);<tr><td><a id="l46"></a><a href="#l46">46</a><td>goog.require(&#39;goog.string&#39;);<tr><td><a id="l47"></a><a href="#l47">47</a><td>goog.require(&#39;webdriver.Locator&#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>goog.scope(function() {<tr><td><a id="l52"></a><a href="#l52">52</a><td><tr><td><a id="l53"></a><a href="#l53">53</a><td>var until = webdriver.until;<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>/**<tr><td><a id="l57"></a><a href="#l57">57</a><td> * Defines a condition to<tr><td><a id="l58"></a><a href="#l58">58</a><td> * @param {string} message A descriptive error message. Should complete the<tr><td><a id="l59"></a><a href="#l59">59</a><td> * sentence &quot;Waiting [...]&quot;<tr><td><a id="l60"></a><a href="#l60">60</a><td> * @param {function(!webdriver.WebDriver): OUT} fn The condition function to<tr><td><a id="l61"></a><a href="#l61">61</a><td> * evaluate on each iteration of the wait loop.<tr><td><a id="l62"></a><a href="#l62">62</a><td> * @constructor<tr><td><a id="l63"></a><a href="#l63">63</a><td> * @struct<tr><td><a id="l64"></a><a href="#l64">64</a><td> * @final<tr><td><a id="l65"></a><a href="#l65">65</a><td> * @template OUT<tr><td><a id="l66"></a><a href="#l66">66</a><td> */<tr><td><a id="l67"></a><a href="#l67">67</a><td>until.Condition = function(message, fn) {<tr><td><a id="l68"></a><a href="#l68">68</a><td> /** @private {string} */<tr><td><a id="l69"></a><a href="#l69">69</a><td> this.description_ = &#39;Waiting &#39; + message;<tr><td><a id="l70"></a><a href="#l70">70</a><td><tr><td><a id="l71"></a><a href="#l71">71</a><td> /** @type {function(!webdriver.WebDriver): OUT} */<tr><td><a id="l72"></a><a href="#l72">72</a><td> this.fn = fn;<tr><td><a id="l73"></a><a href="#l73">73</a><td>};<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>/** @return {string} A description of this condition. */<tr><td><a id="l77"></a><a href="#l77">77</a><td>until.Condition.prototype.description = function() {<tr><td><a id="l78"></a><a href="#l78">78</a><td> return this.description_;<tr><td><a id="l79"></a><a href="#l79">79</a><td>};<tr><td><a id="l80"></a><a href="#l80">80</a><td><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> * Creates a condition that will wait until the input driver is able to switch<tr><td><a id="l84"></a><a href="#l84">84</a><td> * to the designated frame. The target frame may be specified as<tr><td><a id="l85"></a><a href="#l85">85</a><td> *<tr><td><a id="l86"></a><a href="#l86">86</a><td> * 1. a numeric index into<tr><td><a id="l87"></a><a href="#l87">87</a><td> * [window.frames](https://developer.mozilla.org/en-US/docs/Web/API/Window.frames)<tr><td><a id="l88"></a><a href="#l88">88</a><td> * for the currently selected frame.<tr><td><a id="l89"></a><a href="#l89">89</a><td> * 2. a {@link webdriver.WebElement}, which must reference a FRAME or IFRAME<tr><td><a id="l90"></a><a href="#l90">90</a><td> * element on the current page.<tr><td><a id="l91"></a><a href="#l91">91</a><td> * 3. a locator which may be used to first locate a FRAME or IFRAME on the<tr><td><a id="l92"></a><a href="#l92">92</a><td> * current page before attempting to switch to it.<tr><td><a id="l93"></a><a href="#l93">93</a><td> *<tr><td><a id="l94"></a><a href="#l94">94</a><td> * Upon successful resolution of this condition, the driver will be left<tr><td><a id="l95"></a><a href="#l95">95</a><td> * focused on the new frame.<tr><td><a id="l96"></a><a href="#l96">96</a><td> *<tr><td><a id="l97"></a><a href="#l97">97</a><td> * @param {!(number|webdriver.WebElement|<tr><td><a id="l98"></a><a href="#l98">98</a><td> * webdriver.Locator|webdriver.By.Hash|<tr><td><a id="l99"></a><a href="#l99">99</a><td> * function(!webdriver.WebDriver): !webdriver.WebElement)} frame<tr><td><a id="l100"></a><a href="#l100">100</a><td> * The frame identifier.<tr><td><a id="l101"></a><a href="#l101">101</a><td> * @return {!until.Condition.&lt;boolean&gt;} A new condition.<tr><td><a id="l102"></a><a href="#l102">102</a><td> */<tr><td><a id="l103"></a><a href="#l103">103</a><td>until.ableToSwitchToFrame = function(frame) {<tr><td><a id="l104"></a><a href="#l104">104</a><td> var condition;<tr><td><a id="l105"></a><a href="#l105">105</a><td> if (goog.isNumber(frame) || frame instanceof webdriver.WebElement) {<tr><td><a id="l106"></a><a href="#l106">106</a><td> condition = attemptToSwitchFrames;<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> condition = function(driver) {<tr><td><a id="l109"></a><a href="#l109">109</a><td> var locator =<tr><td><a id="l110"></a><a href="#l110">110</a><td> /** @type {!(webdriver.Locator|webdriver.By.Hash|Function)} */(frame);<tr><td><a id="l111"></a><a href="#l111">111</a><td> return driver.findElements(locator).then(function(els) {<tr><td><a id="l112"></a><a href="#l112">112</a><td> if (els.length) {<tr><td><a id="l113"></a><a href="#l113">113</a><td> return attemptToSwitchFrames(driver, els[0]);<tr><td><a id="l114"></a><a href="#l114">114</a><td> }<tr><td><a id="l115"></a><a href="#l115">115</a><td> });<tr><td><a id="l116"></a><a href="#l116">116</a><td> };<tr><td><a id="l117"></a><a href="#l117">117</a><td> }<tr><td><a id="l118"></a><a href="#l118">118</a><td><tr><td><a id="l119"></a><a href="#l119">119</a><td> return new until.Condition(&#39;to be able to switch to frame&#39;, condition);<tr><td><a id="l120"></a><a href="#l120">120</a><td><tr><td><a id="l121"></a><a href="#l121">121</a><td> function attemptToSwitchFrames(driver, frame) {<tr><td><a id="l122"></a><a href="#l122">122</a><td> return driver.switchTo().frame(frame).then(<tr><td><a id="l123"></a><a href="#l123">123</a><td> function() { return true; },<tr><td><a id="l124"></a><a href="#l124">124</a><td> function(e) {<tr><td><a id="l125"></a><a href="#l125">125</a><td> if (e &amp;&amp; e.code !== bot.ErrorCode.NO_SUCH_FRAME) {<tr><td><a id="l126"></a><a href="#l126">126</a><td> throw e;<tr><td><a id="l127"></a><a href="#l127">127</a><td> }<tr><td><a id="l128"></a><a href="#l128">128</a><td> });<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><tr><td><a id="l132"></a><a href="#l132">132</a><td><tr><td><a id="l133"></a><a href="#l133">133</a><td>/**<tr><td><a id="l134"></a><a href="#l134">134</a><td> * Creates a condition that waits for an alert to be opened. Upon success, the<tr><td><a id="l135"></a><a href="#l135">135</a><td> * returned promise will be fulfilled with the handle for the opened alert.<tr><td><a id="l136"></a><a href="#l136">136</a><td> *<tr><td><a id="l137"></a><a href="#l137">137</a><td> * @return {!until.Condition.&lt;!webdriver.Alert&gt;} The new condition.<tr><td><a id="l138"></a><a href="#l138">138</a><td> */<tr><td><a id="l139"></a><a href="#l139">139</a><td>until.alertIsPresent = function() {<tr><td><a id="l140"></a><a href="#l140">140</a><td> return new until.Condition(&#39;for alert to be present&#39;, function(driver) {<tr><td><a id="l141"></a><a href="#l141">141</a><td> return driver.switchTo().alert().thenCatch(function(e) {<tr><td><a id="l142"></a><a href="#l142">142</a><td> if (e &amp;&amp; e.code !== bot.ErrorCode.NO_SUCH_ALERT) {<tr><td><a id="l143"></a><a href="#l143">143</a><td> throw e;<tr><td><a id="l144"></a><a href="#l144">144</a><td> }<tr><td><a id="l145"></a><a href="#l145">145</a><td> });<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><tr><td><a id="l150"></a><a href="#l150">150</a><td>/**<tr><td><a id="l151"></a><a href="#l151">151</a><td> * Creates a condition that will wait for the current page&#39;s title to match the<tr><td><a id="l152"></a><a href="#l152">152</a><td> * given value.<tr><td><a id="l153"></a><a href="#l153">153</a><td> *<tr><td><a id="l154"></a><a href="#l154">154</a><td> * @param {string} title The expected page title.<tr><td><a id="l155"></a><a href="#l155">155</a><td> * @return {!until.Condition.&lt;boolean&gt;} The new condition.<tr><td><a id="l156"></a><a href="#l156">156</a><td> */<tr><td><a id="l157"></a><a href="#l157">157</a><td>until.titleIs = function(title) {<tr><td><a id="l158"></a><a href="#l158">158</a><td> return new until.Condition(<tr><td><a id="l159"></a><a href="#l159">159</a><td> &#39;for title to be &#39; + goog.string.quote(title),<tr><td><a id="l160"></a><a href="#l160">160</a><td> function(driver) {<tr><td><a id="l161"></a><a href="#l161">161</a><td> return driver.getTitle().then(function(t) {<tr><td><a id="l162"></a><a href="#l162">162</a><td> return t === title;<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>};<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> * Creates a condition that will wait for the current page&#39;s title to contain<tr><td><a id="l170"></a><a href="#l170">170</a><td> * the given substring.<tr><td><a id="l171"></a><a href="#l171">171</a><td> *<tr><td><a id="l172"></a><a href="#l172">172</a><td> * @param {string} substr The substring that should be present in the page<tr><td><a id="l173"></a><a href="#l173">173</a><td> * title.<tr><td><a id="l174"></a><a href="#l174">174</a><td> * @return {!until.Condition.&lt;boolean&gt;} The new condition.<tr><td><a id="l175"></a><a href="#l175">175</a><td> */<tr><td><a id="l176"></a><a href="#l176">176</a><td>until.titleContains = function(substr) {<tr><td><a id="l177"></a><a href="#l177">177</a><td> return new until.Condition(<tr><td><a id="l178"></a><a href="#l178">178</a><td> &#39;for title to contain &#39; + goog.string.quote(substr),<tr><td><a id="l179"></a><a href="#l179">179</a><td> function(driver) {<tr><td><a id="l180"></a><a href="#l180">180</a><td> return driver.getTitle().then(function(title) {<tr><td><a id="l181"></a><a href="#l181">181</a><td> return title.indexOf(substr) !== -1;<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><tr><td><a id="l186"></a><a href="#l186">186</a><td><tr><td><a id="l187"></a><a href="#l187">187</a><td>/**<tr><td><a id="l188"></a><a href="#l188">188</a><td> * Creates a condition that will wait for the current page&#39;s title to match the<tr><td><a id="l189"></a><a href="#l189">189</a><td> * given regular expression.<tr><td><a id="l190"></a><a href="#l190">190</a><td> *<tr><td><a id="l191"></a><a href="#l191">191</a><td> * @param {!RegExp} regex The regular expression to test against.<tr><td><a id="l192"></a><a href="#l192">192</a><td> * @return {!until.Condition.&lt;boolean&gt;} The new condition.<tr><td><a id="l193"></a><a href="#l193">193</a><td> */<tr><td><a id="l194"></a><a href="#l194">194</a><td>until.titleMatches = function(regex) {<tr><td><a id="l195"></a><a href="#l195">195</a><td> return new until.Condition(&#39;for title to match &#39; + regex, function(driver) {<tr><td><a id="l196"></a><a href="#l196">196</a><td> return driver.getTitle().then(function(title) {<tr><td><a id="l197"></a><a href="#l197">197</a><td> return regex.test(title);<tr><td><a id="l198"></a><a href="#l198">198</a><td> });<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>/**<tr><td><a id="l204"></a><a href="#l204">204</a><td> * Creates a condition that will loop until an element is<tr><td><a id="l205"></a><a href="#l205">205</a><td> * {@link webdriver.WebDriver#findElement found} with the given locator.<tr><td><a id="l206"></a><a href="#l206">206</a><td> *<tr><td><a id="l207"></a><a href="#l207">207</a><td> * @param {!(webdriver.Locator|webdriver.By.Hash|Function)} locator The locator<tr><td><a id="l208"></a><a href="#l208">208</a><td> * to use.<tr><td><a id="l209"></a><a href="#l209">209</a><td> * @return {!until.Condition.&lt;!webdriver.WebElement&gt;} The new condition.<tr><td><a id="l210"></a><a href="#l210">210</a><td> */<tr><td><a id="l211"></a><a href="#l211">211</a><td>until.elementLocated = function(locator) {<tr><td><a id="l212"></a><a href="#l212">212</a><td> locator = webdriver.Locator.checkLocator(locator);<tr><td><a id="l213"></a><a href="#l213">213</a><td> var locatorStr = goog.isFunction(locator) ? &#39;by function()&#39; : locator + &#39;&#39;;<tr><td><a id="l214"></a><a href="#l214">214</a><td> return new until.Condition(&#39;for element to be located &#39; + locatorStr,<tr><td><a id="l215"></a><a href="#l215">215</a><td> function(driver) {<tr><td><a id="l216"></a><a href="#l216">216</a><td> return driver.findElements(locator).then(function(elements) {<tr><td><a id="l217"></a><a href="#l217">217</a><td> return elements[0];<tr><td><a id="l218"></a><a href="#l218">218</a><td> });<tr><td><a id="l219"></a><a href="#l219">219</a><td> });<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> * Creates a condition that will loop until at least one element is<tr><td><a id="l225"></a><a href="#l225">225</a><td> * {@link webdriver.WebDriver#findElement found} with the given locator.<tr><td><a id="l226"></a><a href="#l226">226</a><td> *<tr><td><a id="l227"></a><a href="#l227">227</a><td> * @param {!(webdriver.Locator|webdriver.By.Hash|Function)} locator The locator<tr><td><a id="l228"></a><a href="#l228">228</a><td> * to use.<tr><td><a id="l229"></a><a href="#l229">229</a><td> * @return {!until.Condition.&lt;!Array.&lt;!webdriver.WebElement&gt;&gt;} The new<tr><td><a id="l230"></a><a href="#l230">230</a><td> * condition.<tr><td><a id="l231"></a><a href="#l231">231</a><td> */<tr><td><a id="l232"></a><a href="#l232">232</a><td>until.elementsLocated = function(locator) {<tr><td><a id="l233"></a><a href="#l233">233</a><td> locator = webdriver.Locator.checkLocator(locator);<tr><td><a id="l234"></a><a href="#l234">234</a><td> var locatorStr = goog.isFunction(locator) ? &#39;by function()&#39; : locator + &#39;&#39;;<tr><td><a id="l235"></a><a href="#l235">235</a><td> return new until.Condition(<tr><td><a id="l236"></a><a href="#l236">236</a><td> &#39;for at least one element to be located &#39; + locatorStr,<tr><td><a id="l237"></a><a href="#l237">237</a><td> function(driver) {<tr><td><a id="l238"></a><a href="#l238">238</a><td> return driver.findElements(locator).then(function(elements) {<tr><td><a id="l239"></a><a href="#l239">239</a><td> return elements.length &gt; 0 ? elements : null;<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><tr><td><a id="l245"></a><a href="#l245">245</a><td>/**<tr><td><a id="l246"></a><a href="#l246">246</a><td> * Creates a condition that will wait for the given element to become stale. An<tr><td><a id="l247"></a><a href="#l247">247</a><td> * element is considered stale once it is removed from the DOM, or a new page<tr><td><a id="l248"></a><a href="#l248">248</a><td> * has loaded.<tr><td><a id="l249"></a><a href="#l249">249</a><td> *<tr><td><a id="l250"></a><a href="#l250">250</a><td> * @param {!webdriver.WebElement} element The element that should become stale.<tr><td><a id="l251"></a><a href="#l251">251</a><td> * @return {!until.Condition.&lt;boolean&gt;} The new condition.<tr><td><a id="l252"></a><a href="#l252">252</a><td> */<tr><td><a id="l253"></a><a href="#l253">253</a><td>until.stalenessOf = function(element) {<tr><td><a id="l254"></a><a href="#l254">254</a><td> return new until.Condition(&#39;element to become stale&#39;, function() {<tr><td><a id="l255"></a><a href="#l255">255</a><td> return element.getTagName().then(<tr><td><a id="l256"></a><a href="#l256">256</a><td> function() { return false; },<tr><td><a id="l257"></a><a href="#l257">257</a><td> function(e) {<tr><td><a id="l258"></a><a href="#l258">258</a><td> if (e.code === bot.ErrorCode.STALE_ELEMENT_REFERENCE) {<tr><td><a id="l259"></a><a href="#l259">259</a><td> return true;<tr><td><a id="l260"></a><a href="#l260">260</a><td> }<tr><td><a id="l261"></a><a href="#l261">261</a><td> throw e;<tr><td><a id="l262"></a><a href="#l262">262</a><td> });<tr><td><a id="l263"></a><a href="#l263">263</a><td> });<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>/**<tr><td><a id="l268"></a><a href="#l268">268</a><td> * Creates a condition that will wait for the given element to become visible.<tr><td><a id="l269"></a><a href="#l269">269</a><td> *<tr><td><a id="l270"></a><a href="#l270">270</a><td> * @param {!webdriver.WebElement} element The element to test.<tr><td><a id="l271"></a><a href="#l271">271</a><td> * @return {!until.Condition.&lt;boolean&gt;} The new condition.<tr><td><a id="l272"></a><a href="#l272">272</a><td> * @see webdriver.WebDriver#isDisplayed<tr><td><a id="l273"></a><a href="#l273">273</a><td> */<tr><td><a id="l274"></a><a href="#l274">274</a><td>until.elementIsVisible = function(element) {<tr><td><a id="l275"></a><a href="#l275">275</a><td> return new until.Condition(&#39;until element is visible&#39;, function() {<tr><td><a id="l276"></a><a href="#l276">276</a><td> return element.isDisplayed();<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>/**<tr><td><a id="l282"></a><a href="#l282">282</a><td> * Creates a condition that will wait for the given element to be in the DOM,<tr><td><a id="l283"></a><a href="#l283">283</a><td> * yet not visible to the user.<tr><td><a id="l284"></a><a href="#l284">284</a><td> *<tr><td><a id="l285"></a><a href="#l285">285</a><td> * @param {!webdriver.WebElement} element The element to test.<tr><td><a id="l286"></a><a href="#l286">286</a><td> * @return {!until.Condition.&lt;boolean&gt;} The new condition.<tr><td><a id="l287"></a><a href="#l287">287</a><td> * @see webdriver.WebDriver#isDisplayed<tr><td><a id="l288"></a><a href="#l288">288</a><td> */<tr><td><a id="l289"></a><a href="#l289">289</a><td>until.elementIsNotVisible = function(element) {<tr><td><a id="l290"></a><a href="#l290">290</a><td> return new until.Condition(&#39;until element is not visible&#39;, function() {<tr><td><a id="l291"></a><a href="#l291">291</a><td> return element.isDisplayed().then(function(v) {<tr><td><a id="l292"></a><a href="#l292">292</a><td> return !v;<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>};<tr><td><a id="l296"></a><a href="#l296">296</a><td><tr><td><a id="l297"></a><a href="#l297">297</a><td><tr><td><a id="l298"></a><a href="#l298">298</a><td>/**<tr><td><a id="l299"></a><a href="#l299">299</a><td> * Creates a condition that will wait for the given element to be enabled.<tr><td><a id="l300"></a><a href="#l300">300</a><td> *<tr><td><a id="l301"></a><a href="#l301">301</a><td> * @param {!webdriver.WebElement} element The element to test.<tr><td><a id="l302"></a><a href="#l302">302</a><td> * @return {!until.Condition.&lt;boolean&gt;} The new condition.<tr><td><a id="l303"></a><a href="#l303">303</a><td> * @see webdriver.WebDriver#isEnabled<tr><td><a id="l304"></a><a href="#l304">304</a><td> */<tr><td><a id="l305"></a><a href="#l305">305</a><td>until.elementIsEnabled = function(element) {<tr><td><a id="l306"></a><a href="#l306">306</a><td> return new until.Condition(&#39;until element is enabled&#39;, function() {<tr><td><a id="l307"></a><a href="#l307">307</a><td> return element.isEnabled();<tr><td><a id="l308"></a><a href="#l308">308</a><td> });<tr><td><a id="l309"></a><a href="#l309">309</a><td>};<tr><td><a id="l310"></a><a href="#l310">310</a><td><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> * Creates a condition that will wait for the given element to be disabled.<tr><td><a id="l314"></a><a href="#l314">314</a><td> *<tr><td><a id="l315"></a><a href="#l315">315</a><td> * @param {!webdriver.WebElement} element The element to test.<tr><td><a id="l316"></a><a href="#l316">316</a><td> * @return {!until.Condition.&lt;boolean&gt;} The new condition.<tr><td><a id="l317"></a><a href="#l317">317</a><td> * @see webdriver.WebDriver#isEnabled<tr><td><a id="l318"></a><a href="#l318">318</a><td> */<tr><td><a id="l319"></a><a href="#l319">319</a><td>until.elementIsDisabled = function(element) {<tr><td><a id="l320"></a><a href="#l320">320</a><td> return new until.Condition(&#39;until element is disabled&#39;, function() {<tr><td><a id="l321"></a><a href="#l321">321</a><td> return element.isEnabled().then(function(v) {<tr><td><a id="l322"></a><a href="#l322">322</a><td> return !v;<tr><td><a id="l323"></a><a href="#l323">323</a><td> });<tr><td><a id="l324"></a><a href="#l324">324</a><td> });<tr><td><a id="l325"></a><a href="#l325">325</a><td>};<tr><td><a id="l326"></a><a href="#l326">326</a><td><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> * Creates a condition that will wait for the given element to be selected.<tr><td><a id="l330"></a><a href="#l330">330</a><td> * @param {!webdriver.WebElement} element The element to test.<tr><td><a id="l331"></a><a href="#l331">331</a><td> * @return {!until.Condition.&lt;boolean&gt;} The new condition.<tr><td><a id="l332"></a><a href="#l332">332</a><td> * @see webdriver.WebDriver#isSelected<tr><td><a id="l333"></a><a href="#l333">333</a><td> */<tr><td><a id="l334"></a><a href="#l334">334</a><td>until.elementIsSelected = function(element) {<tr><td><a id="l335"></a><a href="#l335">335</a><td> return new until.Condition(&#39;until element is selected&#39;, function() {<tr><td><a id="l336"></a><a href="#l336">336</a><td> return element.isSelected();<tr><td><a id="l337"></a><a href="#l337">337</a><td> });<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> * Creates a condition that will wait for the given element to be deselected.<tr><td><a id="l343"></a><a href="#l343">343</a><td> *<tr><td><a id="l344"></a><a href="#l344">344</a><td> * @param {!webdriver.WebElement} element The element to test.<tr><td><a id="l345"></a><a href="#l345">345</a><td> * @return {!until.Condition.&lt;boolean&gt;} The new condition.<tr><td><a id="l346"></a><a href="#l346">346</a><td> * @see webdriver.WebDriver#isSelected<tr><td><a id="l347"></a><a href="#l347">347</a><td> */<tr><td><a id="l348"></a><a href="#l348">348</a><td>until.elementIsNotSelected = function(element) {<tr><td><a id="l349"></a><a href="#l349">349</a><td> return new until.Condition(&#39;until element is not selected&#39;, function() {<tr><td><a id="l350"></a><a href="#l350">350</a><td> return element.isSelected().then(function(v) {<tr><td><a id="l351"></a><a href="#l351">351</a><td> return !v;<tr><td><a id="l352"></a><a href="#l352">352</a><td> });<tr><td><a id="l353"></a><a href="#l353">353</a><td> });<tr><td><a id="l354"></a><a href="#l354">354</a><td>};<tr><td><a id="l355"></a><a href="#l355">355</a><td><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> * Creates a condition that will wait for the given element&#39;s<tr><td><a id="l359"></a><a href="#l359">359</a><td> * {@link webdriver.WebDriver#getText visible text} to match the given<tr><td><a id="l360"></a><a href="#l360">360</a><td> * {@code text} exactly.<tr><td><a id="l361"></a><a href="#l361">361</a><td> *<tr><td><a id="l362"></a><a href="#l362">362</a><td> * @param {!webdriver.WebElement} element The element to test.<tr><td><a id="l363"></a><a href="#l363">363</a><td> * @param {string} text The expected text.<tr><td><a id="l364"></a><a href="#l364">364</a><td> * @return {!until.Condition.&lt;boolean&gt;} The new condition.<tr><td><a id="l365"></a><a href="#l365">365</a><td> * @see webdriver.WebDriver#getText<tr><td><a id="l366"></a><a href="#l366">366</a><td> */<tr><td><a id="l367"></a><a href="#l367">367</a><td>until.elementTextIs = function(element, text) {<tr><td><a id="l368"></a><a href="#l368">368</a><td> return new until.Condition(&#39;until element text is&#39;, function() {<tr><td><a id="l369"></a><a href="#l369">369</a><td> return element.getText().then(function(t) {<tr><td><a id="l370"></a><a href="#l370">370</a><td> return t === text;<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>};<tr><td><a id="l374"></a><a href="#l374">374</a><td><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> * Creates a condition that will wait for the given element&#39;s<tr><td><a id="l378"></a><a href="#l378">378</a><td> * {@link webdriver.WebDriver#getText visible text} to contain the given<tr><td><a id="l379"></a><a href="#l379">379</a><td> * substring.<tr><td><a id="l380"></a><a href="#l380">380</a><td> *<tr><td><a id="l381"></a><a href="#l381">381</a><td> * @param {!webdriver.WebElement} element The element to test.<tr><td><a id="l382"></a><a href="#l382">382</a><td> * @param {string} substr The substring to search for.<tr><td><a id="l383"></a><a href="#l383">383</a><td> * @return {!until.Condition.&lt;boolean&gt;} The new condition.<tr><td><a id="l384"></a><a href="#l384">384</a><td> * @see webdriver.WebDriver#getText<tr><td><a id="l385"></a><a href="#l385">385</a><td> */<tr><td><a id="l386"></a><a href="#l386">386</a><td>until.elementTextContains = function(element, substr) {<tr><td><a id="l387"></a><a href="#l387">387</a><td> return new until.Condition(&#39;until element text contains&#39;, function() {<tr><td><a id="l388"></a><a href="#l388">388</a><td> return element.getText().then(function(t) {<tr><td><a id="l389"></a><a href="#l389">389</a><td> return t.indexOf(substr) != -1;<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><tr><td><a id="l395"></a><a href="#l395">395</a><td>/**<tr><td><a id="l396"></a><a href="#l396">396</a><td> * Creates a condition that will wait for the given element&#39;s<tr><td><a id="l397"></a><a href="#l397">397</a><td> * {@link webdriver.WebDriver#getText visible text} to match a regular<tr><td><a id="l398"></a><a href="#l398">398</a><td> * expression.<tr><td><a id="l399"></a><a href="#l399">399</a><td> *<tr><td><a id="l400"></a><a href="#l400">400</a><td> * @param {!webdriver.WebElement} element The element to test.<tr><td><a id="l401"></a><a href="#l401">401</a><td> * @param {!RegExp} regex The regular expression to test against.<tr><td><a id="l402"></a><a href="#l402">402</a><td> * @return {!until.Condition.&lt;boolean&gt;} The new condition.<tr><td><a id="l403"></a><a href="#l403">403</a><td> * @see webdriver.WebDriver#getText<tr><td><a id="l404"></a><a href="#l404">404</a><td> */<tr><td><a id="l405"></a><a href="#l405">405</a><td>until.elementTextMatches = function(element, regex) {<tr><td><a id="l406"></a><a href="#l406">406</a><td> return new until.Condition(&#39;until element text matches&#39;, function() {<tr><td><a id="l407"></a><a href="#l407">407</a><td> return element.getText().then(function(t) {<tr><td><a id="l408"></a><a href="#l408">408</a><td> return regex.test(t);<tr><td><a id="l409"></a><a href="#l409">409</a><td> });<tr><td><a id="l410"></a><a href="#l410">410</a><td> });<tr><td><a id="l411"></a><a href="#l411">411</a><td>};<tr><td><a id="l412"></a><a href="#l412">412</a><td>}); // goog.scope</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>