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

189 lines 6.99 kB
import type { DomainEvent } from '@serenity-js/core/lib/events'; import type { Stage, StageCrewMember } from '@serenity-js/core/lib/stage'; import * as strategies from './strategies'; /** * The Photographer is a [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) who takes screenshots * using the web browser associated with the [actor](https://serenity-js.org/api/core/class/Actor/) that is * currently [in the spotlight](https://serenity-js.org/api/core/function/actorInTheSpotlight/). * * ## Registering Photographer programmatically * * ```ts * import { configure, ArtifactArchiver } from '@serenity-js/core' * import { Photographer, TakePhotosOfFailures } from '@serenity-js/web' * * configure({ * crew: [ * ArtifactArchiver.storingArtifactsAt(process.cwd(), 'target/site/serenity'), * Photographer.whoWill(TakePhotosOfFailures), * ] * }) * ``` * * ## Using Photographer with Playwright Test * * ```ts * // playwright.config.ts * import { defineConfig } from '@playwright/test' * import type { SerenityFixtures, SerenityWorkerFixtures } from '@serenity-js/playwright-test' * * export default defineConfig<SerenityFixtures, SerenityWorkerFixtures>({ * reporter: [ * [ '@serenity-js/playwright-test', { * crew: [ * '@serenity-js/serenity-bdd', * [ '@serenity-js/core:ArtifactArchiver', { outputDirectory: 'target/site/serenity' } ], * ] * // other Serenity/JS config * }] * ], * * use: { * crew: [ * [ '@serenity-js/web:Photographer', { * strategy: 'TakePhotosOfFailures', * // strategy: 'TakePhotosOfInteractions', * } ] * ], * }, * }) * ``` * * #### Learn more * - [`SerenityFixtures`](https://serenity-js.org/api/playwright-test/interface/SerenityFixtures/) * - [`SerenityWorkerFixtures`](https://serenity-js.org/api/playwright-test/interface/SerenityWorkerFixtures/) * * ## Using Photographer with WebdriverIO * * ```ts * // wdio.conf.ts * import { ArtifactArchiver } from '@serenity-js/core' * import { WebdriverIOConfig } from '@serenity-js/webdriverio' * * export const config: WebdriverIOConfig= { * * // Tell WebdriverIO to use Serenity/JS framework * framework: '@serenity-js/webdriverio', * * serenity: { * // Configure Serenity/JS to use an appropriate test runner adapter * runner: 'cucumber', * // runner: 'mocha', * // runner: 'jasmine', * * // register custom Actors class to configure your Serenity/JS actors * actors: new Actors(), * * // Register StageCrewMembers we've imported at the top of this file * crew: [ * '@serenity-js/serenity-bdd', * [ '@serenity-js/core:ArtifactArchiver', { outputDirectory: 'target/site/serenity' } ], * [ '@serenity-js/web:Photographer', { * strategy: 'TakePhotosOfFailures', * // strategy: 'TakePhotosOfInteractions', * } ] * ] * }, * * // ... rest of the config omitted for brevity * } * ``` * * ## Using Photographer with Protractor * * ```ts * // protractor.conf.js * exports.config = { * * // Tell Protractor to use the Serenity/JS framework Protractor Adapter * framework: 'custom', * frameworkPath: require.resolve('@serenity-js/protractor/adapter'), * * serenity: { * runner: 'jasmine', * // runner: 'cucumber', * // runner: 'mocha', * crew: [ * @serenity-js/serenity-bdd', * '@serenity-js/core:ArtifactArchiver', { outputDirectory: 'target/site/serenity' } ], * '@serenity-js/web:Photographer', { * strategy: 'TakePhotosOfFailures', * // strategy: 'TakePhotosOfInteractions', * ] * ] * }, * * // ... rest of the config omitted for brevity * } * ``` * * ## Taking photos only upon failures only * * ```ts * import { Photographer, TakePhotosOfFailures } from '@serenity-js/web' * * Photographer.whoWill(TakePhotosOfFailures) * ``` * * ## Taking photos of all the interactions * * ```ts * import { Photographer, TakePhotosOfInteractions } from '@serenity-js/web' * * Photographer.whoWill(TakePhotosOfInteractions) * ``` * * ## Taking photos before and after all the interactions * * ```ts * import { Photographer, TakePhotosBeforeAndAfterInteractions } from '@serenity-js/web' * * Photographer.whoWill(TakePhotosBeforeAndAfterInteractions) * ``` * * ## Learn more * - [`Stage`](https://serenity-js.org/api/core/class/Stage/) * - [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) * - [`TakePhotosBeforeAndAfterInteractions`](https://serenity-js.org/api/web/class/TakePhotosBeforeAndAfterInteractions/) * - [`TakePhotosOfFailures`](https://serenity-js.org/api/web/class/TakePhotosOfFailures/) * - [`TakePhotosOfInteractions`](https://serenity-js.org/api/web/class/TakePhotosOfInteractions/) * * @group Stage */ export declare class Photographer implements StageCrewMember { private readonly photoTakingStrategy; private stage?; /** * Instantiates a new [`Photographer`](https://serenity-js.org/api/web/class/Photographer/) configured to take photos (screenshots) * as per the specified [`PhotoTakingStrategy`](https://serenity-js.org/api/web/class/PhotoTakingStrategy/). * * @param strategy * A no-arg constructor function that instantiates a [`PhotoTakingStrategy`](https://serenity-js.org/api/web/class/PhotoTakingStrategy/) */ static whoWill(strategy: new () => strategies.PhotoTakingStrategy): StageCrewMember; /** * Instantiates a new [`Photographer`](https://serenity-js.org/api/web/class/Photographer/) configured to take photos (screenshots) * as per the specified [`PhotoTakingStrategy`](https://serenity-js.org/api/web/class/PhotoTakingStrategy/). * * @param config */ static fromJSON(config?: { strategy?: Omit<keyof typeof strategies, 'PhotoTakingStrategy'>; }): StageCrewMember; constructor(photoTakingStrategy: strategies.PhotoTakingStrategy, stage?: Stage); /** * Assigns this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) to a given [`Stage`](https://serenity-js.org/api/core/class/Stage/). * * @param stage * An instance of a [`Stage`](https://serenity-js.org/api/core/class/Stage/) this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) will be assigned to */ assignedTo(stage: Stage): StageCrewMember; /** * Handles [`DomainEvent`](https://serenity-js.org/api/core-events/class/DomainEvent/) objects emitted by the [`Stage`](https://serenity-js.org/api/core/class/Stage/) * this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) is assigned to. * * @param event */ notifyOf(event: DomainEvent): void; } //# sourceMappingURL=Photographer.d.ts.map