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

Commit 0d593cd

Browse files
committed
chore(types): make webdriver.promise.Promise genertic
1 parent e786ea1 commit 0d593cd

File tree

3 files changed

+55
-49
lines changed

3 files changed

+55
-49
lines changed

lib/browser.ts

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,18 @@ for (let foo in webdriver) {
3434
export class Webdriver {
3535
actions: () => webdriver.ActionSequence = webdriver.WebDriver.actions;
3636
wait:
37-
(condition: webdriver.promise.Promise|webdriver.util.Condition|Function,
37+
(condition: webdriver.promise.Promise<any> | webdriver.util.Condition |
38+
Function,
3839
opt_timeout?: number,
3940
opt_message?:
40-
string) => webdriver.promise.Promise = webdriver.WebDriver.wait;
41-
sleep: (ms: number) => webdriver.promise.Promise = webdriver.WebDriver.sleep;
41+
string) => webdriver.promise.Promise<any> = webdriver.WebDriver.wait;
42+
sleep: (ms: number) => webdriver.promise.Promise<any> =
43+
webdriver.WebDriver.sleep;
4244
getCurrentUrl:
43-
() => webdriver.promise.Promise = webdriver.WebDriver.getCurrentUrl;
44-
getTitle: () => webdriver.promise.Promise = webdriver.WebDriver.getTitle;
45+
() => webdriver.promise.Promise<any> = webdriver.WebDriver.getCurrentUrl;
46+
getTitle: () => webdriver.promise.Promise<any> = webdriver.WebDriver.getTitle;
4547
takeScreenshot:
46-
() => webdriver.promise.Promise = webdriver.WebDriver.takeScreenshot;
48+
() => webdriver.promise.Promise<any> = webdriver.WebDriver.takeScreenshot;
4749
}
4850

4951
/**
@@ -188,7 +190,7 @@ export class Browser extends Webdriver {
188190
*
189191
* @type {q.Promise} Done when the new browser is ready for use
190192
*/
191-
ready: webdriver.promise.Promise;
193+
ready: webdriver.promise.Promise<any>;
192194

193195
/*
194196
* Set by the runner.
@@ -247,6 +249,7 @@ export class Browser extends Webdriver {
247249
// include functions which are overridden by protractor below.
248250
let methodsToSync = ['getCurrentUrl', 'getPageSource', 'getTitle'];
249251

252+
250253
// Mix all other driver functionality into Protractor.
251254
Object.getOwnPropertyNames(webdriver.WebDriver.prototype)
252255
.forEach((method: string) => {
@@ -300,7 +303,7 @@ export class Browser extends Webdriver {
300303
*
301304
* @returns {webdriver.promise.Promise} A promise which resolves to the capabilities object.
302305
*/
303-
getProcessedConfig: () => webdriver.promise.Promise;
306+
getProcessedConfig: () => webdriver.promise.Promise<any>;
304307

305308
/**
306309
* Fork another instance of protractor for use in interactive tests.
@@ -346,7 +349,7 @@ export class Browser extends Webdriver {
346349
*/
347350
private executeScript_(
348351
script: string|Function, description: string,
349-
...scriptArgs: any[]): webdriver.promise.Promise {
352+
...scriptArgs: any[]): webdriver.promise.Promise<any> {
350353
if (typeof script === 'function') {
351354
script = 'return (' + script + ').apply(null, arguments);';
352355
}
@@ -372,7 +375,7 @@ export class Browser extends Webdriver {
372375
*/
373376
private executeAsyncScript_(
374377
script: string|Function, description: string,
375-
...scriptArgs: any[]): webdriver.promise.Promise {
378+
...scriptArgs: any[]): webdriver.promise.Promise<any> {
376379
if (typeof script === 'function') {
377380
script = 'return (' + script + ').apply(null, arguments);';
378381
}
@@ -394,15 +397,15 @@ export class Browser extends Webdriver {
394397
* @returns {!webdriver.promise.Promise} A promise that will resolve to the
395398
* scripts return value.
396399
*/
397-
waitForAngular(opt_description?: string): webdriver.promise.Promise {
400+
waitForAngular(opt_description?: string): webdriver.promise.Promise<any> {
398401
let description = opt_description ? ' - ' + opt_description : '';
399402
if (this.ignoreSynchronization) {
400403
return this.driver.controlFlow().execute(() => {
401404
return true;
402405
}, 'Ignore Synchronization Protractor.waitForAngular()');
403406
}
404407

405-
let runWaitForAngularScript: () => webdriver.promise.Promise = () => {
408+
let runWaitForAngularScript: () => webdriver.promise.Promise<any> = () => {
406409
if (this.plugins_.skipAngularStability()) {
407410
return webdriver.promise.fulfilled();
408411
} else if (this.rootEl) {
@@ -462,7 +465,7 @@ export class Browser extends Webdriver {
462465
errMsg +=
463466
'\nWhile waiting for element with locator' + description;
464467
}
465-
let pendingTimeoutsPromise: webdriver.promise.Promise;
468+
let pendingTimeoutsPromise: webdriver.promise.Promise<any>;
466469
if (this.trackOutstandingTimeouts_) {
467470
pendingTimeoutsPromise = this.executeScript_(
468471
'return window.NG_PENDING_TIMEOUTS',
@@ -528,7 +531,7 @@ export class Browser extends Webdriver {
528531
* @returns {!webdriver.promise.Promise} A promise that will be resolved to an
529532
* array of the located {@link webdriver.WebElement}s.
530533
*/
531-
findElements(locator: Locator): webdriver.promise.Promise {
534+
findElements(locator: Locator): webdriver.promise.Promise<any> {
532535
return this.element.all(locator).getWebElements();
533536
}
534537

@@ -539,7 +542,7 @@ export class Browser extends Webdriver {
539542
* the element is present on the page.
540543
*/
541544
isElementPresent(locatorOrElement: webdriver.Locator|
542-
webdriver.WebElement): webdriver.promise.Promise {
545+
webdriver.WebElement): webdriver.promise.Promise<any> {
543546
let element = (locatorOrElement.isPresent) ? locatorOrElement :
544547
this.element(locatorOrElement);
545548
return element.isPresent();
@@ -857,7 +860,7 @@ export class Browser extends Webdriver {
857860
* @returns {!webdriver.promise.Promise} A promise that will resolve once
858861
* page has been changed.
859862
*/
860-
setLocation(url: string): webdriver.promise.Promise {
863+
setLocation(url: string): webdriver.promise.Promise<any> {
861864
this.waitForAngular();
862865
return this
863866
.executeScript_(
@@ -880,7 +883,7 @@ export class Browser extends Webdriver {
880883
* .toBe('http://angular.github.io/protractor/#/api');
881884
* @returns {string} The current absolute url from AngularJS.
882885
*/
883-
getLocationAbsUrl(): webdriver.promise.Promise {
886+
getLocationAbsUrl(): webdriver.promise.Promise<any> {
884887
this.waitForAngular();
885888
return this.executeScript_(
886889
clientSideScripts.getLocationAbsUrl, 'Protractor.getLocationAbsUrl()',
@@ -924,7 +927,8 @@ export class Browser extends Webdriver {
924927
* is done. The promise will resolve to a boolean which represents whether
925928
* this is the first time that the debugger is called.
926929
*/
927-
private validatePortAvailability_(port: number): webdriver.promise.Promise {
930+
private validatePortAvailability_(port: number):
931+
webdriver.promise.Promise<any> {
928932
if (this.debuggerValidated_) {
929933
return webdriver.promise.fulfilled(false);
930934
}

lib/element.ts

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -17,27 +17,27 @@ let WEB_ELEMENT_FUNCTIONS = [
1717
// Explicitly define webdriver.WebElement.
1818
export class WebdriverWebElement {
1919
getDriver: () => webdriver.WebDriver;
20-
getId: () => webdriver.promise.Promise;
21-
getRawId: () => webdriver.promise.Promise;
22-
serialize: () => webdriver.promise.Promise;
23-
findElement: (subLocator: Locator) => webdriver.promise.Promise;
24-
click: () => webdriver.promise.Promise;
25-
sendKeys: (...args: (string|webdriver.promise.Promise)[]) =>
26-
webdriver.promise.Promise;
27-
getTagName: () => webdriver.promise.Promise;
28-
getCssValue: (cssStyleProperty: string) => webdriver.promise.Promise;
29-
getAttribute: (attributeName: string) => webdriver.promise.Promise;
30-
getText: () => webdriver.promise.Promise;
31-
getSize: () => webdriver.promise.Promise;
32-
getLocation: () => webdriver.promise.Promise;
33-
isEnabled: () => webdriver.promise.Promise;
34-
isSelected: () => webdriver.promise.Promise;
35-
submit: () => webdriver.promise.Promise;
36-
clear: () => webdriver.promise.Promise;
37-
isDisplayed: () => webdriver.promise.Promise;
38-
takeScreenshot: (opt_scroll?: boolean) => webdriver.promise.Promise;
39-
getOuterHtml: () => webdriver.promise.Promise;
40-
getInnerHtml: () => webdriver.promise.Promise;
20+
getId: () => webdriver.promise.Promise<any>;
21+
getRawId: () => webdriver.promise.Promise<string>;
22+
serialize: () => webdriver.promise.Promise<any>;
23+
findElement: (subLocator: Locator) => webdriver.promise.Promise<any>;
24+
click: () => webdriver.promise.Promise<void>;
25+
sendKeys: (...args: (string|webdriver.promise.Promise<string>)[]) =>
26+
webdriver.promise.Promise<void>;
27+
getTagName: () => webdriver.promise.Promise<string>;
28+
getCssValue: (cssStyleProperty: string) => webdriver.promise.Promise<string>;
29+
getAttribute: (attributeName: string) => webdriver.promise.Promise<string>;
30+
getText: () => webdriver.promise.Promise<string>;
31+
getSize: () => webdriver.promise.Promise<{width: number, height: number}>;
32+
getLocation: () => webdriver.promise.Promise<{x: number, y: number}>;
33+
isEnabled: () => webdriver.promise.Promise<boolean>;
34+
isSelected: () => webdriver.promise.Promise<boolean>;
35+
submit: () => webdriver.promise.Promise<void>;
36+
clear: () => webdriver.promise.Promise<void>;
37+
isDisplayed: () => webdriver.promise.Promise<boolean>;
38+
takeScreenshot: (opt_scroll?: boolean) => webdriver.promise.Promise<string>;
39+
getOuterHtml: () => webdriver.promise.Promise<string>;
40+
getInnerHtml: () => webdriver.promise.Promise<string>;
4141
}
4242

4343
/**
@@ -99,7 +99,7 @@ export class ElementArrayFinder extends WebdriverWebElement {
9999
constructor(
100100
private browser_: Browser, getWebElements?: Function,
101101
private locator_?: any,
102-
public actionResults_: webdriver.promise.Promise = null) {
102+
public actionResults_: webdriver.promise.Promise<any> = null) {
103103
super();
104104
this.getWebElements = getWebElements || null;
105105

@@ -379,7 +379,7 @@ export class ElementArrayFinder extends WebdriverWebElement {
379379
* @returns {!webdriver.promise.Promise} A promise which resolves to the
380380
* number of elements matching the locator.
381381
*/
382-
count(): webdriver.promise.Promise {
382+
count(): webdriver.promise.Promise<any> {
383383
return this.getWebElements().then(
384384
(arr: any) => { return arr.length; },
385385
(err: any) => {
@@ -439,7 +439,7 @@ export class ElementArrayFinder extends WebdriverWebElement {
439439
* @returns {Array.<ElementFinder>} Return a promise, which resolves to a list
440440
* of ElementFinders specified by the locator.
441441
*/
442-
asElementFinders_(): webdriver.promise.Promise {
442+
asElementFinders_(): webdriver.promise.Promise<any> {
443443
return this.getWebElements().then((arr: webdriver.WebElement[]) => {
444444
return arr.map((webElem: webdriver.WebElement) => {
445445
return ElementFinder.fromWebElement_(
@@ -472,7 +472,7 @@ export class ElementArrayFinder extends WebdriverWebElement {
472472
* @returns {!webdriver.promise.Promise} A promise which will resolve to
473473
* an array of ElementFinders represented by the ElementArrayFinder.
474474
*/
475-
then(fn: Function, errorFn: Function): webdriver.promise.Promise {
475+
then(fn: Function, errorFn: Function): webdriver.promise.Promise<any> {
476476
if (this.actionResults_) {
477477
return this.actionResults_.then(fn, errorFn);
478478
} else {
@@ -506,7 +506,7 @@ export class ElementArrayFinder extends WebdriverWebElement {
506506
* function has been called on all the ElementFinders. The promise will
507507
* resolve to null.
508508
*/
509-
each(fn: Function): webdriver.promise.Promise {
509+
each(fn: Function): webdriver.promise.Promise<any> {
510510
return this.map(fn).then((): any => { return null; });
511511
}
512512

@@ -542,7 +542,7 @@ export class ElementArrayFinder extends WebdriverWebElement {
542542
* @returns {!webdriver.promise.Promise} A promise that resolves to an array
543543
* of values returned by the map function.
544544
*/
545-
map(mapFn: Function): webdriver.promise.Promise {
545+
map(mapFn: Function): webdriver.promise.Promise<any> {
546546
return this.asElementFinders_().then((arr: ElementFinder[]) => {
547547
let list = arr.map((elementFinder: ElementFinder, index: number) => {
548548
let mapResult = mapFn(elementFinder, index);
@@ -584,7 +584,8 @@ export class ElementArrayFinder extends WebdriverWebElement {
584584
* @returns {!webdriver.promise.Promise} A promise that resolves to the final
585585
* value of the accumulator.
586586
*/
587-
reduce(reduceFn: Function, initialValue: any): webdriver.promise.Promise {
587+
reduce(reduceFn: Function, initialValue: any): webdriver.promise.Promise<any>
588+
{
588589
let valuePromise = webdriver.promise.fulfilled(initialValue);
589590
return this.asElementFinders_().then((arr: ElementFinder[]) => {
590591
return arr.reduce(
@@ -691,7 +692,8 @@ export class ElementArrayFinder extends WebdriverWebElement {
691692
export class ElementFinder extends WebdriverWebElement {
692693
parentElementArrayFinder: ElementArrayFinder;
693694
elementArrayFinder_: ElementArrayFinder;
694-
then: (fn: Function, errorFn: Function) => webdriver.promise.Promise = null;
695+
then: (fn: Function, errorFn: Function) => webdriver.promise.Promise<any> =
696+
null;
695697

696698
constructor(
697699
private browser_: Browser, elementArrayFinder: ElementArrayFinder) {
@@ -1026,7 +1028,7 @@ export class ElementFinder extends WebdriverWebElement {
10261028
* @returns {!webdriver.promise.Promise.<boolean>} A promise that will be
10271029
* resolved to whether the two WebElements are equal.
10281030
*/
1029-
equals(element: any): webdriver.promise.Promise {
1031+
equals(element: any): webdriver.promise.Promise<any> {
10301032
return webdriver.WebElement.equals(
10311033
this.getWebElement(),
10321034
element.getWebElement ? element.getWebElement() : element);

lib/globals.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ declare namespace webdriver {
6363
}
6464

6565
namespace promise {
66-
interface Promise {
66+
interface Promise<T> {
6767
controlFlow: Function;
6868
then: Function;
6969
}

0 commit comments

Comments
 (0)