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

Commit 46c8898

Browse files
committed
chore(quitDriver): have quitDriver return a webdriver promise directly (#3992)
Wrapping it in a `q` promise is blocking #3899 Closes #3902 Custom frameworks might not make this change but it'll be fine. It'll only be a problem in edge cases and they probably weren't returning the right promise before anyway.
1 parent 6c3be8c commit 46c8898

File tree

4 files changed

+39
-31
lines changed

4 files changed

+39
-31
lines changed

lib/driverProviders/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@ DriverProvider.prototype.getNewDriver
2525

2626
/**
2727
* @param {webdriver.WebDriver} The driver instance to quit.
28+
* @return {webdriver.promise.Promise<void>} A promise which resolves when the instance has quit
2829
*/
2930
DriverProvider.prototype.quitDriver
3031

3132
/**
32-
* @return {q.promise} A promise which will resolve when the environment
33-
* is down.
33+
* @return {q.Promise<any>} A promise which will resolve when the environment is down.
3434
*/
3535
DriverProvider.prototype.teardownEnv
3636

lib/driverProviders/attachSession.ts

+3-5
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* it down, and setting up the driver correctly.
55
*/
66
import * as q from 'q';
7-
import {WebDriver} from 'selenium-webdriver';
7+
import {promise as wdpromise, WebDriver} from 'selenium-webdriver';
88

99
import {Config} from '../config';
1010
import {Logger} from '../logger';
@@ -50,9 +50,7 @@ export class AttachSession extends DriverProvider {
5050
*
5151
* @public
5252
*/
53-
quitDriver(): q.Promise<WebDriver> {
54-
let defer = q.defer<WebDriver>();
55-
defer.resolve(null);
56-
return defer.promise;
53+
quitDriver(): wdpromise.Promise<void> {
54+
return wdpromise.when(undefined);
5755
}
5856
}

lib/driverProviders/driverProvider.ts

+31-20
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* it down, and setting up the driver correctly.
55
*/
66
import * as q from 'q';
7-
import {Builder, Session, WebDriver} from 'selenium-webdriver';
7+
import {Builder, promise as wdpromise, Session, WebDriver} from 'selenium-webdriver';
88

99
import {BlockingProxyRunner} from '../bpRunner';
1010
import {Config} from '../config';
@@ -68,30 +68,44 @@ export abstract class DriverProvider {
6868
* @public
6969
* @param webdriver instance
7070
*/
71-
quitDriver(driver: WebDriver): q.Promise<WebDriver> {
71+
quitDriver(driver: WebDriver): wdpromise.Promise<void> {
7272
let driverIndex = this.drivers_.indexOf(driver);
7373
if (driverIndex >= 0) {
7474
this.drivers_.splice(driverIndex, 1);
7575
}
7676

77-
let deferred = q.defer<WebDriver>();
7877
if (driver.getSession() === undefined) {
79-
deferred.resolve();
78+
return wdpromise.when(undefined);
8079
} else {
81-
driver.getSession()
82-
.then((session_: Session) => {
80+
return driver.getSession()
81+
.then<void>((session_: Session) => {
8382
if (session_) {
84-
driver.quit().then(function() {
85-
deferred.resolve();
86-
});
87-
} else {
88-
deferred.resolve();
83+
return driver.quit();
8984
}
9085
})
91-
.catch((err: Error) => {
92-
deferred.resolve();
93-
});
86+
.catch<void>(function(err: Error) {});
9487
}
88+
}
89+
90+
91+
/**
92+
* Quits an array of drivers and returns a q promise instead of a webdriver one
93+
*
94+
* @param drivers {webdriver.WebDriver[]} The webdriver instances
95+
*/
96+
static quitDrivers(provider: DriverProvider, drivers: WebDriver[]): q.Promise<void> {
97+
let deferred = q.defer<void>();
98+
wdpromise
99+
.all(drivers.map((driver: WebDriver) => {
100+
return provider.quitDriver(driver);
101+
}))
102+
.then(
103+
() => {
104+
deferred.resolve();
105+
},
106+
() => {
107+
deferred.resolve();
108+
});
95109
return deferred.promise;
96110
}
97111

@@ -126,12 +140,9 @@ export abstract class DriverProvider {
126140
* Shuts down the drivers.
127141
*
128142
* @public
129-
* @return {q.promise} A promise which will resolve when the environment
130-
* is down.
143+
* @return {q.Promise<any>} A promise which will resolve when the environment is down.
131144
*/
132-
teardownEnv(): q.Promise<q.Promise<WebDriver>[]> {
133-
return q.all<any>(this.drivers_.map((driver: WebDriver) => {
134-
return this.quitDriver(driver);
135-
}));
145+
teardownEnv(): q.Promise<any> {
146+
return DriverProvider.quitDrivers(this, this.drivers_);
136147
}
137148
}

lib/runner.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -282,10 +282,9 @@ export class Runner extends EventEmitter {
282282
* @return {q.Promise} A promise which resolves on finish.
283283
* @private
284284
*/
285-
shutdown_(): q.Promise<any> {
286-
return q.all(this.driverprovider_.getExistingDrivers().map((webdriver) => {
287-
return this.driverprovider_.quitDriver(webdriver);
288-
}));
285+
shutdown_(): q.Promise<void> {
286+
return DriverProvider.quitDrivers(
287+
this.driverprovider_, this.driverprovider_.getExistingDrivers());
289288
}
290289

291290
/**

0 commit comments

Comments
 (0)