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

Commit c437fd3

Browse files
authored
deps(selenium-webdriver): clean up types selenium-webdriver (#3854)
1 parent 989759a commit c437fd3

File tree

9 files changed

+70
-84
lines changed

9 files changed

+70
-84
lines changed

lib/browser.ts

+5-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import {Logger} from './logger';
1010
import {Plugins} from './plugins';
1111

1212
const clientSideScripts = require('./clientsidescripts');
13-
const webdriver = require('selenium-webdriver');
1413
// TODO: fix the typings for selenium-webdriver/lib/command
1514
const Command = require('selenium-webdriver/lib/command').Command as typeof WdCommand;
1615
const CommandName = require('selenium-webdriver/lib/command').Name as ICommandName;
@@ -23,11 +22,14 @@ const DEFAULT_GET_PAGE_TIMEOUT = 10000;
2322

2423
let logger = new Logger('protractor');
2524

25+
// TODO(cnishina): either remove for loop entirely since this does not export anything
26+
// the user might need since everything is composed (with caveat that this could be a
27+
// potential breaking change) or export the types with `export * from 'selenium-webdriver'`;
2628
/*
2729
* Mix in other webdriver functionality to be accessible via protractor.
2830
*/
29-
for (let foo in webdriver) {
30-
exports[foo] = webdriver[foo];
31+
for (let foo in require('selenium-webdriver')) {
32+
exports[foo] = require('selenium-webdriver')[foo];
3133
}
3234

3335
// Explicitly define webdriver.WebDriver

lib/debugger.ts

+9-11
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ declare var global: any;
1212
declare var process: any;
1313

1414
let logger = new Logger('protractor');
15-
const webdriver = require('selenium-webdriver');
1615

1716
export class DebugHelper {
1817
/**
@@ -40,7 +39,7 @@ export class DebugHelper {
4039
* process.
4140
*/
4241
init(debuggerClientPath: string, onStartFn: Function, opt_debugPort?: number) {
43-
webdriver.promise.ControlFlow.prototype.getControlFlowText = function() {
42+
(wdpromise.ControlFlow as any).prototype.getControlFlowText = function() {
4443
let controlFlowText = this.getSchedule(/* opt_includeStackTraces */ true);
4544
// This filters the entire control flow text, not just the stack trace, so
4645
// unless we maintain a good (i.e. non-generic) set of keywords in
@@ -52,8 +51,8 @@ export class DebugHelper {
5251
return helper.filterStackTrace(controlFlowText);
5352
};
5453

55-
let vm_ = require('vm');
56-
let flow = webdriver.promise.controlFlow();
54+
const vm_ = require('vm');
55+
let flow = wdpromise.controlFlow();
5756

5857
interface Context {
5958
require: any;
@@ -76,7 +75,7 @@ export class DebugHelper {
7675
}
7776
let sandbox = vm_.createContext(context);
7877

79-
let debuggerReadyPromise = webdriver.promise.defer();
78+
let debuggerReadyPromise = wdpromise.defer();
8079
flow.execute(() => {
8180
process['debugPort'] = opt_debugPort || process['debugPort'];
8281
this.validatePortAvailability_(process['debugPort']).then((firstTime: boolean) => {
@@ -161,8 +160,8 @@ export class DebugHelper {
161160
// Run code through vm so that we can maintain a local scope which is
162161
// isolated from the rest of the execution.
163162
let res = vm_.runInContext(code, sandbox);
164-
if (!webdriver.promise.isPromise(res)) {
165-
res = webdriver.promise.fulfilled(res);
163+
if (!wdpromise.isPromise(res)) {
164+
res = wdpromise.fulfilled(res);
166165
}
167166

168167
return res.then((res: any) => {
@@ -171,8 +170,7 @@ export class DebugHelper {
171170
} else {
172171
// The '' forces res to be expanded into a string instead of just
173172
// '[Object]'. Then we remove the extra space caused by the ''
174-
// using
175-
// substring.
173+
// using substring.
176174
return util.format.apply(this, ['', res]).substring(1);
177175
}
178176
});
@@ -184,7 +182,7 @@ export class DebugHelper {
184182
// Result is a JSON representation of the autocomplete response.
185183
complete: function(line: string) {
186184
let execFn_ = () => {
187-
let deferred = webdriver.promise.defer();
185+
let deferred = wdpromise.defer();
188186
this.replServer_.complete(line, (err: any, res: any) => {
189187
if (err) {
190188
deferred.reject(err);
@@ -234,7 +232,7 @@ export class DebugHelper {
234232
return wdpromise.fulfilled(false);
235233
}
236234

237-
let doneDeferred = webdriver.promise.defer();
235+
let doneDeferred = wdpromise.defer();
238236

239237
// Resolve doneDeferred if port is available.
240238
let tester = net.connect({port: port}, () => {

lib/driverProviders/local.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ export class Local extends DriverProvider {
6565
throw new BrowserError(
6666
logger,
6767
'Could not find chromedriver at ' + this.config_.chromeDriver +
68-
'. Run \'webdriver-manager update\' to download binaries.'););
68+
'. Run \'webdriver-manager update\' to download binaries.');
6969
}
7070
}
7171
}

lib/element.ts

+16-22
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
import {By, error, ILocation, ISize, promise as wdpromise, WebDriver, WebElement, WebElementPromise} from 'selenium-webdriver';
1+
import {By, error as wderror, ILocation, ISize, promise as wdpromise, WebDriver, WebElement, WebElementPromise} from 'selenium-webdriver';
22

33
import {ElementHelper, ProtractorBrowser} from './browser';
44
import {IError} from './exitCodes';
55
import {Locator} from './locators';
66
import {Logger} from './logger';
77

8-
let webdriver = require('selenium-webdriver');
98
let clientSideScripts = require('./clientsidescripts');
109

1110
let logger = new Logger('element');
@@ -239,7 +238,7 @@ export class ElementArrayFinder extends WebdriverWebElement {
239238

240239
return filterFn(elementFinder, index);
241240
});
242-
return webdriver.promise.all(list).then((resolvedList: any) => {
241+
return wdpromise.all(list).then((resolvedList: any) => {
243242
return parentWebElements.filter((parentWebElement: WebElement, index: number) => {
244243
return resolvedList[index];
245244
});
@@ -276,21 +275,16 @@ export class ElementArrayFinder extends WebdriverWebElement {
276275
* @param {number|webdriver.promise.Promise} index Element index.
277276
* @returns {ElementFinder} finder representing element at the given index.
278277
*/
279-
get(index: number): ElementFinder {
280-
let getWebElements = () => {
281-
return webdriver.promise.all([index, this.getWebElements()]).then((results: any) => {
282-
let i = results[0];
283-
let parentWebElements = results[1];
284-
278+
get(index: number|wdpromise.Promise<number>): ElementFinder {
279+
let getWebElements = (): wdpromise.Promise<WebElement[]> => {
280+
return wdpromise.all<any>([index, this.getWebElements()]).then(([i, parentWebElements]) => {
285281
if (i < 0) {
286-
// wrap negative indices
287-
i = parentWebElements.length + i;
282+
i += parentWebElements.length;
288283
}
289284
if (i < 0 || i >= parentWebElements.length) {
290-
throw new error.NoSuchElementError(
291-
'Index out of bound. ' +
292-
'Trying to access element at index: ' + index + ', but there are ' +
293-
'only ' + parentWebElements.length + ' elements that match ' +
285+
throw new wderror.NoSuchElementError(
286+
'Index out of bound. Trying to access element at index: ' + index +
287+
', but there are only ' + parentWebElements.length + ' elements that match ' +
294288
'locator ' + this.locator_.toString());
295289
}
296290
return [parentWebElements[i]];
@@ -383,7 +377,7 @@ export class ElementArrayFinder extends WebdriverWebElement {
383377
* array of the located {@link webdriver.WebElement}s.
384378
*/
385379
$$(selector: string): ElementArrayFinder {
386-
return this.all(webdriver.By.css(selector));
380+
return this.all(By.css(selector));
387381
}
388382

389383
/**
@@ -427,7 +421,7 @@ export class ElementArrayFinder extends WebdriverWebElement {
427421
return arr.length;
428422
},
429423
(err: IError) => {
430-
if (err.code && err.code == new webdriver.error.NoSuchElementError()) {
424+
if (err.code && err.code == (new wderror.NoSuchSessionError() as any).code) {
431425
return 0;
432426
} else {
433427
throw err;
@@ -821,7 +815,7 @@ export class ElementFinder extends WebdriverWebElement {
821815
let getWebElements = (): wdpromise.Promise<WebElement[]> => {
822816
return elementArrayFinder.getWebElements().then((webElements: WebElement[]) => {
823817
if (webElements.length === 0) {
824-
throw new error.NoSuchElementError(
818+
throw new wderror.NoSuchElementError(
825819
'No element found using locator: ' + elementArrayFinder.locator().toString());
826820
} else {
827821
if (webElements.length > 1) {
@@ -999,7 +993,7 @@ export class ElementFinder extends WebdriverWebElement {
999993
* @returns {ElementArrayFinder}
1000994
*/
1001995
$$(selector: string): ElementArrayFinder {
1002-
return this.all(webdriver.By.css(selector));
996+
return this.all(By.css(selector));
1003997
}
1004998

1005999
/**
@@ -1041,7 +1035,7 @@ export class ElementFinder extends WebdriverWebElement {
10411035
* @returns {ElementFinder}
10421036
*/
10431037
$(selector: string): ElementFinder {
1044-
return this.element(webdriver.By.css(selector));
1038+
return this.element(By.css(selector));
10451039
}
10461040

10471041
/**
@@ -1071,15 +1065,15 @@ export class ElementFinder extends WebdriverWebElement {
10711065
return true; // is present, whether it is enabled or not
10721066
},
10731067
(err: any) => {
1074-
if (err.code == webdriver.error.ErrorCode.STALE_ELEMENT_REFERENCE) {
1068+
if (err.code == (new wderror.StaleElementReferenceError() as any).code) {
10751069
return false;
10761070
} else {
10771071
throw err;
10781072
}
10791073
});
10801074
},
10811075
(err: any) => {
1082-
if (err.code == webdriver.error.ErrorCode.NO_SUCH_ELEMENT) {
1076+
if (err.code == (new wderror.NoSuchElementError() as any).code) {
10831077
return false;
10841078
} else {
10851079
throw err;

lib/expectedConditions.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1+
import {error as wderror} from 'selenium-webdriver';
12
import {ProtractorBrowser} from './browser';
23
import {ElementFinder} from './element';
34

4-
const webdriver = require('selenium-webdriver');
5-
65
/**
76
* Represents a library of canned expected conditions that are useful for
87
* protractor, especially when dealing with non-angular apps.
@@ -161,7 +160,7 @@ export class ProtractorExpectedConditions {
161160
return true;
162161
},
163162
(err: any) => {
164-
if (err.code == webdriver.error.ErrorCode.NO_SUCH_ALERT) {
163+
if (err.code == (new wderror.NoSuchAlertError() as any).code) {
165164
return false;
166165
} else {
167166
throw err;

0 commit comments

Comments
 (0)