flagpole
Version:
Simple and fast DOM integration, headless or headful browser, and REST API testing framework.
165 lines • 8.58 kB
JavaScript
"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