UNPKG

web2driver

Version:

Pure-JS, browser-based WebDriver (+ Appium) client

156 lines 12.2 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const lodash_1 = require("lodash"); const logger_1 = __importDefault(require("@wdio/logger")); const element_1 = require("./element"); const webdriver_json_1 = __importDefault(require("@wdio/protocols/protocols/webdriver.json")); const jsonwp_json_1 = __importDefault(require("@wdio/protocols/protocols/jsonwp.json")); const mjsonwp_json_1 = __importDefault(require("@wdio/protocols/protocols/mjsonwp.json")); const appium_json_1 = __importDefault(require("@wdio/protocols/protocols/appium.json")); const driver_1 = require("./driver"); const log = (0, logger_1.default)('web2driver'); const DIRECT_CONNECT_PREFIX = 'directConnect'; let DIRECT_CONNECT_CAPS = ['Protocol', 'Host', 'Port', 'Path']; DIRECT_CONNECT_CAPS = DIRECT_CONNECT_CAPS.map(c => `${DIRECT_CONNECT_PREFIX}${c}`); const PREFIXED_DIRECT_CAPS = DIRECT_CONNECT_CAPS.map(c => `appium:${c}`); class Session { constructor(wdSessionClient, logLevel = driver_1.DEFAULTS.logLevel) { this.client = wdSessionClient; log.setLevel && log.setLevel(logLevel); } cmd(commandName, ...args) { return __awaiter(this, void 0, void 0, function* () { const res = yield this.client[commandName](...args); if (res && res.error) { throw new Error(res.message ? res.message : res.error); } return res; }); } get connectedUrl() { const { protocol, hostname, port, path } = this.client.options; return `${protocol}://${hostname}:${port}${path}`; } get sessionId() { return this.client.sessionId; } get capabilities() { return this.client.options.capabilities; } findElement(using, value) { return __awaiter(this, void 0, void 0, function* () { const res = yield this.cmd('findElement', using, value); return (0, element_1.getElementFromResponse)(res, this); }); } findElements(using, value) { return __awaiter(this, void 0, void 0, function* () { const ress = yield this.cmd('findElements', using, value); return ress.map(res => (0, element_1.getElementFromResponse)(res, this)); }); } waitForElement(ms, using, value) { return __awaiter(this, void 0, void 0, function* () { let el = null; const start = Date.now(); const end = start + ms; while (el === null && Date.now() < end) { try { el = yield this.findElement(using, value); } catch (ign) { } } if (el) { return el; } throw new Error(`Could not find element using strategy ${using} and value '${value}' after ${ms}ms`); }); } waitForElements(ms, using, value) { return __awaiter(this, void 0, void 0, function* () { let els = []; const start = Date.now(); const end = start + ms; while (els.length === 0 && Date.now() < end) { els = yield this.findElements(using, value); } if (els.length) { return els; } throw new Error(`Could not find any elements using strategy ${using} and value '${value}' after ${ms}ms`); }); } executeBase(cmd, script, args) { return __awaiter(this, void 0, void 0, function* () { args = args.map((a) => { if (a.__is_w2d_element) { return a.executeObj; } return a; }); return yield this.cmd(cmd, script, args); }); } executeScript(script, args) { return __awaiter(this, void 0, void 0, function* () { return yield this.executeBase('executeScript', script, args); }); } executeAsyncScript(script, args) { return __awaiter(this, void 0, void 0, function* () { return yield this.executeBase('executeAsyncScript', script, args); }); } } exports.default = Session; const AVOID_CMDS = [ "newSession", "findElement", "findElements", "findElementFromElement", "findElementsFromElement", "executeScript", "executeAsyncScript", ]; const ALIAS_CMDS = { deleteSession: "quit" }; // here we walk through the protocol specification from the webdriver package // and simply put all the methods on Session (except for element methods and // edge cases) for (const proto of [webdriver_json_1.default, jsonwp_json_1.default, mjsonwp_json_1.default, appium_json_1.default]) { for (const [route, methods] of (0, lodash_1.toPairs)(proto)) { for (const [method, cmdData] of (0, lodash_1.toPairs)(methods)) { // if we've explicitly asked not to include the command, skip it if (AVOID_CMDS.includes(cmdData.command)) { continue; } // likewise skip element commands; those are handled by element.js if ((0, lodash_1.keys)(element_1.ELEMENT_CMDS).includes(cmdData.command)) { continue; } // give the command a new name if we so desire const cmdName = (0, lodash_1.keys)(ALIAS_CMDS).includes(cmdData.command) ? ALIAS_CMDS[cmdData.command] : cmdData.command; Session.prototype[cmdName] = function (...args) { return __awaiter(this, void 0, void 0, function* () { return yield this.cmd(cmdData.command, ...args); }); }; } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXNzaW9uLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQWlEO0FBQ2pELDBEQUFrQztBQUNsQyx1Q0FBaUU7QUFDakUsOEZBQXlFO0FBQ3pFLHdGQUFrRTtBQUNsRSwwRkFBb0U7QUFDcEUsd0ZBQW1FO0FBQ25FLHFDQUFvQztBQUVwQyxNQUFNLEdBQUcsR0FBRyxJQUFBLGdCQUFNLEVBQUMsWUFBWSxDQUFDLENBQUM7QUFFakMsTUFBTSxxQkFBcUIsR0FBRyxlQUFlLENBQUM7QUFDOUMsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9ELG1CQUFtQixHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcscUJBQXFCLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuRixNQUFNLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUV6RSxNQUFxQixPQUFPO0lBRTFCLFlBQWEsZUFBZSxFQUFFLFFBQVEsR0FBRyxpQkFBUSxDQUFDLFFBQVE7UUFDeEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUM7UUFDOUIsR0FBRyxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFSyxHQUFHLENBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSTs7WUFDN0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDcEQsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRTtnQkFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDeEQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7S0FBQTtJQUVELElBQUksWUFBWTtRQUNkLE1BQU0sRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUM3RCxPQUFPLEdBQUcsUUFBUSxNQUFNLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQzFDLENBQUM7SUFFSyxXQUFXLENBQUUsS0FBSyxFQUFFLEtBQUs7O1lBQzdCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hELE9BQU8sSUFBQSxnQ0FBc0IsRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQztLQUFBO0lBRUssWUFBWSxDQUFFLEtBQUssRUFBRSxLQUFLOztZQUM5QixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFBLGdDQUFzQixFQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzVELENBQUM7S0FBQTtJQUVLLGNBQWMsQ0FBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUs7O1lBQ3BDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztZQUNkLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN6QixNQUFNLEdBQUcsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFO2dCQUN0QyxJQUFJO29CQUNGLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUMzQztnQkFBQyxPQUFPLEdBQUcsRUFBRSxHQUFFO2FBQ2pCO1lBRUQsSUFBSSxFQUFFLEVBQUU7Z0JBQ04sT0FBTyxFQUFFLENBQUM7YUFDWDtZQUVELE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLEtBQUssZUFBZSxLQUFLLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2RyxDQUFDO0tBQUE7SUFFSyxlQUFlLENBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLOztZQUNyQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDYixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDekIsTUFBTSxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUN2QixPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUU7Z0JBQzNDLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQzdDO1lBRUQsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFO2dCQUNkLE9BQU8sR0FBRyxDQUFDO2FBQ1o7WUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxLQUFLLGVBQWUsS0FBSyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUcsQ0FBQztLQUFBO0lBRUssV0FBVyxDQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSTs7WUFDbEMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLEVBQUU7b0JBQ3RCLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQztpQkFDckI7Z0JBQ0QsT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQztLQUFBO0lBRUssYUFBYSxDQUFFLE1BQU0sRUFBRSxJQUFJOztZQUMvQixPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9ELENBQUM7S0FBQTtJQUVLLGtCQUFrQixDQUFFLE1BQU0sRUFBRSxJQUFJOztZQUNwQyxPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEUsQ0FBQztLQUFBO0NBQ0Y7QUF2RkQsMEJBdUZDO0FBRUQsTUFBTSxVQUFVLEdBQUc7SUFDakIsWUFBWTtJQUNaLGFBQWE7SUFDYixjQUFjO0lBQ2Qsd0JBQXdCO0lBQ3hCLHlCQUF5QjtJQUN6QixlQUFlO0lBQ2Ysb0JBQW9CO0NBQ3JCLENBQUM7QUFFRixNQUFNLFVBQVUsR0FBRztJQUNqQixhQUFhLEVBQUUsTUFBTTtDQUN0QixDQUFBO0FBRUQsNkVBQTZFO0FBQzdFLDRFQUE0RTtBQUM1RSxjQUFjO0FBRWQsS0FBSyxNQUFNLEtBQUssSUFBSSxDQUFDLHdCQUFpQixFQUFFLHFCQUFhLEVBQUUsc0JBQWMsRUFBRSxxQkFBYyxDQUFDLEVBQUU7SUFDdEYsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUEsZ0JBQU8sRUFBQyxLQUFLLENBQUMsRUFBRTtRQUM3QyxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBQSxnQkFBTyxFQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2hELGdFQUFnRTtZQUNoRSxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUN4QyxTQUFTO2FBQ1Y7WUFFRCxrRUFBa0U7WUFDbEUsSUFBSSxJQUFBLGFBQUksRUFBQyxzQkFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDaEQsU0FBUzthQUNWO1lBRUQsOENBQThDO1lBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUEsYUFBSSxFQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDNUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixPQUFPLENBQUMsT0FBTyxDQUFDO1lBRWhDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsVUFBZ0IsR0FBRyxJQUFJOztvQkFDbEQsT0FBTyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO2dCQUNsRCxDQUFDO2FBQUEsQ0FBQTtTQUNGO0tBQ0Y7Q0FDRiJ9