From 094f1685d0480381bf4c7af9ce780e50c98abfb7 Mon Sep 17 00:00:00 2001 From: Bobby Earl Date: Thu, 18 Oct 2018 20:31:59 -0400 Subject: [PATCH 1/6] Added support for win32 platform --- index.js | 73 ++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 47 insertions(+), 26 deletions(-) diff --git a/index.js b/index.js index f6e5287..0ca828f 100644 --- a/index.js +++ b/index.js @@ -4,29 +4,50 @@ const chromeFinder = require('chrome-launcher/dist/src/chrome-finder'); const chromeUtils = require('chrome-launcher/dist/src/utils'); const parser = require('xml2js'); +function getMajorFromVersion(version) { + return +version.split('.')[0]; +} + function getChromeMajorVersion() { const promise = new Promise((resolve, reject) => { const platform = chromeUtils.getPlatform(); - const installations = chromeFinder[platform](); if (installations && installations.length > 0) { - const source = spawn( - installations[0], - [ - '--version' - ] - ); - - source.stdout.on('data', (data) => { - const chromeVersion = data.toString().trim().substr('Google Chrome '.length); - const chromeMajorVersion = +chromeVersion.split('.')[0]; - - resolve({ - chromeVersion: chromeVersion, - chromeMajorVersion: chromeMajorVersion + if (platform === 'win32') { + + const source = spawn('wmic'); + source.stdin.end( + `datafile where "name='${installations[0].replace(/\\/g, '\\\\')}'" get version /value` + ); + + source.stderr.on('data', () => reject('Unable to get Chrome version from wmic')); + source.stdout.on('data', (data) => { + const dataCleaned = data.toString().toLowerCase().trim().split('\r')[0]; + if (dataCleaned.indexOf('version=') > -1) { + const chromeVersion = dataCleaned.split('=')[1]; + resolve({ + chromeVersion: chromeVersion, + chromeMajorVersion: getMajorFromVersion(chromeVersion) + }); + } }); - }); + + } else { + + const source = spawn(installations[0], ['--version']); + source.stderr.on('data', () => reject('Unable get Chrome version')); + source.stdout.on('data', (data) => { + const chromeVersion = data.toString() + .trim().substr('Google Chrome '.length).split(' ')[0]; + resolve({ + chromeVersion: chromeVersion, + chromeMajorVersion: getMajorFromVersion(chromeVersion) + }); + }); + + } + } else { reject('No local installation of Chrome was found.'); } @@ -38,7 +59,7 @@ function getChromeMajorVersion() { function getLatestChromeDriverVersion() { return new Promise((resolve, reject) => { request( - 'https://chromedriver.storage.googleapis.com/', + 'https://chromedriver.storage.googleapis.com/', (error, response, body) => { if (error) { reject(error); @@ -57,18 +78,18 @@ function getLatestChromeDriverVersion() { .sort((a, b) => { const aMinorVersion = +a.split('.')[1]; const bMinorVersion = +b.split('.')[1]; - + if (aMinorVersion < bMinorVersion) { return 1; } - + if (bMinorVersion < aMinorVersion) { return -1; } - + return 0; }); - + resolve(versionNumbers[0]); } }); @@ -81,7 +102,7 @@ function getLatestChromeDriverVersion() { function getReleaseNotes(latestChromeDriverVersion) { return new Promise((resolve, reject) => { request( - 'https://chromedriver.storage.googleapis.com/' + + 'https://chromedriver.storage.googleapis.com/' + latestChromeDriverVersion + '/notes.txt', (error, response, body) => { @@ -101,7 +122,7 @@ function findVersionInReleaseNotes(releaseNotes, chromeMajorVersion) { // Supports Chrome v69-71 const lines = releaseNotes.split('\n'); - + for (let i = 0, n = lines.length; i < n; i++) { const line = lines[i]; @@ -127,7 +148,7 @@ function getChromeDriverVersion() { Promise.all( [ getChromeMajorVersion(), - getLatestChromeDriverVersion() + getLatestChromeDriverVersion() ] ) .then((results) => { @@ -139,7 +160,7 @@ function getChromeDriverVersion() { resolve({ chromeVersion: chromeVersion.chromeVersion, chromeDriverVersion: findVersionInReleaseNotes( - releaseNotes, + releaseNotes, chromeVersion.chromeMajorVersion ) }); @@ -152,4 +173,4 @@ module.exports = { getChromeDriverVersion: getChromeDriverVersion }; -// getChromeDriverVersion().then(result => console.log(result)); \ No newline at end of file +getChromeDriverVersion().then(result => console.log(result)); From 596b3c22342673ccd2907718e56996a66fad1ddf Mon Sep 17 00:00:00 2001 From: Bobby Earl Date: Thu, 18 Oct 2018 20:33:03 -0400 Subject: [PATCH 2/6] Add comment --- index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index 0ca828f..b55cdaa 100644 --- a/index.js +++ b/index.js @@ -173,4 +173,5 @@ module.exports = { getChromeDriverVersion: getChromeDriverVersion }; -getChromeDriverVersion().then(result => console.log(result)); +// USAGE: +// getChromeDriverVersion().then(result => console.log(result)); From 55ce663abf66af539ffaf7b006ca086fae9be52e Mon Sep 17 00:00:00 2001 From: Bobby Earl Date: Thu, 18 Oct 2018 20:55:59 -0400 Subject: [PATCH 3/6] Handling errors. Logging info. --- index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index b55cdaa..9abffc6 100644 --- a/index.js +++ b/index.js @@ -13,6 +13,9 @@ function getChromeMajorVersion() { const platform = chromeUtils.getPlatform(); const installations = chromeFinder[platform](); + console.log('Platform', platform); + console.log('Chrome Installations', installations); + if (installations && installations.length > 0) { if (platform === 'win32') { @@ -21,7 +24,8 @@ function getChromeMajorVersion() { `datafile where "name='${installations[0].replace(/\\/g, '\\\\')}'" get version /value` ); - source.stderr.on('data', () => reject('Unable to get Chrome version from wmic')); + source.stdout.on('close', () => reject('Unable to get Chrome version from wmic (close)')); + source.stderr.on('data', () => reject('Unable to get Chrome version from wmic (err)')); source.stdout.on('data', (data) => { const dataCleaned = data.toString().toLowerCase().trim().split('\r')[0]; if (dataCleaned.indexOf('version=') > -1) { From 95ddd47afdc156f4007910f520d3aac0e41b18c1 Mon Sep 17 00:00:00 2001 From: Bobby Earl Date: Thu, 18 Oct 2018 21:13:39 -0400 Subject: [PATCH 4/6] Rejecting --- index.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index 9abffc6..f3946e9 100644 --- a/index.js +++ b/index.js @@ -40,7 +40,8 @@ function getChromeMajorVersion() { } else { const source = spawn(installations[0], ['--version']); - source.stderr.on('data', () => reject('Unable get Chrome version')); + source.stdout.on('close', () => reject('Unable to get Chrome version (close)')); + source.stderr.on('data', () => reject('Unable to get Chrome version (err)')); source.stdout.on('data', (data) => { const chromeVersion = data.toString() .trim().substr('Google Chrome '.length).split(' ')[0]; @@ -148,7 +149,7 @@ function findVersionInReleaseNotes(releaseNotes, chromeMajorVersion) { } function getChromeDriverVersion() { - return new Promise((resolve) => { + return new Promise((resolve, reject) => { Promise.all( [ getChromeMajorVersion(), @@ -169,6 +170,10 @@ function getChromeDriverVersion() { ) }); }); + }) + .catch((err) => { + console.log(err); + reject(err); }); }); } From 4a5a520cc456db64096aa257b277e8d26811f8cc Mon Sep 17 00:00:00 2001 From: Bobby Earl Date: Thu, 18 Oct 2018 21:55:22 -0400 Subject: [PATCH 5/6] Cleanup --- index.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/index.js b/index.js index f3946e9..bc2528f 100644 --- a/index.js +++ b/index.js @@ -27,9 +27,10 @@ function getChromeMajorVersion() { source.stdout.on('close', () => reject('Unable to get Chrome version from wmic (close)')); source.stderr.on('data', () => reject('Unable to get Chrome version from wmic (err)')); source.stdout.on('data', (data) => { - const dataCleaned = data.toString().toLowerCase().trim().split('\r')[0]; + + const dataCleaned = data.toString().trim().toLowerCase(); if (dataCleaned.indexOf('version=') > -1) { - const chromeVersion = dataCleaned.split('=')[1]; + const chromeVersion = dataCleaned.split('version=')[1].split('wmic')[0].replace(/\r?\n|\r/g, ''); resolve({ chromeVersion: chromeVersion, chromeMajorVersion: getMajorFromVersion(chromeVersion) @@ -183,4 +184,4 @@ module.exports = { }; // USAGE: -// getChromeDriverVersion().then(result => console.log(result)); +getChromeDriverVersion().then(result => console.log(result)); From 922611ad1b3a8543400710a8400de40a20496474 Mon Sep 17 00:00:00 2001 From: Bobby Earl Date: Thu, 18 Oct 2018 22:08:29 -0400 Subject: [PATCH 6/6] Disabilng usage. --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index bc2528f..128e6ab 100644 --- a/index.js +++ b/index.js @@ -184,4 +184,4 @@ module.exports = { }; // USAGE: -getChromeDriverVersion().then(result => console.log(result)); +// getChromeDriverVersion().then(result => console.log(result));