UNPKG

flagpole

Version:

Simple and fast DOM integration, headless or headful browser, and REST API testing framework.

201 lines 9.18 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()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ExtJSResponse = void 0; const extjs_component_1 = require("./extjs-component"); const puppeteer_response_1 = require("./puppeteer-response"); const util_1 = require("../util"); const helpers_1 = require("../helpers"); const browser_element_1 = require("./browser-element"); const extjs_helper_1 = require("./extjs-helper"); const value_promise_1 = require("../value-promise"); class ExtJSResponse extends puppeteer_response_1.PuppeteerResponse { constructor(scenario) { super(scenario); scenario.before(() => { scenario.nextPrepend((context) => __awaiter(this, void 0, void 0, function* () { if (scenario.page === null) { context.logFailure("Browser page not found"); return; } yield scenario.page.waitForFunction(() => !!Ext && !!Ext.ComponentQuery); yield this._injectScript(` isExtReady = false; Ext.onReady(() => { isExtReady = true; }); `); yield scenario.page.waitForFunction("isExtReady"); })); }); } findXPath(xPath) { return value_promise_1.ValuePromise.execute(() => __awaiter(this, void 0, void 0, function* () { if (!this.page) { throw "Page must be defined."; } const elements = yield this.page.$x(xPath); if (elements.length > 0) { return yield extjs_component_1.ExtJsComponent.create(elements[0], this.context, xPath, xPath); } return helpers_1.wrapAsValue(this.context, null, xPath); })); } findAllXPath(xPath) { return __awaiter(this, void 0, void 0, function* () { if (!this.page) { throw "Page must be defined."; } const puppeteerElements = []; if (this.scenario.page !== null) { const elements = yield this.scenario.page.$x(xPath); yield util_1.asyncForEach(elements, (el, i) => __awaiter(this, void 0, void 0, function* () { const element = yield extjs_component_1.ExtJsComponent.create(el, this.context, `${xPath} [${i}]`, xPath); puppeteerElements.push(element); })); } return puppeteerElements; }); } waitForExists(path, a, b) { return value_promise_1.ValuePromise.execute(() => __awaiter(this, void 0, void 0, function* () { if (this.page === null) { throw "Could not find browser page object."; } const ref = yield this.page.waitForFunction(`Ext.ComponentQuery.query("${path}")`, { timeout: this.getTimeoutFromOverload(a, b), }); return yield extjs_component_1.ExtJsComponent.create(ref, this.context, `${path}[0]`, path); })); } type(selector, textToType, opts = {}) { return value_promise_1.ValuePromise.execute(() => __awaiter(this, void 0, void 0, function* () { const component = yield this.find(selector); yield component.type(textToType, opts); return component; })); } clear(selector) { return value_promise_1.ValuePromise.execute(() => __awaiter(this, void 0, void 0, function* () { const component = yield this.find(selector); yield component.focus(); yield component.setValue(""); yield component.blur(); return component; })); } getComponentById(id) { return __awaiter(this, void 0, void 0, function* () { const ref = yield this._page.evaluateHandle(`Ext.getCmp(${id}")`); return ref ? yield extjs_component_1.ExtJsComponent.create(ref, this.context, `#${id}`, `#${id}`) : null; }); } _getComponent(js, name, path) { return __awaiter(this, void 0, void 0, function* () { const ref = yield this._page.evaluateHandle(js); return ref ? yield extjs_component_1.ExtJsComponent.create(ref, this.context, name, path) : helpers_1.wrapAsValue(this.context, null, name, path); }); } _injectScript(content) { return __awaiter(this, void 0, void 0, function* () { if (this.page === null) { throw "Page must be defined."; } return this.page.addScriptTag({ content: content, }); }); } find(selector, a, b) { return value_promise_1.ValuePromise.execute(() => __awaiter(this, void 0, void 0, function* () { const params = helpers_1.getFindParams(a, b); if (params.opts || params.matches || params.contains) { return helpers_1.findOne(this, selector, params); } const components = yield this._query(selector, params); if (components.length) { return components[0]; } const el = yield this._page.$(selector); if (el !== null) { const component = yield this._getComponentOrElementFromHandle(el, selector, selector); if (component) { return component; } } return helpers_1.wrapAsValue(this.context, null, selector); })); } findAll(selector, a, b) { return __awaiter(this, void 0, void 0, function* () { const params = helpers_1.getFindParams(a, b); const components = yield (() => __awaiter(this, void 0, void 0, function* () { const components = yield this._query(selector, params); if (components.length) { return components; } const elements = yield this._page.$$(selector); return util_1.asyncMap(elements, (el, i) => __awaiter(this, void 0, void 0, function* () { return yield this._getComponentOrElementFromHandle(el, helpers_1.getFindName(params, selector, i), `${selector} [${i}]`); })); }))(); return helpers_1.filterFind(components, params.contains || params.matches, params.opts); }); } selectOption(selector, value) { return value_promise_1.ValuePromise.execute(() => __awaiter(this, void 0, void 0, function* () { const component = yield this.find(selector); if (!component.isNull()) { component.selectOption(value); } return component; })); } _getComponentOrElementFromHandle(el, path, name) { return __awaiter(this, void 0, void 0, function* () { const isComponent = !!(yield (yield el.getProperty("data-componentid")).jsonValue()); return isComponent ? this._getComponentFromElementHandle(el) : browser_element_1.BrowserElement.create(el, this.context, name, path); }); } _getComponentFromElementHandle(el) { return __awaiter(this, void 0, void 0, function* () { const componentId = yield el.evaluate((node) => { const id = node.getAttribute("data-componentid"); if (id) { return id; } const closestComponent = node.closest("[data-componentid]"); if (closestComponent) { return closestComponent.getAttribute("data-componentid"); } return null; }); return (componentId && (yield this.getComponentById(componentId))) || null; }); } _query(selector, params) { return __awaiter(this, void 0, void 0, function* () { const results = yield extjs_helper_1.query(this._page, selector); const components = yield extjs_helper_1.jsHandleArrayToHandles(results); return util_1.asyncMap(components, (component, i) => __awaiter(this, void 0, void 0, function* () { return yield extjs_component_1.ExtJsComponent.create(component, this.context, helpers_1.getFindName(params, selector, i), selector); })); }); } } exports.ExtJSResponse = ExtJSResponse; //# sourceMappingURL=extjs-response.js.map