Created
December 18, 2019 06:11
-
-
Save technoscavenger/b90b964486729ff777d3022dca3de862 to your computer and use it in GitHub Desktop.
Updated version of installer.js for Appium Windows Applicatin Driver
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict"; | |
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.downloadWAD = downloadWAD; | |
exports.setupWAD = setupWAD; | |
exports.verifyWAD = verifyWAD; | |
exports.installWAD = installWAD; | |
exports.default = exports.WAD_GUID = exports.WAD_INSTALL_PATH = void 0; | |
require("source-map-support/register"); | |
var _requestPromise = _interopRequireDefault(require("request-promise")); | |
var _appiumSupport = require("appium-support"); | |
var _path = _interopRequireDefault(require("path")); | |
var _teen_process = require("teen_process"); | |
var _logger = _interopRequireDefault(require("./logger")); | |
const WAD_VER = '1.2'; | |
const WAD_DL = `https://github.com/Microsoft/WinAppDriver/releases/download/v${WAD_VER}/WindowsApplicationDriver.msi`; | |
const WAD_DL_MD5 = '1105548ca82ea32fb7be9ca4ea21ea58'; | |
let WAD_INSTALL_PATH = process.env['ProgramFiles(x86)'] || process.env.ProgramFiles || 'C:\\Program Files'; | |
exports.WAD_INSTALL_PATH = WAD_INSTALL_PATH; | |
exports.WAD_INSTALL_PATH = WAD_INSTALL_PATH = _path.default.resolve(WAD_INSTALL_PATH, 'Windows Application Driver', 'WinAppDriver.exe'); | |
//const WAD_EXE_MD5 = '2d1b2adfb7b8d86fd890e260c1400ab7'; | |
const WAD_EXE_MD5 = '50d694ebfaa622ef7e4061c1bf52efe6'; | |
const WAD_GUID = 'DDCD58BF-37CF-4758-A15E-A60E7CF20E41'; | |
exports.WAD_GUID = WAD_GUID; | |
async function downloadWAD() { | |
_logger.default.info(`Opening temp file to write WinAppDriver to...`); | |
let tempFile = _path.default.resolve(process.env.TEMP, 'WinAppDriver.msi'); | |
_logger.default.info(`Will write to ${tempFile}`); | |
_logger.default.info(`Downloading ${WAD_DL}...`); | |
let body = await _requestPromise.default.get({ | |
url: WAD_DL, | |
encoding: 'binary' | |
}); | |
_logger.default.info(`Writing binary content to ${tempFile}...`); | |
await _appiumSupport.fs.writeFile(tempFile, body, { | |
encoding: 'binary' | |
}); | |
let downloadedMd5 = await _appiumSupport.fs.md5(tempFile); | |
if (downloadedMd5 !== WAD_DL_MD5) { | |
throw new Error(`Checksum validation error: expected ${WAD_DL_MD5} but ` + `got ${downloadedMd5}`); | |
} | |
return tempFile; | |
} | |
async function installWAD(msiPath) { | |
_logger.default.info(`Running MSI installer...`); | |
await (0, _teen_process.exec)('msiexec', ['/i', msiPath, '/qn']); | |
} | |
async function verifyWAD() { | |
_logger.default.info(`You must use WinAppDriver version ${WAD_VER}`); | |
_logger.default.info(`Verifying WinAppDriver version ${WAD_VER} is installed via comparing the checksum.`); | |
let md5 = await _appiumSupport.fs.md5(WAD_INSTALL_PATH); | |
_logger.default.info(`MD5 : ${md5}`); | |
_logger.default.info(`MD5_: ${WAD_EXE_MD5}`); | |
return (await _appiumSupport.fs.exists(WAD_INSTALL_PATH)) && (await _appiumSupport.fs.md5(WAD_INSTALL_PATH)) === WAD_EXE_MD5; | |
} | |
async function isAdmin() { | |
let testFilePath = _path.default.resolve('/', 'Windows', 'System32', 'wad-test.txt'); | |
try { | |
await _appiumSupport.fs.rimraf(testFilePath); | |
await _appiumSupport.fs.writeFile(testFilePath, 'foo'); | |
return true; | |
} catch (ign) { | |
return false; | |
} | |
} | |
async function setupWAD() { | |
if (!_appiumSupport.system.isWindows()) { | |
throw new Error(`Can only download WinAppDriver on Windows!`); | |
} | |
if (await verifyWAD()) { | |
_logger.default.info(`WinAppDriver.exe version ${WAD_VER} already exists with correct checksum, not re-downloading`); | |
return; | |
} | |
_logger.default.info(`WinAppDriver.exe doesn't exist at the correct version ${WAD_VER}, setting up`); | |
if (!(await isAdmin())) { | |
throw new Error(`WARNING: You are not running as an administrator so WinAppDriver cannot be installed for you; please reinstall as admin`); | |
} | |
const msiPath = await downloadWAD(); | |
await installWAD(msiPath); | |
if (!(await verifyWAD())) { | |
throw new Error(`Installed version of WinAppDriver failed checksum check`); | |
} | |
} | |
var _default = setupWAD; | |
exports.default = _default;require('source-map-support').install(); | |
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9pbnN0YWxsZXIuanMiXSwibmFtZXMiOlsiV0FEX1ZFUiIsIldBRF9ETCIsIldBRF9ETF9NRDUiLCJXQURfSU5TVEFMTF9QQVRIIiwicHJvY2VzcyIsImVudiIsIlByb2dyYW1GaWxlcyIsInBhdGgiLCJyZXNvbHZlIiwiV0FEX0VYRV9NRDUiLCJXQURfR1VJRCIsImRvd25sb2FkV0FEIiwibG9nIiwiaW5mbyIsInRlbXBGaWxlIiwiVEVNUCIsImJvZHkiLCJyZXF1ZXN0IiwiZ2V0IiwidXJsIiwiZW5jb2RpbmciLCJmcyIsIndyaXRlRmlsZSIsImRvd25sb2FkZWRNZDUiLCJtZDUiLCJFcnJvciIsImluc3RhbGxXQUQiLCJtc2lQYXRoIiwidmVyaWZ5V0FEIiwiZXhpc3RzIiwiaXNBZG1pbiIsInRlc3RGaWxlUGF0aCIsInJpbXJhZiIsImlnbiIsInNldHVwV0FEIiwic3lzdGVtIiwiaXNXaW5kb3dzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxPQUFPLEdBQUcsS0FBaEI7QUFDQSxNQUFNQyxNQUFNLEdBQUksZ0VBQStERCxPQUFRLCtCQUF2RjtBQUNBLE1BQU1FLFVBQVUsR0FBRyxrQ0FBbkI7QUFFQSxJQUFJQyxnQkFBZ0IsR0FBR0MsT0FBTyxDQUFDQyxHQUFSLENBQVksbUJBQVosS0FBb0NELE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxZQUFoRCxJQUFnRSxtQkFBdkY7O0FBQ0EsMkJBQUFILGdCQUFnQixHQUFHSSxjQUFLQyxPQUFMLENBQWFMLGdCQUFiLEVBQStCLDRCQUEvQixFQUNhLGtCQURiLENBQW5CO0FBRUEsTUFBTU0sV0FBVyxHQUFHLGtDQUFwQjtBQUNBLE1BQU1DLFFBQVEsR0FBRyxzQ0FBakI7OztBQUVBLGVBQWVDLFdBQWYsR0FBOEI7QUFDNUJDLGtCQUFJQyxJQUFKLENBQVUsK0NBQVY7O0FBQ0EsTUFBSUMsUUFBUSxHQUFHUCxjQUFLQyxPQUFM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bSwgZnMgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5cbmNvbnN0IFdBRF9WRVIgPSAnMS4xJztcbmNvbnN0IFdBRF9ETCA9IGBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1dpbkFwcERyaXZlci9yZWxlYXNlcy9kb3dubG9hZC92JHtXQURfVkVSfS9XaW5kb3dzQXBwbGljYXRpb25Ecml2ZXIubXNpYDtcbmNvbnN0IFdBRF9ETF9NRDUgPSAnMTEwNTU0OGNhODJlYTMyZmI3YmU5Y2E0ZWEyMWVhNTgnO1xuXG5sZXQgV0FEX0lOU1RBTExfUEFUSCA9IHByb2Nlc3MuZW52WydQcm9ncmFtRmlsZXMoeDg2KSddIHx8IHByb2Nlc3MuZW52LlByb2dyYW1GaWxlcyB8fCAnQzpcXFxcUHJvZ3JhbSBGaWxlcyc7XG5XQURfSU5TVEFMTF9QQVRIID0gcGF0aC5yZXNvbHZlKFdBRF9JTlNUQUxMX1BBVEgsICdXaW5kb3dzIEFwcGxpY2F0aW9uIERyaXZlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXaW5BcHBEcml2ZXIuZXhlJyk7XG5jb25zdCBXQURfRVhFX01ENSA9ICcyZDFiMmFkZmI3YjhkODZmZDg5MGUyNjBjMTQwMGFiNyc7XG5jb25zdCBXQURfR1VJRCA9ICdERENENThCRi0zN0NGLTQ3NTgtQTE1RS1BNjBFN0NGMjBFNDEnO1xuXG5hc3luYyBmdW5jdGlvbiBkb3dubG9hZFdBRCAoKSB7XG4gIGxvZy5pbmZvKGBPcGVuaW5nIHRlbXAgZmlsZSB0byB3cml0ZSBXaW5BcHBEcml2ZXIgdG8uLi5gKTtcbiAgbGV0IHRlbXBGaWxlID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuZW52LlRFTVAsICdXaW5BcHBEcml2ZXIubXNpJyk7XG4gIGxvZy5pbmZvKGBXaWxsIHdyaXRlIHRvICR7dGVtcEZpbGV9YCk7XG5cbiAgLy8gYWN0dWFsbHkgZG93bmxvYWQgdGhlIG1zaSBmaWxlXG4gIGxvZy5pbmZvKGBEb3dubG9hZGluZyAke1dBRF9ETH0uLi5gKTtcbiAgbGV0IGJvZHkgPSBhd2FpdCByZXF1ZXN0LmdldCh7dXJsOiBXQURfREwsIGVuY29kaW5nOiAnYmluYXJ5J30pO1xuICBsb2cuaW5mbyhgV3JpdGluZyBiaW5hcnkgY29udGVudCB0byAke3RlbXBGaWxlfS4uLmApO1xuICBhd2FpdCBmcy53cml0ZUZpbGUodGVtcEZpbGUsIGJvZHksIHtlbmNvZGluZzogJ2JpbmFyeSd9KTtcblxuICAvLyB2YWxpZGF0ZSBjaGVja3N1bVxuICBsZXQgZG93bmxvYWRlZE1kNSA9IGF3YWl0IGZzLm1kNSh0ZW1wRmlsZSk7XG4gIGlmIChkb3dubG9hZGVkTWQ1ICE9PSBXQURfRExfTUQ1KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDaGVja3N1bSB2YWxpZGF0aW9uIGVycm9yOiBleHBlY3RlZCAke1dBRF9ETF9NRDV9IGJ1dCBgICtcbiAgICAgICAgICAgICAgICAgICAgYGdvdCAke2Rvd25sb2FkZWRNZDV9YCk7XG4gIH1cblxuICByZXR1cm4gdGVtcEZpbGU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGluc3RhbGxXQUQgKG1zaVBhdGgpIHtcbiAgbG9nLmluZm8oYFJ1bm5pbmcgTVNJIGluc3RhbGxlci4uLmApO1xuICBhd2FpdCBleGVjKCdtc2lleGVjJywgWycvaScsIG1zaVBhdGgsICcvcW4nXSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHZlcmlmeVdBRCAoKSB7XG4gIGxvZy5pbmZvKGBZb3UgbXVzdCB1c2UgV2luQXBwRHJpdmVyIHZlcnNpb24gJHtXQURfVkVSfWApO1xuICBsb2cuaW5mbyhgVmVyaWZ5aW5nIFdpbkFwcERyaXZlciB2ZXJzaW9uICR7V0FEX1ZFUn0gaXMgaW5zdGFsbGVkIHZpYSBjb21wYXJpbmcgdGhlIGNoZWNrc3VtLmApO1xuICByZXR1cm4gYXdhaXQgZnMuZXhpc3RzKFdBRF9JTlNUQUxMX1BBVEgpICYmXG4gICAgICAgICBhd2FpdCBmcy5tZDUoV0FEX0lOU1RBTExfUEFUSCkgPT09IFdBRF9FWEVfTUQ1O1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc0FkbWluICgpIHtcbiAgbGV0IHRlc3RGaWxlUGF0aCA9IHBhdGgucmVzb2x2ZSgnLycsICdXaW5kb3dzJywgJ1N5c3RlbTMyJywgJ3dhZC10ZXN0LnR4dCcpO1xuICB0cnkge1xuICAgIGF3YWl0IGZzLnJpbXJhZih0ZXN0RmlsZVBhdGgpO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0ZXN0RmlsZVBhdGgsICdmb28nKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoaWduKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNldHVwV0FEICgpIHtcbiAgaWYgKCFzeXN0ZW0uaXNXaW5kb3dzKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbiBvbmx5IGRvd25sb2FkIFdpbkFwcERyaXZlciBvbiBXaW5kb3dzIWApO1xuICB9XG5cbiAgaWYgKGF3YWl0IHZlcmlmeVdBRCgpKSB7XG4gICAgbG9nLmluZm8oYFdpbkFwcERyaXZlci5leGUgdmVyc2lvbiAke1dBRF9WRVJ9IGFscmVhZHkgZXhpc3RzIHdpdGggY29ycmVjdCBjaGVja3N1bSwgbm90IHJlLWRvd25sb2FkaW5nYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nLmluZm8oYFdpbkFwcERyaXZlci5leGUgZG9lc24ndCBleGlzdCBhdCB0aGUgY29ycmVjdCB2ZXJzaW9uICR7V0FEX1ZFUn0sIHNldHRpbmcgdXBgKTtcblxuICBpZiAoIWF3YWl0IGlzQWRtaW4oKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgV0FSTklORzogWW91IGFyZSBub3QgcnVubmluZyBhcyBhbiBhZG1pbmlzdHJhdG9yIHNvIFdpbkFwcERyaXZlciBjYW5ub3QgYmUgaW5zdGFsbGVkIGZvciB5b3U7IHBsZWFzZSByZWluc3RhbGwgYXMgYWRtaW5gKTtcbiAgfVxuXG4gIGNvbnN0IG1zaVBhdGggPSBhd2FpdCBkb3dubG9hZFdBRCgpO1xuICBhd2FpdCBpbnN0YWxsV0FEKG1zaVBhdGgpO1xuICBpZiAoIWF3YWl0IHZlcmlmeVdBRCgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YWxsZWQgdmVyc2lvbiBvZiBXaW5BcHBEcml2ZXIgZmFpbGVkIGNoZWNrc3VtIGNoZWNrYCk7XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgZG93bmxvYWRXQUQsIHNldHVwV0FELCB2ZXJpZnlXQUQsIGluc3RhbGxXQUQsIFdBRF9JTlNUQUxMX1BBVEgsIFdBRF9HVUlELFxufTtcbmV4cG9ydCBkZWZhdWx0IHNldHVwV0FEO1xuIl0sImZpbGUiOiJsaWIvaW5zdGFsbGVyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0= |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment