UNPKG

@serenity-js/web

Version:

Serenity/JS Screenplay Pattern library offering a flexible, web driver-agnostic approach for interacting with web-based user interfaces and components, suitable for various testing contexts

71 lines 2.93 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Locator = void 0; const node_util_1 = __importDefault(require("node:util")); const core_1 = require("@serenity-js/core"); const io_1 = require("@serenity-js/core/lib/io"); const RootLocator_1 = require("./RootLocator"); const selectors_1 = require("./selectors"); /** * [`Locator`](https://serenity-js.org/api/web/class/Locator/) uses a [`Selector`](https://serenity-js.org/api/web/class/Selector/) to locate a [`PageElement`](https://serenity-js.org/api/web/class/PageElement/) or [`PageElement`](https://serenity-js.org/api/web/class/PageElements/) * within the [`Page`](https://serenity-js.org/api/web/class/Page/). * * ## Learn more * - [`RootLocator`](https://serenity-js.org/api/web/class/RootLocator/) * - [`Page.locate`](https://serenity-js.org/api/web/class/Page/#locate) * - [`PageElement`](https://serenity-js.org/api/web/class/PageElement/) * - [`PageElement`](https://serenity-js.org/api/web/class/PageElements/) * * @group Models */ class Locator extends RootLocator_1.RootLocator { parent; selector; constructor(parent, selector) { super(); this.parent = parent; this.selector = selector; } async switchToFrame(element) { await this.parent.switchToFrame(element); } async switchToParentFrame() { await this.parent.switchToParentFrame(); } async switchToMainFrame() { await this.parent.switchToMainFrame(); } /** * Expresses [`ByCss`](https://serenity-js.org/api/web/class/ByCss/), [`ById`](https://serenity-js.org/api/web/class/ById/), or [`ByTagName`](https://serenity-js.org/api/web/class/ByTagName/) as a [`ByCss`](https://serenity-js.org/api/web/class/ByCss/) selector. * * @throws LogicError * if the `selector` can't be expressed as [`ByCss`](https://serenity-js.org/api/web/class/ByCss/) * * @param selector * @protected */ asCssSelector(selector) { if (selector instanceof selectors_1.ByCss) { return selector; } if (selector instanceof selectors_1.ById) { return new selectors_1.ByCss(`#${selector.value}`); } if (selector instanceof selectors_1.ByTagName) { return new selectors_1.ByCss(`${selector.value}`); } throw new core_1.LogicError(`${selector} can't be expressed as a CSS selector`); } toString() { return this.selector.toString(); } /** * Custom [Node.js inspection method](https://nodejs.org/api/util.html#utilinspectcustom). */ [node_util_1.default.inspect.custom] = (0, io_1.inspectedObject)(this, ['parent', 'selector']); } exports.Locator = Locator; //# sourceMappingURL=Locator.js.map