expectedConditions.d.ts 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. import { ProtractorBrowser } from './browser';
  2. import { ElementFinder } from './element';
  3. /**
  4. * Represents a library of canned expected conditions that are useful for
  5. * protractor, especially when dealing with non-angular apps.
  6. *
  7. * Each condition returns a function that evaluates to a promise. You may mix
  8. * multiple conditions using `and`, `or`, and/or `not`. You may also
  9. * mix these conditions with any other conditions that you write.
  10. *
  11. * See ExpectedCondition Class in Selenium WebDriver codebase.
  12. * http://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html
  13. *
  14. *
  15. * @example
  16. * var EC = protractor.ExpectedConditions;
  17. * var button = $('#xyz');
  18. * var isClickable = EC.elementToBeClickable(button);
  19. *
  20. * browser.get(URL);
  21. * browser.wait(isClickable, 5000); //wait for an element to become clickable
  22. * button.click();
  23. *
  24. * // You can define your own expected condition, which is a function that
  25. * // takes no parameter and evaluates to a promise of a boolean.
  26. * var urlChanged = function() {
  27. * return browser.getCurrentUrl().then(function(url) {
  28. * return url === 'http://www.angularjs.org';
  29. * });
  30. * };
  31. *
  32. * // You can customize the conditions with EC.and, EC.or, and EC.not.
  33. * // Here's a condition to wait for url to change, $('abc') element to contain
  34. * // text 'bar', and button becomes clickable.
  35. * var condition = EC.and(urlChanged, EC.textToBePresentInElement($('abc'),
  36. * 'bar'), isClickable);
  37. * browser.get(URL);
  38. * browser.wait(condition, 5000); //wait for condition to be true.
  39. * button.click();
  40. *
  41. * @alias ExpectedConditions
  42. * @constructor
  43. */
  44. export declare class ProtractorExpectedConditions {
  45. browser: ProtractorBrowser;
  46. constructor(browser: ProtractorBrowser);
  47. /**
  48. * Negates the result of a promise.
  49. *
  50. * @example
  51. * var EC = protractor.ExpectedConditions;
  52. * var titleIsNotFoo = EC.not(EC.titleIs('Foo'));
  53. * // Waits for title to become something besides 'foo'.
  54. * browser.wait(titleIsNotFoo, 5000);
  55. *
  56. * @alias ExpectedConditions.not
  57. * @param {!function} expectedCondition
  58. *
  59. * @returns {!function} An expected condition that returns the negated value.
  60. */
  61. not(expectedCondition: Function): Function;
  62. /**
  63. * Helper function that is equivalent to the logical_and if defaultRet==true,
  64. * or logical_or if defaultRet==false
  65. *
  66. * @private
  67. * @param {boolean} defaultRet
  68. * @param {Array.<Function>} fns An array of expected conditions to chain.
  69. *
  70. * @returns {!function} An expected condition that returns a promise which
  71. * evaluates to the result of the logical chain.
  72. */
  73. logicalChain_(defaultRet: boolean, fns: Array<Function>): Function;
  74. /**
  75. * Chain a number of expected conditions using logical_and, short circuiting
  76. * at the first expected condition that evaluates to false.
  77. *
  78. * @example
  79. * var EC = protractor.ExpectedConditions;
  80. * var titleContainsFoo = EC.titleContains('Foo');
  81. * var titleIsNotFooBar = EC.not(EC.titleIs('FooBar'));
  82. * // Waits for title to contain 'Foo', but is not 'FooBar'
  83. * browser.wait(EC.and(titleContainsFoo, titleIsNotFooBar), 5000);
  84. *
  85. * @alias ExpectedConditions.and
  86. * @param {Array.<Function>} fns An array of expected conditions to 'and'
  87. * together.
  88. *
  89. * @returns {!function} An expected condition that returns a promise which
  90. * evaluates to the result of the logical and.
  91. */
  92. and(...args: Function[]): Function;
  93. /**
  94. * Chain a number of expected conditions using logical_or, short circuiting
  95. * at the first expected condition that evaluates to true.
  96. *
  97. * @alias ExpectedConditions.or
  98. * @example
  99. * var EC = protractor.ExpectedConditions;
  100. * var titleContainsFoo = EC.titleContains('Foo');
  101. * var titleContainsBar = EC.titleContains('Bar');
  102. * // Waits for title to contain either 'Foo' or 'Bar'
  103. * browser.wait(EC.or(titleContainsFoo, titleContainsBar), 5000);
  104. *
  105. * @param {Array.<Function>} fns An array of expected conditions to 'or'
  106. * together.
  107. *
  108. * @returns {!function} An expected condition that returns a promise which
  109. * evaluates to the result of the logical or.
  110. */
  111. or(...args: Function[]): Function;
  112. /**
  113. * Expect an alert to be present.
  114. *
  115. * @example
  116. * var EC = protractor.ExpectedConditions;
  117. * // Waits for an alert pops up.
  118. * browser.wait(EC.alertIsPresent(), 5000);
  119. *
  120. * @alias ExpectedConditions.alertIsPresent
  121. * @returns {!function} An expected condition that returns a promise
  122. * representing whether an alert is present.
  123. */
  124. alertIsPresent(): Function;
  125. /**
  126. * An Expectation for checking an element is visible and enabled such that you
  127. * can click it.
  128. *
  129. * @example
  130. * var EC = protractor.ExpectedConditions;
  131. * // Waits for the element with id 'abc' to be clickable.
  132. * browser.wait(EC.elementToBeClickable($('#abc')), 5000);
  133. *
  134. * @alias ExpectedConditions.elementToBeClickable
  135. * @param {!ElementFinder} elementFinder The element to check
  136. *
  137. * @returns {!function} An expected condition that returns a promise
  138. * representing whether the element is clickable.
  139. */
  140. elementToBeClickable(elementFinder: ElementFinder): Function;
  141. /**
  142. * An expectation for checking if the given text is present in the
  143. * element. Returns false if the elementFinder does not find an element.
  144. *
  145. * @example
  146. * var EC = protractor.ExpectedConditions;
  147. * // Waits for the element with id 'abc' to contain the text 'foo'.
  148. * browser.wait(EC.textToBePresentInElement($('#abc'), 'foo'), 5000);
  149. *
  150. * @alias ExpectedConditions.textToBePresentInElement
  151. * @param {!ElementFinder} elementFinder The element to check
  152. * @param {!string} text The text to verify against
  153. *
  154. * @returns {!function} An expected condition that returns a promise
  155. * representing whether the text is present in the element.
  156. */
  157. textToBePresentInElement(elementFinder: ElementFinder, text: string): Function;
  158. /**
  159. * An expectation for checking if the given text is present in the element’s
  160. * value. Returns false if the elementFinder does not find an element.
  161. *
  162. * @example
  163. * var EC = protractor.ExpectedConditions;
  164. * // Waits for the element with id 'myInput' to contain the input 'foo'.
  165. * browser.wait(EC.textToBePresentInElementValue($('#myInput'), 'foo'), 5000);
  166. *
  167. * @alias ExpectedConditions.textToBePresentInElementValue
  168. * @param {!ElementFinder} elementFinder The element to check
  169. * @param {!string} text The text to verify against
  170. *
  171. * @returns {!function} An expected condition that returns a promise
  172. * representing whether the text is present in the element's value.
  173. */
  174. textToBePresentInElementValue(elementFinder: ElementFinder, text: string): Function;
  175. /**
  176. * An expectation for checking that the title contains a case-sensitive
  177. * substring.
  178. *
  179. * @example
  180. * var EC = protractor.ExpectedConditions;
  181. * // Waits for the title to contain 'foo'.
  182. * browser.wait(EC.titleContains('foo'), 5000);
  183. *
  184. * @alias ExpectedConditions.titleContains
  185. * @param {!string} title The fragment of title expected
  186. *
  187. * @returns {!function} An expected condition that returns a promise
  188. * representing whether the title contains the string.
  189. */
  190. titleContains(title: string): Function;
  191. /**
  192. * An expectation for checking the title of a page.
  193. *
  194. * @example
  195. * var EC = protractor.ExpectedConditions;
  196. * // Waits for the title to be 'foo'.
  197. * browser.wait(EC.titleIs('foo'), 5000);
  198. *
  199. * @alias ExpectedConditions.titleIs
  200. * @param {!string} title The expected title, which must be an exact match.
  201. *
  202. * @returns {!function} An expected condition that returns a promise
  203. * representing whether the title equals the string.
  204. */
  205. titleIs(title: string): Function;
  206. /**
  207. * An expectation for checking that the URL contains a case-sensitive
  208. * substring.
  209. *
  210. * @example
  211. * var EC = protractor.ExpectedConditions;
  212. * // Waits for the URL to contain 'foo'.
  213. * browser.wait(EC.urlContains('foo'), 5000);
  214. *
  215. * @alias ExpectedConditions.urlContains
  216. * @param {!string} url The fragment of URL expected
  217. *
  218. * @returns {!function} An expected condition that returns a promise
  219. * representing whether the URL contains the string.
  220. */
  221. urlContains(url: string): Function;
  222. /**
  223. * An expectation for checking the URL of a page.
  224. *
  225. * @example
  226. * var EC = protractor.ExpectedConditions;
  227. * // Waits for the URL to be 'foo'.
  228. * browser.wait(EC.urlIs('foo'), 5000);
  229. *
  230. * @alias ExpectedConditions.urlIs
  231. * @param {!string} url The expected URL, which must be an exact match.
  232. *
  233. * @returns {!function} An expected condition that returns a promise
  234. * representing whether the url equals the string.
  235. */
  236. urlIs(url: string): Function;
  237. /**
  238. * An expectation for checking that an element is present on the DOM
  239. * of a page. This does not necessarily mean that the element is visible.
  240. * This is the opposite of 'stalenessOf'.
  241. *
  242. * @example
  243. * var EC = protractor.ExpectedConditions;
  244. * // Waits for the element with id 'abc' to be present on the dom.
  245. * browser.wait(EC.presenceOf($('#abc')), 5000);
  246. *
  247. * @alias ExpectedConditions.presenceOf
  248. * @param {!ElementFinder} elementFinder The element to check
  249. *
  250. * @returns {!function} An expected condition that returns a promise
  251. * representing whether the element is present.
  252. */
  253. presenceOf(elementFinder: ElementFinder): Function;
  254. /**
  255. * An expectation for checking that an element is not attached to the DOM
  256. * of a page. This is the opposite of 'presenceOf'.
  257. *
  258. * @example
  259. * var EC = protractor.ExpectedConditions;
  260. * // Waits for the element with id 'abc' to be no longer present on the dom.
  261. * browser.wait(EC.stalenessOf($('#abc')), 5000);
  262. *
  263. * @alias ExpectedConditions.stalenessOf
  264. * @param {!ElementFinder} elementFinder The element to check
  265. *
  266. * @returns {!function} An expected condition that returns a promise
  267. * representing whether the element is stale.
  268. */
  269. stalenessOf(elementFinder: ElementFinder): Function;
  270. /**
  271. * An expectation for checking that an element is present on the DOM of a
  272. * page and visible. Visibility means that the element is not only displayed
  273. * but also has a height and width that is greater than 0. This is the
  274. * opposite
  275. * of 'invisibilityOf'.
  276. *
  277. * @example
  278. * var EC = protractor.ExpectedConditions;
  279. * // Waits for the element with id 'abc' to be visible on the dom.
  280. * browser.wait(EC.visibilityOf($('#abc')), 5000);
  281. *
  282. * @alias ExpectedConditions.visibilityOf
  283. * @param {!ElementFinder} elementFinder The element to check
  284. *
  285. * @returns {!function} An expected condition that returns a promise
  286. * representing whether the element is visible.
  287. */
  288. visibilityOf(elementFinder: ElementFinder): Function;
  289. /**
  290. * An expectation for checking that an element is either invisible or not
  291. * present on the DOM. This is the opposite of 'visibilityOf'.
  292. *
  293. * @example
  294. * var EC = protractor.ExpectedConditions;
  295. * // Waits for the element with id 'abc' to be no longer visible on the dom.
  296. * browser.wait(EC.invisibilityOf($('#abc')), 5000);
  297. *
  298. * @alias ExpectedConditions.invisibilityOf
  299. * @param {!ElementFinder} elementFinder The element to check
  300. *
  301. * @returns {!function} An expected condition that returns a promise
  302. * representing whether the element is invisible.
  303. */
  304. invisibilityOf(elementFinder: ElementFinder): Function;
  305. /**
  306. * An expectation for checking the selection is selected.
  307. *
  308. * @example
  309. * var EC = protractor.ExpectedConditions;
  310. * // Waits for the element with id 'myCheckbox' to be selected.
  311. * browser.wait(EC.elementToBeSelected($('#myCheckbox')), 5000);
  312. *
  313. * @alias ExpectedConditions.elementToBeSelected
  314. * @param {!ElementFinder} elementFinder The element to check
  315. *
  316. * @returns {!function} An expected condition that returns a promise
  317. * representing whether the element is selected.
  318. */
  319. elementToBeSelected(elementFinder: ElementFinder): Function;
  320. }