import { ThenableWebDriver } from "selenium-webdriver";
import { Options as ChromeOptions } from "selenium-webdriver/chrome";
import { Options as EdgeOptions } from "selenium-webdriver/edge";
import { Options as FirefoxOptions } from "selenium-webdriver/firefox";
import { Options as SafariOptions } from "selenium-webdriver/safari";
/**
 * Options for configuring WebDriver instances.
 */
export interface DriverOptions {
    /** Mobile device emulation settings */
    mobileEmulation?: {
        deviceName: string;
    } | {
        width: number;
        height: number;
        pixelRatio: number;
    } | any;
    /** Enable BiDi (Bidirectional communication) protocol */
    enableBidi?: boolean;
    /** Custom Chrome command-line arguments (e.g., ['--allow-file-access-from-files', '--disable-gpu']) */
    chromeArguments?: string[];
}
/**
 * Factory class for creating and configuring Selenium WebDriver instances.
 *
 * Handles browser-specific configuration and provides pre-configured drivers for different browsers.
 * Automatically applies settings from environment variables and Settings class.
 *
 * **Supported browsers:**
 * - Chrome (with mobile emulation and BiDi support)
 * - Edge
 * - Firefox
 * - Safari
 *
 * @example
 * ```typescript
 * // Get default driver (from Settings.browserName)
 * const manager = new DriverManager();
 * const driver = manager.getDriver();
 *
 * // Get driver with mobile emulation
 * const mobileDriver = manager.getDriver({
 *   mobileEmulation: { deviceName: 'iPhone 14 Pro Max' }
 * });
 *
 * // Get driver with BiDi enabled
 * const bidiDriver = manager.getDriver({ enableBidi: true });
 *
 * // Get specific browser driver
 * const chromeDriver = manager.getChromeDriver();
 * const firefoxDriver = manager.getFirefoxDriver();
 * ```
 */
export declare class DriverManager {
    /**
     * Default command-line arguments for Chromium-based browsers (Chrome, Edge).
     *
     * These options ensure consistent test behavior:
     * - Fixed window size and scale factor for consistent screenshots
     * - Disabled extensions and notifications to avoid interference
     * - Reduced logging noise
     * - Certificate error handling
     * - Disabled search engine choice screen
     */
    DEFAULT_CHROMIUM_OPTIONS: string[];
    /**
     * Creates a WebDriver instance based on Settings.browserName.
     *
     * Automatically selects the appropriate browser driver based on configuration.
     * Supports mobile emulation and BiDi protocol for Chrome.
     *
     * @param options - Optional driver configuration
     * @param options.mobileEmulation - Mobile device emulation settings (Chrome only)
     * @param options.enableBidi - Enable BiDi protocol for advanced features (Chrome only)
     * @returns Configured WebDriver instance
     *
     * @example
     * ```typescript
     * const manager = new DriverManager();
     *
     * // Basic driver
     * const driver = manager.getDriver();
     *
     * // With mobile emulation
     * const mobile = manager.getDriver({
     *   mobileEmulation: { deviceName: 'Pixel 5' }
     * });
     *
     * // With BiDi for CDP features
     * const advanced = manager.getDriver({ enableBidi: true });
     * ```
     */
    getDriver(options?: DriverOptions): ThenableWebDriver;
    /**
     * Creates Chrome-specific options with custom arguments and settings.
     *
     * Configures Chrome with optimal settings for testing, including headless mode
     * support, Docker compatibility, mobile emulation, and BiDi protocol.
     *
     * @param args - Command-line arguments for Chrome (default: DEFAULT_CHROMIUM_OPTIONS)
     * @param options - Driver configuration options
     * @returns Configured ChromeOptions instance
     *
     * @example
     * ```typescript
     * const manager = new DriverManager();
     *
     * // Get default options
     * const options = manager.getChromeOptions();
     *
     * // Custom arguments
     * const customOptions = manager.getChromeOptions([
     *   '--window-size=1920,1080',
     *   '--disable-gpu'
     * ]);
     *
     * // With mobile emulation
     * const mobileOptions = manager.getChromeOptions(
     *   manager.DEFAULT_CHROMIUM_OPTIONS,
     *   { mobileEmulation: { deviceName: 'iPhone 12' } }
     * );
     * ```
     */
    getChromeOptions(args?: string[], options?: DriverOptions): ChromeOptions;
    /**
     * Creates a Chrome WebDriver instance.
     *
     * @param options - Either pre-configured ChromeOptions or DriverOptions
     * @returns Chrome WebDriver instance
     *
     * @example
     * ```typescript
     * const manager = new DriverManager();
     *
     * // Basic Chrome driver
     * const driver = manager.getChromeDriver();
     *
     * // With custom options
     * const options = manager.getChromeOptions();
     * options.addArguments('--start-maximized');
     * const driver = manager.getChromeDriver(options);
     * ```
     */
    getChromeDriver(options?: ChromeOptions | DriverOptions): ThenableWebDriver;
    getEdgeOptions(args?: string[]): EdgeOptions;
    getEdgeDriver(options?: EdgeOptions): ThenableWebDriver;
    getFirefoxOptions(): FirefoxOptions;
    getFirefoxDriver(options?: FirefoxOptions): ThenableWebDriver;
    getSafariOptions(): SafariOptions;
    getSafariDriver(options?: SafariOptions): ThenableWebDriver;
}
