@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
JavaScript
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
;