Skip to content
This repository was archived by the owner on Jul 29, 2024. It is now read-only.

Commit 86b4dcd

Browse files
committed
adding more promise migrations
1 parent fe72df5 commit 86b4dcd

File tree

1 file changed

+44
-45
lines changed

1 file changed

+44
-45
lines changed

lib/element.ts

Lines changed: 44 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,8 @@ let WEB_ELEMENT_FUNCTIONS = [
8080
*/
8181
export class ElementArrayFinder extends WebdriverWebElement {
8282
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) {
8685
super();
8786

8887
// TODO(juliemr): might it be easier to combine this with our docs and just
@@ -215,18 +214,17 @@ export class ElementArrayFinder extends WebdriverWebElement {
215214
* });
216215
* }).first().click();
217216
*
218-
* @param {function(ElementFinder, number): webdriver.WebElement.Promise}
217+
* @param {function(ElementFinder, number): boolean|Promise<boolean>}
219218
* filterFn
220219
* Filter function that will test if an element should be returned.
221220
* filterFn can either return a boolean or a promise that resolves to a
222-
* boolean
221+
* boolean.
223222
* @returns {!ElementArrayFinder} A ElementArrayFinder that represents an
224223
* array
225224
* of element that satisfy the filter function.
226225
*/
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 {
230228
let getWebElements = async(): Promise<WebElement[]> => {
231229
const parentWebElements = await this.getWebElements();
232230
const list = parentWebElements.map((parentWebElement: WebElement, index: number) => {
@@ -266,10 +264,10 @@ export class ElementArrayFinder extends WebdriverWebElement {
266264
* expect(list.get(0).getText()).toBe('First');
267265
* expect(list.get(1).getText()).toBe('Second');
268266
*
269-
* @param {number|webdriver.promise.Promise} index Element index.
267+
* @param {number|Promise} index Element index.
270268
* @returns {ElementFinder} finder representing element at the given index.
271269
*/
272-
get(indexPromise: number|wdpromise.Promise<number>): ElementFinder {
270+
get(indexPromise: number|Promise<number>): ElementFinder {
273271
let getWebElements = async(): Promise<WebElement[]> => {
274272
let index = await indexPromise;
275273
const parentWebElements = await this.getWebElements();
@@ -538,14 +536,14 @@ export class ElementArrayFinder extends WebdriverWebElement {
538536
* @param {function(Array.<ElementFinder>)} fn
539537
* @param {function(Error)} errorFn
540538
*
541-
* @returns {!webdriver.promise.Promise} A promise which will resolve to
539+
* @returns {!Promise} A promise which will resolve to
542540
* an array of ElementFinders represented by the ElementArrayFinder.
543541
*/
544542
then<T>(
545543
fn?: (value: ElementFinder[]|any[]) => T | wdpromise.IThenable<T>,
546-
errorFn?: (error: any) => any): wdpromise.Promise<T> {
544+
errorFn?: (error: any) => any): Promise<T> {
547545
if (this.actionResults_) {
548-
return this.actionResults_.then(fn, errorFn);
546+
return this.actionResults_.then(fn, errorFn) as Promise<T>;
549547
} else {
550548
return this.asElementFinders_().then(fn, errorFn);
551549
}
@@ -582,7 +580,7 @@ export class ElementArrayFinder extends WebdriverWebElement {
582580
*
583581
* @param {function(ElementFinder)} fn Input function
584582
*
585-
* @returns {!webdriver.promise.Promise} A promise that will resolve when the
583+
* @returns {!Promise} A promise that will resolve when the
586584
* function has been called on all the ElementFinders. The promise will
587585
* resolve to null.
588586
*/
@@ -687,7 +685,7 @@ export class ElementArrayFinder extends WebdriverWebElement {
687685
* reduceFn Reduce function that reduces every element into a single
688686
* value.
689687
* @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
691689
* value of the accumulator.
692690
*/
693691
async reduce(reduceFn: Function, initialValue: any): Promise<any> {
@@ -828,20 +826,19 @@ export class ElementFinder extends WebdriverWebElement {
828826
// This filter verifies that there is only 1 element returned by the
829827
// elementArrayFinder. It will warn if there are more than 1 element and
830828
// 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');
843839
}
844-
});
840+
return [webElements[0]];
841+
}
845842
};
846843

847844
// Store a copy of the underlying elementArrayFinder, but with the more
@@ -862,7 +859,7 @@ export class ElementFinder extends WebdriverWebElement {
862859
static fromWebElement_(browser: ProtractorBrowser, webElem: WebElement, locator?: Locator):
863860
ElementFinder {
864861
let getWebElements = () => {
865-
return wdpromise.when([webElem]);
862+
return Promise.resolve([webElem]);
866863
};
867864
return new ElementArrayFinder(browser, getWebElements, locator).toElementFinder_();
868865
}
@@ -904,7 +901,7 @@ export class ElementFinder extends WebdriverWebElement {
904901
* browser.driver.findElement(by.css('.parent'));
905902
* browser.findElement(by.css('.parent'));
906903
*
907-
* @returns {webdriver.WebElementPromise}
904+
* @returns {webdriver.WebElement}
908905
*/
909906
getWebElement(): WebElementPromise {
910907
let id = this.elementArrayFinder_.getWebElements().then((parentWebElements: WebElement[]) => {
@@ -1066,18 +1063,20 @@ export class ElementFinder extends WebdriverWebElement {
10661063
* // Element not present.
10671064
* expect(element(by.binding('notPresent')).isPresent()).toBe(false);
10681065
*
1069-
* @returns {webdriver.promise.Promise<boolean>} which resolves to whether
1066+
* @returns {Promise<boolean>} which resolves to whether
10701067
* the element is present on the page.
10711068
*/
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+
}
10811080
}
10821081

10831082
/**
@@ -1097,7 +1096,7 @@ export class ElementFinder extends WebdriverWebElement {
10971096
* @returns {webdriver.promise.Promise<boolean>} which resolves to whether
10981097
* the subelement is present on the page.
10991098
*/
1100-
isElementPresent(subLocator: Locator): wdpromise.Promise<boolean> {
1099+
isElementPresent(subLocator: Locator): Promise<boolean> {
11011100
if (!subLocator) {
11021101
throw new Error(
11031102
'SubLocator is not supplied as a parameter to ' +
@@ -1143,11 +1142,11 @@ export class ElementFinder extends WebdriverWebElement {
11431142
* @returns {!webdriver.promise.Promise.<boolean>} A promise that will be
11441143
* resolved to whether the two WebElements are equal.
11451144
*/
1146-
equals(element: ElementFinder|WebElement): wdpromise.Promise<any> {
1145+
equals(element: ElementFinder|WebElement): Promise<any> {
11471146
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>;
11511150
}
11521151
}
11531152

0 commit comments

Comments
 (0)