import { Page, Frame, ElementHandle, FrameWaitForFunctionOptions, ClickOptions, Dialog } from 'puppeteer'; import { JestExpect } from '@jest/expect'; type PuppeteerInstance = Page | Frame | ElementHandle; type Selector = { type: "css" | "xpath"; value: string; }; type SearchExpression = RegExp | string | undefined; type Options = FrameWaitForFunctionOptions; declare const setDefaultOptions: (options: Options) => void; declare const getDefaultOptions: () => Options; type MatchTextContentOptions = Options & { traverseShadowRoots?: boolean; }; type NotToMatchOptions = MatchTextContentOptions; declare function notToMatchTextContent(instance: PuppeteerInstance, matcher: SearchExpression, options?: NotToMatchOptions): Promise; type GetElementOptions = { text?: string | RegExp; visible?: boolean; }; type NotToMatchElementOptions = GetElementOptions & Options; declare function notToMatchElement(instance: PuppeteerInstance, selector: Selector | string, options?: NotToMatchElementOptions): Promise; type ToMatchElementOptions = GetElementOptions & Options; declare function toMatchElement(instance: PuppeteerInstance, selector: Selector | string, options?: ToMatchElementOptions): Promise>; type ToClickOptions = ToMatchElementOptions & ClickOptions; declare function toClick(instance: PuppeteerInstance, selector: Selector | string, options?: ToClickOptions): Promise; declare function toDisplayDialog(page: Page, block: () => Promise): Promise; type ToFillOptions = ToMatchElementOptions & { delay?: number; }; declare function toFill(instance: PuppeteerInstance, selector: Selector | string, value: string, options?: ToFillOptions): Promise; type ToFillFormOptions = ToFillOptions & ToMatchElementOptions; declare function toFillForm(instance: PuppeteerInstance, selector: Selector | string, values: Record, options?: ToFillFormOptions): Promise; type ToMatchOptions = MatchTextContentOptions; declare function toMatchTextContent(instance: PuppeteerInstance, matcher: SearchExpression, options?: ToMatchOptions): Promise; declare function toSelect(instance: PuppeteerInstance, selector: Selector | string, valueOrText: string, options?: ToMatchElementOptions): Promise; declare function toUploadFile(instance: PuppeteerInstance, selector: Selector | string, filePaths: string | string[], options?: ToMatchElementOptions): Promise; type Intersection = (T extends unknown ? (k: T) => void : never) extends (k: infer R) => void ? R : never; type Wrapper = T extends (page: Intersection, ...args: infer A) => infer R ? (...args: A) => R : never; type InstanceMatchers = T extends PuppeteerInstance ? { toClick: Wrapper; toFill: Wrapper; toFillForm: Wrapper; toMatchTextContent: Wrapper; toMatchElement: Wrapper; toSelect: Wrapper; toUploadFile: Wrapper; not: { toMatchTextContent: Wrapper; toMatchElement: Wrapper; }; } : never; interface PageMatchers extends InstanceMatchers { toDisplayDialog: Wrapper; not: InstanceMatchers[`not`] & {}; } interface FrameMatchers extends InstanceMatchers { not: InstanceMatchers[`not`] & {}; } interface ElementHandleMatchers extends InstanceMatchers> { not: InstanceMatchers>[`not`] & {}; } type PMatchersPerType = T extends Page ? PageMatchers : T extends Frame ? FrameMatchers : T extends ElementHandle ? ElementHandleMatchers : never; interface PuppeteerExpect { (actual: T): PMatchersPerType; } interface PuppeteerMatchers { toClick: T extends PuppeteerInstance ? Wrapper : never; toFill: T extends PuppeteerInstance ? Wrapper : never; toFillForm: T extends PuppeteerInstance ? Wrapper : never; toMatchTextContent: T extends PuppeteerInstance ? Wrapper : never; toMatchElement: T extends PuppeteerInstance ? Wrapper : never; toSelect: T extends PuppeteerInstance ? Wrapper : never; toUploadFile: T extends PuppeteerInstance ? Wrapper : never; toDisplayDialog: T extends Page ? Wrapper : never; not: { toMatchTextContent: T extends PuppeteerInstance ? Wrapper : never; toMatchElement: T extends PuppeteerInstance ? Wrapper : never; }; } declare global { namespace jest { interface Matchers extends PuppeteerMatchers { } } } declare const expectPuppeteer: PuppeteerExpect & JestExpect; export { type PuppeteerExpect, expectPuppeteer as expect, getDefaultOptions, setDefaultOptions };