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

Commit 132fb86

Browse files
authored
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 e8eea5c commit 132fb86

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';
@@ -65,30 +65,44 @@ export abstract class DriverProvider {
6565
* @public
6666
* @param webdriver instance
6767
*/
68-
quitDriver(driver: WebDriver): q.Promise<WebDriver> {
68+
quitDriver(driver: WebDriver): wdpromise.Promise<void> {
6969
let driverIndex = this.drivers_.indexOf(driver);
7070
if (driverIndex >= 0) {
7171
this.drivers_.splice(driverIndex, 1);
7272
}
7373

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

@@ -123,12 +137,9 @@ export abstract class DriverProvider {
123137
* Shuts down the drivers.
124138
*
125139
* @public
126-
* @return {q.promise} A promise which will resolve when the environment
127-
* is down.
140+
* @return {q.Promise<any>} A promise which will resolve when the environment is down.
128141
*/
129-
teardownEnv(): q.Promise<q.Promise<WebDriver>[]> {
130-
return q.all<any>(this.drivers_.map((driver: WebDriver) => {
131-
return this.quitDriver(driver);
132-
}));
142+
teardownEnv(): q.Promise<any> {
143+
return DriverProvider.quitDrivers(this, this.drivers_);
133144
}
134145
}

lib/runner.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -270,10 +270,9 @@ export class Runner extends EventEmitter {
270270
* @return {q.Promise} A promise which resolves on finish.
271271
* @private
272272
*/
273-
shutdown_(): q.Promise<any> {
274-
return q.all(this.driverprovider_.getExistingDrivers().map((webdriver) => {
275-
return this.driverprovider_.quitDriver(webdriver);
276-
}));
273+
shutdown_(): q.Promise<void> {
274+
return DriverProvider.quitDrivers(
275+
this.driverprovider_, this.driverprovider_.getExistingDrivers());
277276
}
278277

279278
/**

0 commit comments

Comments
 (0)