web2driver
Version:
Pure-JS, browser-based WebDriver (+ Appium) client
156 lines • 12.2 kB
JavaScript
;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXNzaW9uLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQWlEO0FBQ2pELDBEQUFrQztBQUNsQyx1Q0FBaUU7QUFDakUsOEZBQXlFO0FBQ3pFLHdGQUFrRTtBQUNsRSwwRkFBb0U7QUFDcEUsd0ZBQW1FO0FBQ25FLHFDQUFvQztBQUVwQyxNQUFNLEdBQUcsR0FBRyxJQUFBLGdCQUFNLEVBQUMsWUFBWSxDQUFDLENBQUM7QUFFakMsTUFBTSxxQkFBcUIsR0FBRyxlQUFlLENBQUM7QUFDOUMsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9ELG1CQUFtQixHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcscUJBQXFCLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuRixNQUFNLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUV6RSxNQUFxQixPQUFPO0lBRTFCLFlBQWEsZUFBZSxFQUFFLFFBQVEsR0FBRyxpQkFBUSxDQUFDLFFBQVE7UUFDeEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUM7UUFDOUIsR0FBRyxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFSyxHQUFHLENBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSTs7WUFDN0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDcEQsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRTtn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