UNPKG

@serenity-js/protractor

Version:

Adapter that integrates @serenity-js/web with Protractor, enabling Serenity/JS reporting and using the Screenplay Pattern to write end-to-end test scenarios

89 lines 4.22 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.ProtractorSelectors = void 0; const core_1 = require("@serenity-js/core"); const web_1 = require("@serenity-js/web"); const protractor = __importStar(require("protractor")); class ProtractorSelectors { static selectorFrom(nativeLocator) { switch (true) { case nativeLocator.using === 'xpath': return new web_1.ByXPath(nativeLocator.value); case nativeLocator.toString().startsWith('by.shadowDomCss'): { const [, selector] = nativeLocator.toString().match(/by\.shadowDomCss\("(.*)"\)$/); return new web_1.ByDeepCss(selector); } case nativeLocator.toString().startsWith('by.cssContainingText'): { // https://github.com/angular/protractor/blob/4bc80d1a459542d883ea9200e4e1f48d265d0fda/lib/locators.ts#L428 const [, selector, text] = nativeLocator.toString().match(/by\.cssContainingText\("(.*)", "(.*)"\)$/); return new web_1.ByCssContainingText(selector, text); } case nativeLocator.using === 'css selector' && nativeLocator.value.startsWith('*[id='): { const [, selector] = nativeLocator.value.match(/\*\[id="(.*)"]$/); return new web_1.ById(selector); } // case nativeLocator.using === 'css selector': default: return new web_1.ByCss(nativeLocator.value); } } static locatorFrom(selector) { if (selector instanceof web_1.ByCss) { return protractor.by.css(selector.value); } if (selector instanceof web_1.ByDeepCss) { if (!protractor.by.shadowDomCss) { throw new core_1.LogicError(`By.deepCss() requires query-selector-shadow-dom plugin, which Serenity/JS ProtractorFrameworkAdapter registers by default. If you're using Serenity/JS without ProtractorFrameworkAdapter, please register the plugin yourself.`); } return protractor.by.shadowDomCss(selector.value.replace('>>>', '').trim()); } if (selector instanceof web_1.ByCssContainingText) { return protractor.by.cssContainingText(selector.value, selector.text); } if (selector instanceof web_1.ById) { return protractor.by.id(selector.value); } if (selector instanceof web_1.ByTagName) { return protractor.by.tagName(selector.value); } if (selector instanceof web_1.ByXPath) { return protractor.by.xpath(selector.value); } throw new core_1.LogicError((0, core_1.f) `${selector} is not supported by ${this.constructor.name}`); } } exports.ProtractorSelectors = ProtractorSelectors; //# sourceMappingURL=ProtractorSelectors.js.map