UNPKG

flagpole

Version:

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

165 lines 8.58 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.BrowserResponse = void 0; 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 value_promise_1 = require("../value-promise"); class BrowserResponse extends puppeteer_response_1.PuppeteerResponse { 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 el = yield this._page.$(selector); return el === null ? helpers_1.wrapAsValue(this.context, null, selector) : browser_element_1.BrowserElement.create(el, this.context, selector, selector); })); } findAll(selector, a, b) { return __awaiter(this, void 0, void 0, function* () { const params = helpers_1.getFindParams(a, b); const elements = yield util_1.asyncMap(yield this._page.$$(selector), (el, i) => __awaiter(this, void 0, void 0, function* () { return yield browser_element_1.BrowserElement.create(el, this.context, helpers_1.getFindName(params, selector, i), selector); })); return helpers_1.filterFind(elements, params.contains || params.matches, params.opts); }); } findXPath(xPath) { return value_promise_1.ValuePromise.execute(() => __awaiter(this, void 0, void 0, function* () { const elements = yield this._page.$x(xPath); if (elements.length > 0) { return yield browser_element_1.BrowserElement.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* () { const out = []; const elements = yield this._page.$x(xPath); yield util_1.asyncForEach(elements, (el, i) => __awaiter(this, void 0, void 0, function* () { const element = yield browser_element_1.BrowserElement.create(el, this.context, `${xPath} [${i}]`, xPath); out.push(element); })); return out; }); } waitForHidden(selector, timeout) { return value_promise_1.ValuePromise.execute(() => __awaiter(this, void 0, void 0, function* () { const opts = { timeout: this.getTimeoutFromOverload(timeout), hidden: true, }; const element = yield this._page.waitForSelector(selector, opts); return browser_element_1.BrowserElement.create(element, this.context, selector, selector); })); } waitForVisible(selector, timeout) { return value_promise_1.ValuePromise.execute(() => __awaiter(this, void 0, void 0, function* () { const opts = { timeout: this.getTimeoutFromOverload(timeout), visible: true, }; const element = yield this._page.waitForSelector(selector, opts); return browser_element_1.BrowserElement.create(element, this.context, selector, selector); })); } waitForExists(selector, a, b) { return value_promise_1.ValuePromise.execute(() => __awaiter(this, void 0, void 0, function* () { const opts = { timeout: this.getTimeoutFromOverload(a, b) }; const pattern = this.getContainsPatternFromOverload(a); if (pattern === null) { const element = yield this._page.waitForSelector(selector, opts); return browser_element_1.BrowserElement.create(element, this.context, selector, selector); } const element = (yield this._page.waitForFunction(`Array.from(document.querySelectorAll("${selector}")).find(function(element) { return (${pattern}).test(element.innerText) })`, opts)).asElement(); return browser_element_1.BrowserElement.create(element, this.context, selector, selector); })); } waitForXPath(xPath, timeout) { return value_promise_1.ValuePromise.execute(() => __awaiter(this, void 0, void 0, function* () { const opts = { timeout: this.getTimeoutFromOverload(timeout) }; const element = yield this._page.waitForXPath(xPath, opts); return browser_element_1.BrowserElement.create(element, this.context, xPath, xPath); })); } waitForHavingText(selector, text, timeout) { return value_promise_1.ValuePromise.execute(() => __awaiter(this, void 0, void 0, function* () { return this.waitForExists(selector, text, timeout); })); } waitForNotExists(selector, a, b) { return value_promise_1.ValuePromise.execute(() => __awaiter(this, void 0, void 0, function* () { const opts = { timeout: this.getTimeoutFromOverload(a, b) }; const pattern = this.getContainsPatternFromOverload(a); if (pattern === null) { yield this._page.waitForFunction((selector) => !document.querySelector(selector), opts, selector); } else { yield this._page.waitForFunction(`Array.from(document.querySelectorAll("${selector}")).filter(function(element) { return (${pattern}).test(element.innerText) }).length == 0`, opts); } return helpers_1.wrapAsValue(this.context, true, selector); })); } selectOption(selector, value) { return value_promise_1.ValuePromise.execute(() => __awaiter(this, void 0, void 0, function* () { const element = yield this.find(selector); yield element.selectOption(value); return element; })); } mouseAction(disposition, button) { var _a, _b; return __awaiter(this, void 0, void 0, function* () { if (!button || button == "default") button = "left"; const opts = { button, }; if (disposition == "down") return (_a = this.page) === null || _a === void 0 ? void 0 : _a.mouse.down(opts); if (disposition == "up") return (_b = this.page) === null || _b === void 0 ? void 0 : _b.mouse.up(opts); }); } movePointer(...pointers) { return __awaiter(this, void 0, void 0, function* () { util_1.asyncForEach(pointers, (pointer) => __awaiter(this, void 0, void 0, function* () { var _a, _b; if (!pointer.end) pointer.end = pointer.start; if (!pointer.type || pointer.type == "default") pointer.type = "mouse"; if (!pointer.duration) pointer.duration = 500; if (!pointer.disposition) { pointer.disposition = { start: "down", end: "up" }; } if (pointer.type != "mouse") return; yield ((_a = this.page) === null || _a === void 0 ? void 0 : _a.mouse.move(pointer.start[0], pointer.start[1])); yield this.mouseAction(pointer.disposition.start, pointer.button); yield ((_b = this.page) === null || _b === void 0 ? void 0 : _b.mouse.move(pointer.end[0], pointer.end[1])); yield this.mouseAction(pointer.disposition.end, pointer.button); })); return this; }); } } exports.BrowserResponse = BrowserResponse; //# sourceMappingURL=browser-response.js.map