|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- "use strict";
- var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.SUPPORTED_BROWSER = exports.sessionMap = void 0;
- const os_1 = __importDefault(require("os"));
- const path_1 = __importDefault(require("path"));
- const ua_parser_js_1 = __importDefault(require("ua-parser-js"));
- const uuid_1 = require("uuid");
- const logger_1 = __importDefault(require("@wdio/logger"));
- const utils_1 = require("@wdio/utils");
- const config_1 = require("@wdio/config");
- const devtoolsdriver_1 = __importDefault(require("./devtoolsdriver"));
- const launcher_1 = __importDefault(require("./launcher"));
- const constants_1 = require("./constants");
- Object.defineProperty(exports, "SUPPORTED_BROWSER", { enumerable: true, get: function () { return constants_1.SUPPORTED_BROWSER; } });
- const utils_2 = require("./utils");
- const log = logger_1.default('devtools:puppeteer');
- utils_2.patchDebug(log);
- exports.sessionMap = new Map();
- class DevTools {
- static async newSession(options = {}, modifier, userPrototype = {}, customCommandWrapper) {
- var _a, _b;
- const params = config_1.validateConfig(constants_1.DEFAULTS, options);
- if (params.logLevel && (!options.logLevels || !options.logLevels['devtools'])) {
- logger_1.default.setLevel('devtools', params.logLevel);
- }
- if (params.outputDir && !process.env.WDIO_LOG_PATH) {
- process.env.WDIO_LOG_PATH = path_1.default.join(params.outputDir, 'wdio.log');
- }
- log.info('Initiate new session using the DevTools protocol');
- const browser = await launcher_1.default(params.capabilities);
- const pages = await browser.pages();
- const driver = new devtoolsdriver_1.default(browser, pages);
- const sessionId = uuid_1.v4();
- const uaParser = new ua_parser_js_1.default(await browser.userAgent());
- const userAgent = uaParser.getResult();
- const availableVendorPrefixes = Object.values(constants_1.VENDOR_PREFIX);
- const vendorCapPrefix = Object.keys(params.capabilities)
- .find((capKey) => availableVendorPrefixes.includes(capKey));
- params.requestedCapabilities = { ...params.capabilities };
- params.capabilities = {
- browserName: userAgent.browser.name,
- browserVersion: userAgent.browser.version,
- platformName: os_1.default.platform(),
- platformVersion: os_1.default.release()
- };
- if (vendorCapPrefix) {
- Object.assign(params.capabilities, {
- [vendorCapPrefix]: Object.assign({ debuggerAddress: browser._connection.url().split('/')[2] }, params.capabilities[vendorCapPrefix])
- });
- }
- exports.sessionMap.set(sessionId, { browser, session: driver });
- const environmentPrototype = { puppeteer: { value: browser } };
- Object.entries(utils_1.devtoolsEnvironmentDetector({
- browserName: (_b = (_a = userAgent === null || userAgent === void 0 ? void 0 : userAgent.browser) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.toLowerCase()
- })).forEach(([name, value]) => {
- environmentPrototype[name] = { value };
- });
- const commandWrapper = (method, endpoint, commandInfo) => driver.register(commandInfo);
- const protocolCommands = utils_2.getPrototype(commandWrapper);
- const prototype = {
- ...protocolCommands,
- ...userPrototype,
- ...environmentPrototype
- };
- const monad = utils_1.webdriverMonad(params, modifier, prototype);
- return monad(sessionId, customCommandWrapper);
- }
- static async reloadSession(instance) {
- const { session } = exports.sessionMap.get(instance.sessionId);
- const browser = await launcher_1.default(instance.requestedCapabilities);
- const pages = await browser.pages();
- session.elementStore.clear();
- session.windows = new Map();
- session.browser = browser;
- for (const page of pages) {
- const pageId = uuid_1.v4();
- session.windows.set(pageId, page);
- session.currentWindowHandle = pageId;
- }
- exports.sessionMap.set(instance.sessionId, { browser, session });
- return instance.sessionId;
- }
- static attachToSession() {
- throw new Error('not yet implemented');
- }
- }
- exports.default = DevTools;
|