UNPKG

selenium-drivers

Version:

Node.js binding for selenium browser drivers. Sets up your system environment and keeps drivers up to date for various browsers and operating systems.

84 lines (71 loc) 2.15 kB
var fs = require('fs'); var log = require('./log'); var path = require('path'); var request = require('request'); module.exports = { downloadDriverToDirectory: downloadDriverToDirectory, checkLastDriverVersion: checkLastDriverVersion, }; function downloadDriverToDirectory(driver) { log.infoIf(!driver.opts.silent, 'Downloading : ' + driver.url); log.infoIf(!driver.opts.silent, 'Download target : ' + driver.archivePath); var activeDownloadRequest = request(driver.url); activeDownloadRequest .pipe(fs.createWriteStream(driver.archivePath)); return activeDownloadRequest; } function checkLastDriverVersion(driver) { if (driver.name === 'chrome') { return _checkLastChromeDriverVersion(); } else if (driver.name === 'firefox') { return _checkLastFirefoxDriverVersion(); } else if (driver.name === 'internet explorer') { return _checkLastIEVersion(); } else { throw new Error('unknown driver type!'); } } function _checkLastChromeDriverVersion() { var url = 'http://chromedriver.storage.googleapis.com/LATEST_RELEASE'; return new Promise(function (resolve, reject) { request(url, function (error, response, body) { if (!error && response.statusCode == 200) { var version = body.replace('\n', ''); resolve(version); } else { reject(); } }); }); } function _checkLastIEVersion() { var url = 'http://selenium-release.storage.googleapis.com/?delimiter=/&prefix='; return new Promise(function (resolve, reject) { request(url, function (error, response, body) { if (!error && response.statusCode == 200) { // TODO: parse DOM body and get version resolve('3.0'); } else { reject(); } }); }); } function _checkLastFirefoxDriverVersion() { var url = 'https://github.com/mozilla/geckodriver/releases/latest'; return new Promise(function (resolve, reject) { request({json: true, url: url}, function (error, response, body) { if (!error && response.statusCode == 200) { resolve(body.tag_name); } else { reject(); } }); }); }