Skip to content

Instantly share code, notes, and snippets.

@technoscavenger
Created December 18, 2019 06:11
Show Gist options
  • Save technoscavenger/b90b964486729ff777d3022dca3de862 to your computer and use it in GitHub Desktop.
Save technoscavenger/b90b964486729ff777d3022dca3de862 to your computer and use it in GitHub Desktop.
Updated version of installer.js for Appium Windows Applicatin Driver
"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