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

109 lines 3.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BrowseTheWebWithProtractor = void 0; const core_1 = require("@serenity-js/core"); const web_1 = require("@serenity-js/web"); const models_1 = require("../models"); /** * This implementation of the [ability](https://serenity-js.org/api/core/class/Ability/) to [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb/) * enables the [`Actor`](https://serenity-js.org/api/core/class/Actor/) to interact with web front-ends using [Protractor](http://www.protractortest.org/#/). * * ## Using Protractor to `BrowseTheWeb` * * ```ts * import { actorCalled } from '@serenity-js/core' * import { BrowseTheWebWithProtractor } from '@serenity-js/protractor * import { By, Navigate, PageElement, Text } from '@serenity-js/web' * import { Ensure, equals } from '@serenity-js/assertions' * import { protractor } from 'protractor' * * const HomePage = { * title: () => * PageElement.located(By.css('h1')).describedAs('title') * } * * await actorCalled('Wendy') * .whoCan(BrowseTheWebWithProtractor.using(protractor.browser)) * .attemptsTo( * Navigate.to(`https://serenity-js.org`), * Ensure.that(Text.of(HomePage.title()), equals('Serenity/JS')), * ) * ``` * * ## Learn more * - [Protractor website](https://www.protractortest.org/) * - [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb/) * - [`Ability`](https://serenity-js.org/api/core/class/Ability/) * - [`Actor`](https://serenity-js.org/api/core/class/Actor/) * * @group Abilities */ class BrowseTheWebWithProtractor extends web_1.BrowseTheWeb { browser; /** * Ability to interact with web front-ends using * provided protractor browser instance. * * @param {protractor~ProtractorBrowser} browser * * #### Learn more * - [Protractor Browser API docs](http://www.protractortest.org/#/api?view=ProtractorBrowser) */ static using(browser) { return new BrowseTheWebWithProtractor(browser); } /** * @param browser * An instance of a protractor browser */ constructor(browser) { super(new models_1.ProtractorBrowsingSession(browser)); this.browser = browser; } /** * Returns Protractor configuration parameter at `path`. * * #### Configuring a custom parameter * * ```js * // protractor.conf.js * exports.config = { * params: { * login: { * username: 'jane@example.org' * password: process.env.PASSWORD * } * } * // ... * } * ``` * * #### Retrieving config param by name * ```js * BrowseTheWebWithProtractor.as(actor).param('login') * // returns object with username and password * ``` * * #### Retrieving config param by path * ```js * BrowseTheWeb.as(actor).param('login.username') * // returns string 'jane@example.org' * * @param path * Either a name or a dot-delimited path to the param. * * @throws [`ConfigurationError`](https://serenity-js.org/api/core/class/ConfigurationError/) * Throws a `ConfigurationError` if the parameter is `undefined` */ param(path) { return path.split('.') .reduce((config, segment) => { if (!(config && config[segment] !== undefined)) { throw new core_1.ConfigurationError(`Protractor param '${path}' is undefined`); } return config[segment]; }, this.browser.params); } } exports.BrowseTheWebWithProtractor = BrowseTheWebWithProtractor; //# sourceMappingURL=BrowseTheWebWithProtractor.js.map