import type OpenFin from "@openfin/core";
import type { IWebDriver } from "../models/IWebDriver";
import type { IWebDriverWindow } from "../models/IWebDriverWindow";
import type { WindowLocatorTypes } from "../models/windowLocatorTypes";
import type { WindowLocatorValueTypes } from "../models/windowLocatorValueTypes";
/**
 * BaseWebDriver with common methods.
 */
export declare abstract class BaseWebDriver<T, U extends IWebDriverWindow> implements Partial<IWebDriver> {
    /**
     * The node web driver to make the chromedriver calls with.
     */
    protected _client?: T;
    /**
     * All the windows by their web driver handle.
     */
    protected readonly _windowCache: {
        [handle: string]: IWebDriverWindow;
    };
    /**
     * Create a new instance of BaseWebDriver.
     * @param client The client to use for chromedriver calls if already created.
     */
    constructor(client?: T);
    /**
     * Get the details of all the connected windows.
     * @returns The list of windows.
     * @see https://w3c.github.io/webdriver/#dfn-get-window-handles
     */
    getWindows(): Promise<IWebDriverWindow[]>;
    /**
     * Get the details of the current window.
     * @returns The current window if available.
     * @see https://w3c.github.io/webdriver/#dfn-get-window-handle
     */
    getWindow(): Promise<IWebDriverWindow | undefined>;
    /**
     * Switch to a window by locator.
     * @param locator The locator type.
     * @param locatorValue The window locator value to use.
     * @param activateNativeWindow Activate the native window as well.
     * @returns True if the window was available.
     */
    switchToWindow(locator: WindowLocatorTypes, locatorValue: WindowLocatorValueTypes, activateNativeWindow?: boolean): Promise<boolean>;
    /**
     * Get the title of the current window.
     * @returns The window title.
     * @see https://w3c.github.io/webdriver/#dfn-get-title
     */
    getTitle(): Promise<string | undefined>;
    /**
     * Get the URL of the current window.
     * @returns The window url.
     * @see https://w3c.github.io/webdriver/#dfn-get-current-url
     */
    getUrl(): Promise<string | undefined>;
    /**
     * Set the URL of the current window.
     * @param url The url to navigate to.
     * @see https://w3c.github.io/webdriver/#dfn-navigate-to
     */
    setUrl(url: string): Promise<void>;
    /**
     * Get a window from the window cache and add it if not there.
     * @param windowHandle The window handle to lookup.
     * @returns The window information.
     */
    private getWindowFromCacheByHandle;
    /**
     * Try and match a window use a locator.
     * @param locatorValue The locator value.
     * @param testValue The value to check.
     * @returns True if the window matches.
     * @throws TypeError if there is value type is not known.
     */
    private locatorMatcher;
    /**
     * Try and match a window using the locator details.
     * @param locator The locator type.
     * @param locatorValue The locator value.
     * @param webDriverWindow The window to match against.
     * @returns True if the window matches the locator.
     */
    private matchWindow;
    /**
     * Create the native window object.
     * @param client The client.
     * @param windowHandle The window handle.
     * @param title The window title.
     * @param url The window url.
     * @param identity The window identity.
     * @returns The native window.
     */
    protected abstract createWebDriverWindow(client: T, windowHandle: string, title: string, url: string, identity: OpenFin.Identity | undefined): U;
    /**
     * Get the title of the current window.
     * @returns The window title.
     * @see https://w3c.github.io/webdriver/#dfn-get-title
     */
    protected abstract safeGetTitle(): Promise<string | undefined>;
    /**
     * Get the URL of the current window.
     * @returns The window url.
     * @see https://w3c.github.io/webdriver/#dfn-get-current-url
     */
    protected abstract safeGetUrl(): Promise<string | undefined>;
    /**
     * Set the URL of the current window.
     * @param url The url to navigate to.
     * @see https://w3c.github.io/webdriver/#dfn-navigate-to
     */
    protected abstract safeSetUrl(url: string): Promise<void>;
    /**
     * Get the window handle and catch exceptions.
     * @returns The window handle if available.
     */
    protected abstract safeGetWindowHandle(): Promise<string | undefined>;
    /**
     * Get the window handles and catch exceptions.
     * @returns The window handles if available.
     */
    protected abstract safeGetWindowHandles(): Promise<string[]>;
    /**
     * Switch to the window handle and catch exceptions.
     * @param handle The window to switch to.
     * @param activateNativeWindow Activate the native window as well.
     * @returns True if switched to the window.
     */
    protected abstract safeSwitchToWindow(handle: string, activateNativeWindow: boolean): Promise<boolean>;
}
