import { Page as PuppeteerPage } from 'puppeteer';
import { Page as PlaywrightPage } from 'playwright';
import { TestContext } from './TestContext';
import { TestEndStatus } from './attachInterfaces';
import { InstrumentedFunctionResult } from '@testim/root-cause-types';
export declare type RootCausePage = PuppeteerPage | PlaywrightPage;
export interface AttachOptions {
    noResultsServer?: boolean;
    externalTestName?: string;
    resultsDirectory?: string;
}
export declare type BeforeHook = (testContext: TestContext, fnName: string, proxyContext: any, rootPage: RootCausePage, args: any[]) => Promise<void>;
export declare type AfterHook = (testContext: TestContext, fnName: string, proxyContext: any, rootPage: RootCausePage, args: any[], instrumentedFunctionResult: InstrumentedFunctionResult<any, any>) => Promise<void>;
export declare type BeforeAllHook = (testContext: TestContext, proxyContext: any, rootPage: RootCausePage) => Promise<void>;
export declare type AfterAllHook = (testContext: TestContext, endStatus: TestEndStatus<unknown, unknown>) => Promise<void>;
export interface IAutomationFrameworkInstrumentor {
    registerBeforeAllHook(hook: BeforeAllHook): void;
    registerAfterAllHook(hook: AfterAllHook): void;
    registerBeforeHook(hook: BeforeHook): void;
    registerAfterHook(hook: AfterHook): void;
    wrapWithProxy<T extends object>(proxiedObject: T): T;
    end(endStatus: TestEndStatus<unknown, unknown>): Promise<void>;
    pause(): void;
    resume(): void;
}
