import puppeteer from 'puppeteer';
import playwright from 'playwright';
declare type AutomationLibrary = 'playwright' | 'puppeteer';
interface LaunchOptionsBase<TAutomationLibrary extends AutomationLibrary> {
    testName: string;
    browserOptions?: LaunchOptionsOptionsMap[TAutomationLibrary];
    noServer?: boolean;
    automationLibrary: TAutomationLibrary;
    headless?: boolean;
    _runId?: string;
}
export declare type BrowserOptions = PuppeteerBrowserOptions | PlaywrightBrowserOptions;
interface LaunchOptionsOptionsMap {
    puppeteer: PuppeteerBrowserOptions;
    playwright: PlaywrightBrowserOptions;
}
interface AutomationLibraryPageMap {
    puppeteer: puppeteer.Page;
    playwright: playwright.Page;
}
export interface PuppeteerBrowserOptions {
    headless?: boolean;
    browserArgs?: string[];
}
export interface PlaywrightBrowserOptions {
    browser: 'chromium' | 'webkit' | 'firefox';
    headless?: boolean;
    browserArgs?: string[];
}
export declare function launch<TSelectedAutomationLibrary extends AutomationLibrary>(options: LaunchOptionsBase<TSelectedAutomationLibrary>, userTestFunction: (page: AutomationLibraryPageMap[TSelectedAutomationLibrary]) => Promise<unknown>): Promise<void>;
export declare function launchImpl<T extends AutomationLibrary>(options: LaunchOptionsBase<T>, userTestFunction: (page: AutomationLibraryPageMap[T]) => Promise<unknown>, dateConstructor?: typeof Date): Promise<void>;
export {};
