UNPKG

@serenity-js/core

Version:

The core Serenity/JS framework, providing the Screenplay Pattern interfaces, as well as the test reporting and integration infrastructure

108 lines 5.67 kB
import type { UsesAbilities } from '../abilities'; import type { Answerable } from '../Answerable'; import type { Answered } from '../Answered'; import type { CollectsArtifacts } from '../artifacts'; import { Interaction } from '../Interaction'; import type { AnswersQuestions } from '../questions'; import type { DebuggingResult } from './DebuggingResult'; /** * Instructs the [actor](https://serenity-js.org/api/core/class/Actor/) to evaluate and [log](https://serenity-js.org/api/core/class/Log/) the provided [answerable](https://serenity-js.org/api/core/#Answerable) values. * * Since this interaction **accepts a callback function** that receives the evaluated results, * the best way to use it is while **running the test scenario via a Node.js debugger**. * See the links below to learn how to do it in popular IDEs. * * ## Debugging Answerable values * * [`Debug.values`](https://serenity-js.org/api/core/class/Debug/#values) accepts a callback function that receives an array of [`DebuggingResult`](https://serenity-js.org/api/core/interface/DebuggingResult/) objects, * as well as the result of evaluating each provided [answerable](https://serenity-js.org/api/core/#Answerable) with [`Actor.answer`](https://serenity-js.org/api/core/class/Actor/#answer). * * ```typescript * import { actorCalled, Debug } from '@serenity-js/core' * import { Navigate, Page } from '@serenity-js/web' * * // Running the below through the Node.js debugger makes the actor resolve the provided values * // and return them to the debugger function, where you can investigate their contents, * // or inspect any Errors the evaluation has resulted with. * await actorCalled('Debbie').attemptsTo( * Navigate.to('http://example.org'), * Debug.values((results, title, url) => { * // set a breakpoint here to view `results`, `title` and `url` in your IDE debugger * }, Page.current().title(), Page.current().url()), // accepts multiple values * ); * ``` * * ## Accessing Playwright Page * * [Playwright Test for VSCode](https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright) * provides features that allow for [experimenting with web UI locators](https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright#tune-locators) * while the test is paused at breakpoint. * * Since this functionality is specific to [Playwright](https://serenity-js.org/api/playwright), * you can use it by passing [`PlaywrightPage.current().nativePage()`](https://serenity-js.org/api/playwright/class/PlaywrightPage/#current) * to Serenity/JS [`Debug.values`](https://serenity-js.org/api/core/class/Debug/#values). Also make sure to name the evaluated value `page`, as this is the variable name that the Playwright VSCode extension expects. * * ```typescript * import { actorCalled, Debug } from '@serenity-js/core' * import { PlaywrightPage } from '@serenity-js/playwright' * * // Running the below through the Node.js debugger makes the actor resolve the provided values * // and return them to the debugger function, where you can investigate their contents, * // or inspect any Errors the evaluation has resulted with. * await actorCalled('Debbie').attemptsTo( * Navigate.to('http://example.org'), * Debug.values((results, page) => { * // set a breakpoint here to use Playwright locator debugging features * page.locator('.example-css-class') * // note that you can change this selector while having the test paused at breakpoint * }, PlaywrightPage.current().nativePage()), * ); * ``` * * ## Learn more * - [Node.js debugging - Getting started](https://nodejs.org/en/docs/guides/debugging-getting-started/) * - [Node.js debugging in VS Code](https://code.visualstudio.com/docs/nodejs/nodejs-debugging) * - [Running and debugging Node.js in WebStorm](https://www.jetbrains.com/help/webstorm/running-and-debugging-node-js.html) * - [Playwright Test for VSCode](https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright) * * @group Activities */ export declare class Debug<Values extends Array<Answerable<unknown>>> extends Interaction { private readonly debuggerFunction; private readonly values; /** * Instructs the [actor](https://serenity-js.org/api/core/class/Actor/) to evaluate the provided `values`, * log the results, and then pass them to your `debuggerFunction`. * * To use this interaction, run your test scenario in the Node.js debugger * and set a breakpoint inside the `debuggerFunction`. * * @param debuggerFunction * @param values */ static values<Values extends Array<Answerable<unknown>>>(debuggerFunction: (results: { [Index in keyof Values]: DebuggingResult<Values[Index]>; }, ...answers: { [Index in keyof Values]: Answered<Values[Index]>; }) => Promise<void> | void, ...values: Values): Interaction; /** * @param description * Description of this interaction * * @param debuggerFunction * Callback function to receive the results of debugging * * @param values * Value to be evaluated by the actor, and provided to debuggerFunction */ protected constructor(description: string, debuggerFunction: (debuggingResults: { [Index in keyof Values]: DebuggingResult<Values[Index]>; }, ...args: { [Index in keyof Values]: Answered<Values[Index]>; }) => Promise<void> | void, values: Values); /** * @inheritDoc */ performAs(actor: UsesAbilities & AnswersQuestions & CollectsArtifacts): Promise<void>; } //# sourceMappingURL=Debug.d.ts.map