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