@@ -80,9 +80,8 @@ let WEB_ELEMENT_FUNCTIONS = [
80
80
*/
81
81
export class ElementArrayFinder extends WebdriverWebElement {
82
82
constructor (
83
- public browser_ : ProtractorBrowser ,
84
- public getWebElements : ( ) => wdpromise . Promise < WebElement [ ] > = null , public locator_ ?: any ,
85
- public actionResults_ : wdpromise . Promise < any > = null ) {
83
+ public browser_ : ProtractorBrowser , public getWebElements : ( ) => Promise < WebElement [ ] > = null ,
84
+ public locator_ ?: any , public actionResults_ : wdpromise . Promise < any > = null ) {
86
85
super ( ) ;
87
86
88
87
// TODO(juliemr): might it be easier to combine this with our docs and just
@@ -215,18 +214,17 @@ export class ElementArrayFinder extends WebdriverWebElement {
215
214
* });
216
215
* }).first().click();
217
216
*
218
- * @param {function(ElementFinder, number): webdriver.WebElement. Promise }
217
+ * @param {function(ElementFinder, number): boolean| Promise<boolean> }
219
218
* filterFn
220
219
* Filter function that will test if an element should be returned.
221
220
* filterFn can either return a boolean or a promise that resolves to a
222
- * boolean
221
+ * boolean.
223
222
* @returns {!ElementArrayFinder } A ElementArrayFinder that represents an
224
223
* array
225
224
* of element that satisfy the filter function.
226
225
*/
227
- filter (
228
- filterFn : ( element : ElementFinder , index ?: number ) => boolean |
229
- wdpromise . Promise < boolean > ) : ElementArrayFinder {
226
+ filter ( filterFn : ( element : ElementFinder , index ?: number ) => boolean | Promise < boolean > ) :
227
+ ElementArrayFinder {
230
228
let getWebElements = async ( ) : Promise < WebElement [ ] > => {
231
229
const parentWebElements = await this . getWebElements ( ) ;
232
230
const list = parentWebElements . map ( ( parentWebElement : WebElement , index : number ) => {
@@ -266,10 +264,10 @@ export class ElementArrayFinder extends WebdriverWebElement {
266
264
* expect(list.get(0).getText()).toBe('First');
267
265
* expect(list.get(1).getText()).toBe('Second');
268
266
*
269
- * @param {number|webdriver.promise. Promise } index Element index.
267
+ * @param {number|Promise } index Element index.
270
268
* @returns {ElementFinder } finder representing element at the given index.
271
269
*/
272
- get ( indexPromise : number | wdpromise . Promise < number > ) : ElementFinder {
270
+ get ( indexPromise : number | Promise < number > ) : ElementFinder {
273
271
let getWebElements = async ( ) : Promise < WebElement [ ] > => {
274
272
let index = await indexPromise ;
275
273
const parentWebElements = await this . getWebElements ( ) ;
@@ -538,14 +536,14 @@ export class ElementArrayFinder extends WebdriverWebElement {
538
536
* @param {function(Array.<ElementFinder>) } fn
539
537
* @param {function(Error) } errorFn
540
538
*
541
- * @returns {!webdriver.promise. Promise } A promise which will resolve to
539
+ * @returns {!Promise } A promise which will resolve to
542
540
* an array of ElementFinders represented by the ElementArrayFinder.
543
541
*/
544
542
then < T > (
545
543
fn ?: ( value : ElementFinder [ ] | any [ ] ) => T | wdpromise . IThenable < T > ,
546
- errorFn ?: ( error : any ) => any ) : wdpromise . Promise < T > {
544
+ errorFn ?: ( error : any ) => any ) : Promise < T > {
547
545
if ( this . actionResults_ ) {
548
- return this . actionResults_ . then ( fn , errorFn ) ;
546
+ return this . actionResults_ . then ( fn , errorFn ) as Promise < T > ;
549
547
} else {
550
548
return this . asElementFinders_ ( ) . then ( fn , errorFn ) ;
551
549
}
@@ -582,7 +580,7 @@ export class ElementArrayFinder extends WebdriverWebElement {
582
580
*
583
581
* @param {function(ElementFinder) } fn Input function
584
582
*
585
- * @returns {!webdriver.promise. Promise } A promise that will resolve when the
583
+ * @returns {!Promise } A promise that will resolve when the
586
584
* function has been called on all the ElementFinders. The promise will
587
585
* resolve to null.
588
586
*/
@@ -687,7 +685,7 @@ export class ElementArrayFinder extends WebdriverWebElement {
687
685
* reduceFn Reduce function that reduces every element into a single
688
686
* value.
689
687
* @param {* } initialValue Initial value of the accumulator.
690
- * @returns {!webdriver.promise. Promise } A promise that resolves to the final
688
+ * @returns {!Promise } A promise that resolves to the final
691
689
* value of the accumulator.
692
690
*/
693
691
async reduce ( reduceFn : Function , initialValue : any ) : Promise < any > {
@@ -828,20 +826,19 @@ export class ElementFinder extends WebdriverWebElement {
828
826
// This filter verifies that there is only 1 element returned by the
829
827
// elementArrayFinder. It will warn if there are more than 1 element and
830
828
// throw an error if there are no elements.
831
- let getWebElements = ( ) : wdpromise . Promise < WebElement [ ] > => {
832
- return elementArrayFinder . getWebElements ( ) . then ( ( webElements : WebElement [ ] ) => {
833
- if ( webElements . length === 0 ) {
834
- throw new wderror . NoSuchElementError (
835
- 'No element found using locator: ' + elementArrayFinder . locator ( ) . toString ( ) ) ;
836
- } else {
837
- if ( webElements . length > 1 ) {
838
- logger . warn (
839
- 'more than one element found for locator ' +
840
- elementArrayFinder . locator ( ) . toString ( ) + ' - the first result will be used' ) ;
841
- }
842
- return [ webElements [ 0 ] ] ;
829
+ let getWebElements = async ( ) : Promise < WebElement [ ] > => {
830
+ const webElements = await elementArrayFinder . getWebElements ( ) ;
831
+ if ( webElements . length === 0 ) {
832
+ throw new wderror . NoSuchElementError (
833
+ 'No element found using locator: ' + elementArrayFinder . locator ( ) . toString ( ) ) ;
834
+ } else {
835
+ if ( webElements . length > 1 ) {
836
+ logger . warn (
837
+ 'more than one element found for locator ' + elementArrayFinder . locator ( ) . toString ( ) +
838
+ ' - the first result will be used' ) ;
843
839
}
844
- } ) ;
840
+ return [ webElements [ 0 ] ] ;
841
+ }
845
842
} ;
846
843
847
844
// Store a copy of the underlying elementArrayFinder, but with the more
@@ -862,7 +859,7 @@ export class ElementFinder extends WebdriverWebElement {
862
859
static fromWebElement_ ( browser : ProtractorBrowser , webElem : WebElement , locator ?: Locator ) :
863
860
ElementFinder {
864
861
let getWebElements = ( ) => {
865
- return wdpromise . when ( [ webElem ] ) ;
862
+ return Promise . resolve ( [ webElem ] ) ;
866
863
} ;
867
864
return new ElementArrayFinder ( browser , getWebElements , locator ) . toElementFinder_ ( ) ;
868
865
}
@@ -904,7 +901,7 @@ export class ElementFinder extends WebdriverWebElement {
904
901
* browser.driver.findElement(by.css('.parent'));
905
902
* browser.findElement(by.css('.parent'));
906
903
*
907
- * @returns {webdriver.WebElementPromise }
904
+ * @returns {webdriver.WebElement }
908
905
*/
909
906
getWebElement ( ) : WebElementPromise {
910
907
let id = this . elementArrayFinder_ . getWebElements ( ) . then ( ( parentWebElements : WebElement [ ] ) => {
@@ -1066,18 +1063,20 @@ export class ElementFinder extends WebdriverWebElement {
1066
1063
* // Element not present.
1067
1064
* expect(element(by.binding('notPresent')).isPresent()).toBe(false);
1068
1065
*
1069
- * @returns {webdriver.promise. Promise<boolean> } which resolves to whether
1066
+ * @returns {Promise<boolean> } which resolves to whether
1070
1067
* the element is present on the page.
1071
1068
*/
1072
- isPresent ( ) : wdpromise . Promise < boolean > {
1073
- return this . parentElementArrayFinder . getWebElements ( ) . then ( ( arr : any [ ] ) => {
1074
- if ( arr . length === 0 ) {
1075
- return false ;
1076
- }
1077
- return arr [ 0 ] . isEnabled ( ) . then ( ( ) => {
1078
- return true ; // is present, whether it is enabled or not
1079
- } , falseIfMissing ) ;
1080
- } , falseIfMissing ) ;
1069
+ async isPresent ( ) : Promise < boolean > {
1070
+ const arr = await this . parentElementArrayFinder . getWebElements ( ) ;
1071
+ if ( arr . length === 0 ) {
1072
+ return false ;
1073
+ }
1074
+ try {
1075
+ // is present, whether it is enabled or not
1076
+ return await arr [ 0 ] . isEnabled ( ) ;
1077
+ } catch ( err ) {
1078
+ falseIfMissing ( err ) ;
1079
+ }
1081
1080
}
1082
1081
1083
1082
/**
@@ -1097,7 +1096,7 @@ export class ElementFinder extends WebdriverWebElement {
1097
1096
* @returns {webdriver.promise.Promise<boolean> } which resolves to whether
1098
1097
* the subelement is present on the page.
1099
1098
*/
1100
- isElementPresent ( subLocator : Locator ) : wdpromise . Promise < boolean > {
1099
+ isElementPresent ( subLocator : Locator ) : Promise < boolean > {
1101
1100
if ( ! subLocator ) {
1102
1101
throw new Error (
1103
1102
'SubLocator is not supplied as a parameter to ' +
@@ -1143,11 +1142,11 @@ export class ElementFinder extends WebdriverWebElement {
1143
1142
* @returns {!webdriver.promise.Promise.<boolean> } A promise that will be
1144
1143
* resolved to whether the two WebElements are equal.
1145
1144
*/
1146
- equals ( element : ElementFinder | WebElement ) : wdpromise . Promise < any > {
1145
+ equals ( element : ElementFinder | WebElement ) : Promise < any > {
1147
1146
return WebElement . equals (
1148
- this . getWebElement ( ) ,
1149
- ( element as any ) . getWebElement ? ( element as ElementFinder ) . getWebElement ( ) :
1150
- element as WebElement ) ;
1147
+ this . getWebElement ( ) ,
1148
+ ( element as any ) . getWebElement ? ( element as ElementFinder ) . getWebElement ( ) :
1149
+ element as WebElement ) as Promise < any > ;
1151
1150
}
1152
1151
}
1153
1152
0 commit comments