@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
62 lines • 2.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TakeScreenshot = void 0;
const core_1 = require("@serenity-js/core");
const model_1 = require("@serenity-js/core/lib/model");
const abilities_1 = require("../abilities");
/**
* Instructs an [actor](https://serenity-js.org/api/core/class/Actor/)
* who has the [ability](https://serenity-js.org/api/core/class/Ability/)
* to [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb/)
* to take a screenshot and emit an artifact,
* which can then be persisted by [`ArtifactArchiver`](https://serenity-js.org/api/core/class/ArtifactArchiver/)
* and reported by [Serenity BDD reporter](https://serenity-js.org/api/serenity-bdd).
*
* #### Taking a screenshot
*
* ```ts
* import { actorCalled } from '@serenity-js/core';
* import { Navigate, TakeScreenshot } from '@serenity-js/protractor';
*
* await actorCalled('Tania')
* .attemptsTo(
* Navigate.to('/app'),
* TakeScreenshot.of('my app'),
* )
* ```
*
* ## Learn more
*
* - [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb/)
* - [`CollectsArtifacts`](https://serenity-js.org/api/core/interface/CollectsArtifacts/)
* - [`ArtifactArchiver`](https://serenity-js.org/api/core/class/ArtifactArchiver/)
*
* @group Activities
*/
class TakeScreenshot extends core_1.Interaction {
name;
/**
* Instantiates this [`Interaction`](https://serenity-js.org/api/core/class/Interaction/).
*
* @param name
* The name to give the emitted artifact
*/
static of(name) {
return new TakeScreenshot(name);
}
constructor(name) {
super((0, core_1.the) `#actor takes a screenshot of ${name}`);
this.name = name;
}
/**
* @inheritDoc
*/
async performAs(actor) {
const page = await abilities_1.BrowseTheWeb.as(actor).currentPage();
const screenshot = await page.takeScreenshot();
const name = await actor.answer(this.name);
actor.collect(model_1.Photo.fromBase64(screenshot), new model_1.Name(name));
}
}
exports.TakeScreenshot = TakeScreenshot;
//# sourceMappingURL=TakeScreenshot.js.map