First Commit
This commit is contained in:
408
node_modules/playwright-core/lib/client/frame.js
generated
vendored
Normal file
408
node_modules/playwright-core/lib/client/frame.js
generated
vendored
Normal file
@@ -0,0 +1,408 @@
|
||||
"use strict";
|
||||
var __create = Object.create;
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __getProtoOf = Object.getPrototypeOf;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
||||
// If the importer is in node compatibility mode or this is not an ESM
|
||||
// file that has been converted to a CommonJS file using a Babel-
|
||||
// compatible transform (i.e. "__esModule" has not been set), then set
|
||||
// "default" to the CommonJS "module.exports" for node compatibility.
|
||||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
||||
mod
|
||||
));
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var frame_exports = {};
|
||||
__export(frame_exports, {
|
||||
Frame: () => Frame,
|
||||
verifyLoadState: () => verifyLoadState
|
||||
});
|
||||
module.exports = __toCommonJS(frame_exports);
|
||||
var import_eventEmitter = require("./eventEmitter");
|
||||
var import_channelOwner = require("./channelOwner");
|
||||
var import_clientHelper = require("./clientHelper");
|
||||
var import_elementHandle = require("./elementHandle");
|
||||
var import_events = require("./events");
|
||||
var import_jsHandle = require("./jsHandle");
|
||||
var import_locator = require("./locator");
|
||||
var network = __toESM(require("./network"));
|
||||
var import_types = require("./types");
|
||||
var import_waiter = require("./waiter");
|
||||
var import_assert = require("../utils/isomorphic/assert");
|
||||
var import_locatorUtils = require("../utils/isomorphic/locatorUtils");
|
||||
var import_urlMatch = require("../utils/isomorphic/urlMatch");
|
||||
var import_timeoutSettings = require("./timeoutSettings");
|
||||
class Frame extends import_channelOwner.ChannelOwner {
|
||||
constructor(parent, type, guid, initializer) {
|
||||
super(parent, type, guid, initializer);
|
||||
this._parentFrame = null;
|
||||
this._url = "";
|
||||
this._name = "";
|
||||
this._detached = false;
|
||||
this._childFrames = /* @__PURE__ */ new Set();
|
||||
this._eventEmitter = new import_eventEmitter.EventEmitter(parent._platform);
|
||||
this._eventEmitter.setMaxListeners(0);
|
||||
this._parentFrame = Frame.fromNullable(initializer.parentFrame);
|
||||
if (this._parentFrame)
|
||||
this._parentFrame._childFrames.add(this);
|
||||
this._name = initializer.name;
|
||||
this._url = initializer.url;
|
||||
this._loadStates = new Set(initializer.loadStates);
|
||||
this._channel.on("loadstate", (event) => {
|
||||
if (event.add) {
|
||||
this._loadStates.add(event.add);
|
||||
this._eventEmitter.emit("loadstate", event.add);
|
||||
}
|
||||
if (event.remove)
|
||||
this._loadStates.delete(event.remove);
|
||||
if (!this._parentFrame && event.add === "load" && this._page)
|
||||
this._page.emit(import_events.Events.Page.Load, this._page);
|
||||
if (!this._parentFrame && event.add === "domcontentloaded" && this._page)
|
||||
this._page.emit(import_events.Events.Page.DOMContentLoaded, this._page);
|
||||
});
|
||||
this._channel.on("navigated", (event) => {
|
||||
this._url = event.url;
|
||||
this._name = event.name;
|
||||
this._eventEmitter.emit("navigated", event);
|
||||
if (!event.error && this._page)
|
||||
this._page.emit(import_events.Events.Page.FrameNavigated, this);
|
||||
});
|
||||
}
|
||||
static from(frame) {
|
||||
return frame._object;
|
||||
}
|
||||
static fromNullable(frame) {
|
||||
return frame ? Frame.from(frame) : null;
|
||||
}
|
||||
page() {
|
||||
return this._page;
|
||||
}
|
||||
_timeout(options) {
|
||||
const timeoutSettings = this._page?._timeoutSettings || new import_timeoutSettings.TimeoutSettings(this._platform);
|
||||
return timeoutSettings.timeout(options || {});
|
||||
}
|
||||
_navigationTimeout(options) {
|
||||
const timeoutSettings = this._page?._timeoutSettings || new import_timeoutSettings.TimeoutSettings(this._platform);
|
||||
return timeoutSettings.navigationTimeout(options || {});
|
||||
}
|
||||
async goto(url, options = {}) {
|
||||
const waitUntil = verifyLoadState("waitUntil", options.waitUntil === void 0 ? "load" : options.waitUntil);
|
||||
return network.Response.fromNullable((await this._channel.goto({ url, ...options, waitUntil, timeout: this._navigationTimeout(options) })).response);
|
||||
}
|
||||
_setupNavigationWaiter(options) {
|
||||
const waiter = new import_waiter.Waiter(this._page, "");
|
||||
if (this._page.isClosed())
|
||||
waiter.rejectImmediately(this._page._closeErrorWithReason());
|
||||
waiter.rejectOnEvent(this._page, import_events.Events.Page.Close, () => this._page._closeErrorWithReason());
|
||||
waiter.rejectOnEvent(this._page, import_events.Events.Page.Crash, new Error("Navigation failed because page crashed!"));
|
||||
waiter.rejectOnEvent(this._page, import_events.Events.Page.FrameDetached, new Error("Navigating frame was detached!"), (frame) => frame === this);
|
||||
const timeout = this._page._timeoutSettings.navigationTimeout(options);
|
||||
waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded.`);
|
||||
return waiter;
|
||||
}
|
||||
async waitForNavigation(options = {}) {
|
||||
return await this._page._wrapApiCall(async () => {
|
||||
const waitUntil = verifyLoadState("waitUntil", options.waitUntil === void 0 ? "load" : options.waitUntil);
|
||||
const waiter = this._setupNavigationWaiter(options);
|
||||
const toUrl = typeof options.url === "string" ? ` to "${options.url}"` : "";
|
||||
waiter.log(`waiting for navigation${toUrl} until "${waitUntil}"`);
|
||||
const navigatedEvent = await waiter.waitForEvent(this._eventEmitter, "navigated", (event) => {
|
||||
if (event.error)
|
||||
return true;
|
||||
waiter.log(` navigated to "${event.url}"`);
|
||||
return (0, import_urlMatch.urlMatches)(this._page?.context()._options.baseURL, event.url, options.url);
|
||||
});
|
||||
if (navigatedEvent.error) {
|
||||
const e = new Error(navigatedEvent.error);
|
||||
e.stack = "";
|
||||
await waiter.waitForPromise(Promise.reject(e));
|
||||
}
|
||||
if (!this._loadStates.has(waitUntil)) {
|
||||
await waiter.waitForEvent(this._eventEmitter, "loadstate", (s) => {
|
||||
waiter.log(` "${s}" event fired`);
|
||||
return s === waitUntil;
|
||||
});
|
||||
}
|
||||
const request = navigatedEvent.newDocument ? network.Request.fromNullable(navigatedEvent.newDocument.request) : null;
|
||||
const response = request ? await waiter.waitForPromise(request._finalRequest()._internalResponse()) : null;
|
||||
waiter.dispose();
|
||||
return response;
|
||||
}, { title: "Wait for navigation" });
|
||||
}
|
||||
async waitForLoadState(state = "load", options = {}) {
|
||||
state = verifyLoadState("state", state);
|
||||
return await this._page._wrapApiCall(async () => {
|
||||
const waiter = this._setupNavigationWaiter(options);
|
||||
if (this._loadStates.has(state)) {
|
||||
waiter.log(` not waiting, "${state}" event already fired`);
|
||||
} else {
|
||||
await waiter.waitForEvent(this._eventEmitter, "loadstate", (s) => {
|
||||
waiter.log(` "${s}" event fired`);
|
||||
return s === state;
|
||||
});
|
||||
}
|
||||
waiter.dispose();
|
||||
}, { title: `Wait for load state "${state}"` });
|
||||
}
|
||||
async waitForURL(url, options = {}) {
|
||||
if ((0, import_urlMatch.urlMatches)(this._page?.context()._options.baseURL, this.url(), url))
|
||||
return await this.waitForLoadState(options.waitUntil, options);
|
||||
await this.waitForNavigation({ url, ...options });
|
||||
}
|
||||
async frameElement() {
|
||||
return import_elementHandle.ElementHandle.from((await this._channel.frameElement()).element);
|
||||
}
|
||||
async evaluateHandle(pageFunction, arg) {
|
||||
(0, import_jsHandle.assertMaxArguments)(arguments.length, 2);
|
||||
const result = await this._channel.evaluateExpressionHandle({ expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
||||
return import_jsHandle.JSHandle.from(result.handle);
|
||||
}
|
||||
async evaluate(pageFunction, arg) {
|
||||
(0, import_jsHandle.assertMaxArguments)(arguments.length, 2);
|
||||
const result = await this._channel.evaluateExpression({ expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
||||
return (0, import_jsHandle.parseResult)(result.value);
|
||||
}
|
||||
async _evaluateFunction(functionDeclaration) {
|
||||
const result = await this._channel.evaluateExpression({ expression: functionDeclaration, isFunction: true, arg: (0, import_jsHandle.serializeArgument)(void 0) });
|
||||
return (0, import_jsHandle.parseResult)(result.value);
|
||||
}
|
||||
async _evaluateExposeUtilityScript(pageFunction, arg) {
|
||||
(0, import_jsHandle.assertMaxArguments)(arguments.length, 2);
|
||||
const result = await this._channel.evaluateExpression({ expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
||||
return (0, import_jsHandle.parseResult)(result.value);
|
||||
}
|
||||
async $(selector, options) {
|
||||
const result = await this._channel.querySelector({ selector, ...options });
|
||||
return import_elementHandle.ElementHandle.fromNullable(result.element);
|
||||
}
|
||||
async waitForSelector(selector, options = {}) {
|
||||
if (options.visibility)
|
||||
throw new Error("options.visibility is not supported, did you mean options.state?");
|
||||
if (options.waitFor && options.waitFor !== "visible")
|
||||
throw new Error("options.waitFor is not supported, did you mean options.state?");
|
||||
const result = await this._channel.waitForSelector({ selector, ...options, timeout: this._timeout(options) });
|
||||
return import_elementHandle.ElementHandle.fromNullable(result.element);
|
||||
}
|
||||
async dispatchEvent(selector, type, eventInit, options = {}) {
|
||||
await this._channel.dispatchEvent({ selector, type, eventInit: (0, import_jsHandle.serializeArgument)(eventInit), ...options, timeout: this._timeout(options) });
|
||||
}
|
||||
async $eval(selector, pageFunction, arg) {
|
||||
(0, import_jsHandle.assertMaxArguments)(arguments.length, 3);
|
||||
const result = await this._channel.evalOnSelector({ selector, expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
||||
return (0, import_jsHandle.parseResult)(result.value);
|
||||
}
|
||||
async $$eval(selector, pageFunction, arg) {
|
||||
(0, import_jsHandle.assertMaxArguments)(arguments.length, 3);
|
||||
const result = await this._channel.evalOnSelectorAll({ selector, expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
||||
return (0, import_jsHandle.parseResult)(result.value);
|
||||
}
|
||||
async $$(selector) {
|
||||
const result = await this._channel.querySelectorAll({ selector });
|
||||
return result.elements.map((e) => import_elementHandle.ElementHandle.from(e));
|
||||
}
|
||||
async _queryCount(selector, options) {
|
||||
return (await this._channel.queryCount({ selector, ...options })).value;
|
||||
}
|
||||
async content() {
|
||||
return (await this._channel.content()).value;
|
||||
}
|
||||
async setContent(html, options = {}) {
|
||||
const waitUntil = verifyLoadState("waitUntil", options.waitUntil === void 0 ? "load" : options.waitUntil);
|
||||
await this._channel.setContent({ html, ...options, waitUntil, timeout: this._navigationTimeout(options) });
|
||||
}
|
||||
name() {
|
||||
return this._name || "";
|
||||
}
|
||||
url() {
|
||||
return this._url;
|
||||
}
|
||||
parentFrame() {
|
||||
return this._parentFrame;
|
||||
}
|
||||
childFrames() {
|
||||
return Array.from(this._childFrames);
|
||||
}
|
||||
isDetached() {
|
||||
return this._detached;
|
||||
}
|
||||
async addScriptTag(options = {}) {
|
||||
const copy = { ...options };
|
||||
if (copy.path) {
|
||||
copy.content = (await this._platform.fs().promises.readFile(copy.path)).toString();
|
||||
copy.content = (0, import_clientHelper.addSourceUrlToScript)(copy.content, copy.path);
|
||||
}
|
||||
return import_elementHandle.ElementHandle.from((await this._channel.addScriptTag({ ...copy })).element);
|
||||
}
|
||||
async addStyleTag(options = {}) {
|
||||
const copy = { ...options };
|
||||
if (copy.path) {
|
||||
copy.content = (await this._platform.fs().promises.readFile(copy.path)).toString();
|
||||
copy.content += "/*# sourceURL=" + copy.path.replace(/\n/g, "") + "*/";
|
||||
}
|
||||
return import_elementHandle.ElementHandle.from((await this._channel.addStyleTag({ ...copy })).element);
|
||||
}
|
||||
async click(selector, options = {}) {
|
||||
return await this._channel.click({ selector, ...options, timeout: this._timeout(options) });
|
||||
}
|
||||
async dblclick(selector, options = {}) {
|
||||
return await this._channel.dblclick({ selector, ...options, timeout: this._timeout(options) });
|
||||
}
|
||||
async dragAndDrop(source, target, options = {}) {
|
||||
return await this._channel.dragAndDrop({ source, target, ...options, timeout: this._timeout(options) });
|
||||
}
|
||||
async tap(selector, options = {}) {
|
||||
return await this._channel.tap({ selector, ...options, timeout: this._timeout(options) });
|
||||
}
|
||||
async fill(selector, value, options = {}) {
|
||||
return await this._channel.fill({ selector, value, ...options, timeout: this._timeout(options) });
|
||||
}
|
||||
async _highlight(selector) {
|
||||
return await this._channel.highlight({ selector });
|
||||
}
|
||||
locator(selector, options) {
|
||||
return new import_locator.Locator(this, selector, options);
|
||||
}
|
||||
getByTestId(testId) {
|
||||
return this.locator((0, import_locatorUtils.getByTestIdSelector)((0, import_locator.testIdAttributeName)(), testId));
|
||||
}
|
||||
getByAltText(text, options) {
|
||||
return this.locator((0, import_locatorUtils.getByAltTextSelector)(text, options));
|
||||
}
|
||||
getByLabel(text, options) {
|
||||
return this.locator((0, import_locatorUtils.getByLabelSelector)(text, options));
|
||||
}
|
||||
getByPlaceholder(text, options) {
|
||||
return this.locator((0, import_locatorUtils.getByPlaceholderSelector)(text, options));
|
||||
}
|
||||
getByText(text, options) {
|
||||
return this.locator((0, import_locatorUtils.getByTextSelector)(text, options));
|
||||
}
|
||||
getByTitle(text, options) {
|
||||
return this.locator((0, import_locatorUtils.getByTitleSelector)(text, options));
|
||||
}
|
||||
getByRole(role, options = {}) {
|
||||
return this.locator((0, import_locatorUtils.getByRoleSelector)(role, options));
|
||||
}
|
||||
frameLocator(selector) {
|
||||
return new import_locator.FrameLocator(this, selector);
|
||||
}
|
||||
async focus(selector, options = {}) {
|
||||
await this._channel.focus({ selector, ...options, timeout: this._timeout(options) });
|
||||
}
|
||||
async textContent(selector, options = {}) {
|
||||
const value = (await this._channel.textContent({ selector, ...options, timeout: this._timeout(options) })).value;
|
||||
return value === void 0 ? null : value;
|
||||
}
|
||||
async innerText(selector, options = {}) {
|
||||
return (await this._channel.innerText({ selector, ...options, timeout: this._timeout(options) })).value;
|
||||
}
|
||||
async innerHTML(selector, options = {}) {
|
||||
return (await this._channel.innerHTML({ selector, ...options, timeout: this._timeout(options) })).value;
|
||||
}
|
||||
async getAttribute(selector, name, options = {}) {
|
||||
const value = (await this._channel.getAttribute({ selector, name, ...options, timeout: this._timeout(options) })).value;
|
||||
return value === void 0 ? null : value;
|
||||
}
|
||||
async inputValue(selector, options = {}) {
|
||||
return (await this._channel.inputValue({ selector, ...options, timeout: this._timeout(options) })).value;
|
||||
}
|
||||
async isChecked(selector, options = {}) {
|
||||
return (await this._channel.isChecked({ selector, ...options, timeout: this._timeout(options) })).value;
|
||||
}
|
||||
async isDisabled(selector, options = {}) {
|
||||
return (await this._channel.isDisabled({ selector, ...options, timeout: this._timeout(options) })).value;
|
||||
}
|
||||
async isEditable(selector, options = {}) {
|
||||
return (await this._channel.isEditable({ selector, ...options, timeout: this._timeout(options) })).value;
|
||||
}
|
||||
async isEnabled(selector, options = {}) {
|
||||
return (await this._channel.isEnabled({ selector, ...options, timeout: this._timeout(options) })).value;
|
||||
}
|
||||
async isHidden(selector, options = {}) {
|
||||
return (await this._channel.isHidden({ selector, ...options })).value;
|
||||
}
|
||||
async isVisible(selector, options = {}) {
|
||||
return (await this._channel.isVisible({ selector, ...options })).value;
|
||||
}
|
||||
async hover(selector, options = {}) {
|
||||
await this._channel.hover({ selector, ...options, timeout: this._timeout(options) });
|
||||
}
|
||||
async selectOption(selector, values, options = {}) {
|
||||
return (await this._channel.selectOption({ selector, ...(0, import_elementHandle.convertSelectOptionValues)(values), ...options, timeout: this._timeout(options) })).values;
|
||||
}
|
||||
async setInputFiles(selector, files, options = {}) {
|
||||
const converted = await (0, import_elementHandle.convertInputFiles)(this._platform, files, this.page().context());
|
||||
await this._channel.setInputFiles({ selector, ...converted, ...options, timeout: this._timeout(options) });
|
||||
}
|
||||
async type(selector, text, options = {}) {
|
||||
await this._channel.type({ selector, text, ...options, timeout: this._timeout(options) });
|
||||
}
|
||||
async press(selector, key, options = {}) {
|
||||
await this._channel.press({ selector, key, ...options, timeout: this._timeout(options) });
|
||||
}
|
||||
async check(selector, options = {}) {
|
||||
await this._channel.check({ selector, ...options, timeout: this._timeout(options) });
|
||||
}
|
||||
async uncheck(selector, options = {}) {
|
||||
await this._channel.uncheck({ selector, ...options, timeout: this._timeout(options) });
|
||||
}
|
||||
async setChecked(selector, checked, options) {
|
||||
if (checked)
|
||||
await this.check(selector, options);
|
||||
else
|
||||
await this.uncheck(selector, options);
|
||||
}
|
||||
async waitForTimeout(timeout) {
|
||||
await this._channel.waitForTimeout({ waitTimeout: timeout });
|
||||
}
|
||||
async waitForFunction(pageFunction, arg, options = {}) {
|
||||
if (typeof options.polling === "string")
|
||||
(0, import_assert.assert)(options.polling === "raf", "Unknown polling option: " + options.polling);
|
||||
const result = await this._channel.waitForFunction({
|
||||
...options,
|
||||
pollingInterval: options.polling === "raf" ? void 0 : options.polling,
|
||||
expression: String(pageFunction),
|
||||
isFunction: typeof pageFunction === "function",
|
||||
arg: (0, import_jsHandle.serializeArgument)(arg),
|
||||
timeout: this._timeout(options)
|
||||
});
|
||||
return import_jsHandle.JSHandle.from(result.handle);
|
||||
}
|
||||
async title() {
|
||||
return (await this._channel.title()).value;
|
||||
}
|
||||
async _expect(expression, options) {
|
||||
const params = { expression, ...options, isNot: !!options.isNot };
|
||||
params.expectedValue = (0, import_jsHandle.serializeArgument)(options.expectedValue);
|
||||
const result = await this._channel.expect(params);
|
||||
if (result.received !== void 0)
|
||||
result.received = (0, import_jsHandle.parseResult)(result.received);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
function verifyLoadState(name, waitUntil) {
|
||||
if (waitUntil === "networkidle0")
|
||||
waitUntil = "networkidle";
|
||||
if (!import_types.kLifecycleEvents.has(waitUntil))
|
||||
throw new Error(`${name}: expected one of (load|domcontentloaded|networkidle|commit)`);
|
||||
return waitUntil;
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
Frame,
|
||||
verifyLoadState
|
||||
});
|
Reference in New Issue
Block a user