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

Commit eb89920

Browse files
authored
fix(driverProviders): Handle promise rejection when starting selenium (#3989)
Fixes #3986. Also error if jvmArgs isn't an array.
1 parent 15a1872 commit eb89920

File tree

1 file changed

+20
-16
lines changed

1 file changed

+20
-16
lines changed

lib/driverProviders/local.ts

+20-16
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import * as path from 'path';
1111
import * as q from 'q';
1212

1313
import {Config} from '../config';
14-
import {BrowserError} from '../exitCodes';
14+
import {BrowserError, ConfigError} from '../exitCodes';
1515
import {Logger} from '../logger';
1616

1717
import {DriverProvider} from './driverProvider';
@@ -95,13 +95,15 @@ export class Local extends DriverProvider {
9595
* ready to test.
9696
*/
9797
setupDriverEnv(): q.Promise<any> {
98-
let deferred = q.defer();
99-
10098
this.addDefaultBinaryLocs_();
10199
logger.info('Starting selenium standalone server...');
102100

103101
let serverConf = this.config_.localSeleniumStandaloneOpts || {};
104102

103+
if (!Array.isArray(serverConf.jvmArgs)) {
104+
throw new ConfigError(logger, 'jvmArgs should be an array.');
105+
}
106+
105107
// If args or port is not set use seleniumArgs and seleniumPort
106108
// for backward compatibility
107109
if (serverConf.args === undefined) {
@@ -121,14 +123,20 @@ export class Local extends DriverProvider {
121123

122124
this.server_ = new remote.SeleniumServer(this.config_.seleniumServerJar, serverConf);
123125

126+
let deferred = q.defer();
124127
// start local server, grab hosted address, and resolve promise
125-
this.server_.start(this.config_.seleniumServerStartTimeout).then((url: string) => {
126-
logger.info('Selenium standalone server started at ' + url);
127-
this.server_.address().then((address: string) => {
128-
this.config_.seleniumAddress = address;
129-
deferred.resolve();
130-
});
131-
});
128+
this.server_.start(this.config_.seleniumServerStartTimeout)
129+
.then((url: string) => {
130+
logger.info('Selenium standalone server started at ' + url);
131+
return this.server_.address();
132+
})
133+
.then((address: string) => {
134+
this.config_.seleniumAddress = address;
135+
deferred.resolve();
136+
})
137+
.catch((err: string) => {
138+
deferred.reject(err);
139+
});
132140

133141
return deferred.promise;
134142
}
@@ -143,13 +151,9 @@ export class Local extends DriverProvider {
143151
* is down.
144152
*/
145153
teardownEnv(): q.Promise<any> {
146-
let deferred = q.defer();
147-
super.teardownEnv().then(() => {
154+
return super.teardownEnv().then(() => {
148155
logger.info('Shutting down selenium standalone server.');
149-
this.server_.stop().then(() => {
150-
deferred.resolve();
151-
});
156+
return this.server_.stop();
152157
});
153-
return deferred.promise;
154158
}
155159
}

0 commit comments

Comments
 (0)