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

Commit 574d5c2

Browse files
authored
chore(local): if no local drivers provided in config, use update-config.json (#3922)
- turn on all unit tests and update them to work - direct driver provider unit test for browser error - local driver provider unit test for browser error closes #3782
1 parent ec93c4a commit 574d5c2

File tree

5 files changed

+95
-23
lines changed

5 files changed

+95
-23
lines changed

lib/driverProviders/direct.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,24 @@ export class Direct extends DriverProvider {
5555
*/
5656
getNewDriver(): WebDriver {
5757
let driver: WebDriver;
58-
let updateJson = path.resolve(SeleniumConfig.getSeleniumDir(), 'update-config.json');
59-
let updateConfig = JSON.parse(fs.readFileSync(updateJson).toString());
6058

6159
switch (this.config_.capabilities.browserName) {
6260
case 'chrome':
63-
let defaultChromeDriverPath = updateConfig.chrome.last;
64-
let chromeDriverFile = this.config_.chromeDriver || defaultChromeDriverPath;
61+
let chromeDriverFile: string;
62+
if (this.config_.chromeDriver) {
63+
chromeDriverFile = this.config_.chromeDriver;
64+
} else {
65+
try {
66+
let updateJson = path.resolve(SeleniumConfig.getSeleniumDir(), 'update-config.json');
67+
let updateConfig = JSON.parse(fs.readFileSync(updateJson).toString());
68+
chromeDriverFile = updateConfig.chrome.last;
69+
} catch (e) {
70+
throw new BrowserError(
71+
logger,
72+
'Could not find update-config.json. ' +
73+
'Run \'webdriver-manager update\' to download binaries.');
74+
}
75+
}
6576

6677
if (!fs.existsSync(chromeDriverFile)) {
6778
throw new BrowserError(

lib/driverProviders/local.ts

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,16 @@ export class Local extends DriverProvider {
3939
logger.debug(
4040
'Attempting to find the SeleniumServerJar in the default ' +
4141
'location used by webdriver-manager');
42-
this.config_.seleniumServerJar = path.resolve(
43-
SeleniumConfig.getSeleniumDir(), new SeleniumStandAlone().executableFilename());
42+
try {
43+
let updateJson = path.resolve(SeleniumConfig.getSeleniumDir(), 'update-config.json');
44+
let updateConfig = JSON.parse(fs.readFileSync(updateJson).toString());
45+
this.config_.seleniumServerJar = updateConfig.standalone.last;
46+
} catch (err) {
47+
throw new BrowserError(
48+
logger,
49+
'No update-config.json found.' +
50+
' Run \'webdriver-manager update\' to download binaries.');
51+
}
4452
}
4553
if (!fs.existsSync(this.config_.seleniumServerJar)) {
4654
throw new BrowserError(
@@ -53,8 +61,17 @@ export class Local extends DriverProvider {
5361
logger.debug(
5462
'Attempting to find the chromedriver binary in the default ' +
5563
'location used by webdriver-manager');
56-
this.config_.chromeDriver = path.resolve(
57-
SeleniumConfig.getSeleniumDir(), new SeleniumChrome().executableFilename());
64+
65+
try {
66+
let updateJson = path.resolve(SeleniumConfig.getSeleniumDir(), 'update-config.json');
67+
let updateConfig = JSON.parse(fs.readFileSync(updateJson).toString());
68+
this.config_.chromeDriver = updateConfig.chrome.last;
69+
} catch (err) {
70+
throw new BrowserError(
71+
logger,
72+
'No update-config.json found. ' +
73+
'Run \'webdriver-manager update\' to download binaries.');
74+
}
5875
}
5976

6077
// Check if file exists, if not try .exe or fail accordingly
@@ -77,11 +94,10 @@ export class Local extends DriverProvider {
7794
* @return {q.promise} A promise which will resolve when the environment is
7895
* ready to test.
7996
*/
80-
protected setupDriverEnv(): q.Promise<any> {
97+
setupDriverEnv(): q.Promise<any> {
8198
let deferred = q.defer();
8299

83100
this.addDefaultBinaryLocs_();
84-
85101
logger.info('Starting selenium standalone server...');
86102

87103
let serverConf = this.config_.localSeleniumStandaloneOpts || {};

scripts/unit_test.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"spec_dir": "",
33
"spec_files": [
4-
"spec/unit/*.js",
4+
"spec/unit/**/*.js",
55
"website/docgen/spec/*.js"
66
]
77
}

spec/unit/driverProviders/direct_test.js

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
var fs = require('fs'),
22
os = require('os'),
33
path = require('path');
4-
var BrowserError = require('../../../built/exitCodes').BrowserError,
5-
Logger = require('../../../built/logger2').Logger,
6-
WriteTo = require('../../../built/logger2').WriteTo;
4+
var BrowserError = require('../../../built/exitCodes').BrowserError;
5+
var ProtractorError = require('../../../built/exitCodes').ProtractorError;
6+
var Logger = require('../../../built/logger').Logger;
7+
var WriteTo = require('../../../built/logger').WriteTo;
8+
var Direct = require('../../../built/driverProviders').Direct;
79
var webdriver, file;
810

911
describe('direct connect', function() {
1012
beforeEach(function() {
13+
ProtractorError.SUPRESS_EXIT_CODE = true;
1114
Logger.setWrite(WriteTo.NONE);
1215
});
1316

1417
afterEach(function() {
18+
ProtractorError.SUPRESS_EXIT_CODE = false;
1519
Logger.setWrite(WriteTo.CONSOLE);
1620
});
1721

@@ -24,7 +28,7 @@ describe('direct connect', function() {
2428
};
2529
var errorFound = false;
2630
try {
27-
webdriver = require('../../../built/driverProviders/direct')(config);
31+
webdriver = new Direct(config);
2832
webdriver.getNewDriver();
2933
} catch(e) {
3034
errorFound = true;
@@ -49,6 +53,7 @@ describe('direct connect', function() {
4953
} catch(e) {
5054
}
5155
});
56+
5257
it('should throw an error if the driver cannot be used', function() {
5358
var config = {
5459
directConnect: true,
@@ -57,7 +62,26 @@ describe('direct connect', function() {
5762
};
5863
var errorFound = false;
5964
try {
60-
webdriver = require('../../../built/driverProviders/direct')(config);
65+
webdriver = new Direct(config);
66+
webdriver.getNewDriver();
67+
} catch(e) {
68+
errorFound = true;
69+
expect(e.code).toBe(BrowserError.CODE);
70+
}
71+
expect(errorFound).toBe(true);
72+
});
73+
});
74+
75+
describe('binary does not exist', () => {
76+
it('should throw an error if the update-config.json does not exist', () => {
77+
spyOn(fs, 'readFileSync').and.callFake(() => { return null; });
78+
var config = {
79+
directConnect: true,
80+
capabilities: { browserName: 'chrome' },
81+
};
82+
var errorFound = false;
83+
try {
84+
webdriver = new Direct(config);
6185
webdriver.getNewDriver();
6286
} catch(e) {
6387
errorFound = true;

spec/unit/driverProviders/local_test.js

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,33 @@
11
var fs = require('fs'),
22
os = require('os'),
33
path = require('path');
4-
var BrowserError = require('../../../built/exitCodes').BrowserError,
5-
Logger = require('../../../built/logger2').Logger,
6-
WriteTo = require('../../../built/logger2').WriteTo;
4+
var BrowserError = require('../../../built/exitCodes').BrowserError;
5+
var ProtractorError = require('../../../built/exitCodes').ProtractorError;
6+
var Logger = require('../../../built/logger').Logger;
7+
var WriteTo = require('../../../built/logger').WriteTo;
8+
var Local = require('../../../built/driverProviders').Local;
79
var webdriver, file;
810

911
describe('local connect', function() {
1012
beforeEach(function() {
13+
ProtractorError.SUPRESS_EXIT_CODE = true;
1114
Logger.setWrite(WriteTo.NONE);
1215
});
1316

1417
afterEach(function() {
18+
ProtractorError.SUPRESS_EXIT_CODE = false;
1519
Logger.setWrite(WriteTo.CONSOLE);
1620
});
1721

1822
describe('without the selenium standalone jar', function() {
1923
it('should throw an error jar file is not present', function() {
2024
var config = {
21-
directConnect: true,
2225
capabilities: { browserName: 'chrome' },
2326
seleniumServerJar: '/foo/bar/selenium.jar'
2427
};
2528
var errorFound = false;
2629
try {
27-
webdriver = require('../../../built/driverProviders/local')(config);
30+
webdriver = new Local(config);
2831
webdriver.setupEnv();
2932
} catch(e) {
3033
errorFound = true;
@@ -53,13 +56,12 @@ describe('local connect', function() {
5356

5457
it('should throw an error if the selenium sever jar cannot be used', function() {
5558
var config = {
56-
directConnect: true,
5759
capabilities: { browserName: 'foobar explorer' },
5860
seleniumServerJar: jarFile
5961
};
6062
var errorFound = false;
6163
try {
62-
webdriver = require('../../../built/driverProviders/local')(config);
64+
webdriver = new Local(config);
6365
webdriver.getNewDriver();
6466
} catch(e) {
6567
errorFound = true;
@@ -69,4 +71,23 @@ describe('local connect', function() {
6971
});
7072
});
7173
});
74+
75+
describe('binary does not exist', () => {
76+
it('should throw an error if the update-config.json does not exist', () => {
77+
spyOn(fs, 'readFileSync').and.callFake(() => { return null; });
78+
var config = {
79+
capabilities: { browserName: 'chrome' },
80+
openSync: fs.openSync
81+
};
82+
var errorFound = false;
83+
try {
84+
webdriver = new Local(config);
85+
webdriver.setupDriverEnv();
86+
} catch(e) {
87+
errorFound = true;
88+
expect(e.code).toBe(BrowserError.CODE);
89+
}
90+
expect(errorFound).toBe(true);
91+
});
92+
});
7293
});

0 commit comments

Comments
 (0)