import type { IWebDriverElement } from "../models/IWebDriverElement";
import type { IWebDriverWindow } from "../models/IWebDriverWindow";
import type { LocatorTypes } from "../models/locatorTypes";
import type { WebDriverAction } from "../models/webDriverAction";
import type { WindowLocatorTypes } from "../models/windowLocatorTypes";
import type { WindowLocatorValueTypes } from "../models/windowLocatorValueTypes";
/**
 * Global webdriver wrapper with non driver specific code.
 */
export declare class WebDriver {
    /**
     * Execute async script.
     * @param script The script to execute.
     * @param args Arguments to pass to the execute method.
     * @returns The result from the call.
     */
    static executeAsync<T>(script: string, args?: (string | object | number | boolean | undefined)[]): Promise<T>;
    /**
     * Call the execute async script for the specified method.
     * @param method The method to call in the global scope.
     * @param params Parameters to call the object with.
     * @param awaitReturn Await the return from the method.
     * @returns The result from the call.
     */
    static callMethod<T>(method: string, params?: (string | object | number | boolean | undefined)[], awaitReturn?: boolean): Promise<T>;
    /**
     * Call a JavaScript method until a condition is met, or timed out.
     * @param method The method to call on the OpenFin object.
     * @param params Parameters to call the object with.
     * @param callAsync Call the method as async.
     * @param condition Condition to test before returning.
     * @param timeoutMs The amount of time to wait for the object.
     * @param intervalMs The amount of time between checks.
     * @returns The result from the call.
     */
    static callMethodUntilCondition<T>(method: string, params: (string | object | number | boolean | undefined)[] | undefined, callAsync: boolean, condition: (result: T | Error) => boolean, timeoutMs?: number, intervalMs?: number): Promise<T | Error | unknown>;
    /**
     * Wait for an object to exist in the windows namespace.
     * @param objectPath The name of the object to wait for.
     * @param timeoutMs The amount of time to wait for the object.
     * @param intervalMs The amount of time between checks.
     * @returns The object if it exists.
     */
    static waitForObjectExisting<T>(objectPath: string, timeoutMs?: number, intervalMs?: number): Promise<T | undefined>;
    /**
     * Sleep for the specified milliseconds.
     * @param ms The milliseconds to sleep for.
     * @returns Nothing.
     */
    static sleep(ms: number): Promise<void>;
    /**
     * Get the title of the current window.
     * @returns The window title.
     */
    static getTitle(): Promise<string | undefined>;
    /**
     * Get the URL of the current window.
     * @returns The window title.
     */
    static getUrl(): Promise<string | undefined>;
    /**
     * Set the URL of the current window.
     * @param url The url to navigate to.
     * @returns Nothing.
     * @see https://w3c.github.io/webdriver/#dfn-navigate-to
     */
    static setUrl(url: string): Promise<void>;
    /**
     * Get the details of all the connected windows.
     * @returns The list of windows.
     * @see https://w3c.github.io/webdriver/#dfn-get-window-handles
     */
    static 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
     */
    static 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.
     */
    static switchToWindow(locator: WindowLocatorTypes, locatorValue: WindowLocatorValueTypes, activateNativeWindow?: boolean): Promise<boolean>;
    /**
     * Wait for a window by its locator.
     * @param locator The locator type.
     * @param locatorValue The window locator value to use.
     * @param timeoutMs The maximum amount of time to wait in seconds.
     * @param intervalMs The amount of time between checks.
     * @param activateNativeWindow Activate the native window as well.
     * @returns True if the window was found.
     */
    static waitForWindow(locator: WindowLocatorTypes, locatorValue: WindowLocatorValueTypes, timeoutMs?: number, intervalMs?: number, activateNativeWindow?: boolean): Promise<boolean>;
    /**
     * Find an element by its xpath.
     * @param elementPath The path the element to find.
     * @returns The element if found.
     */
    static findElementByPath(elementPath: string): Promise<IWebDriverElement | undefined>;
    /**
     * Wait for an element by its xpath.
     * @param elementPath The path the element to find.
     * @param timeoutMs The amount of time to wait for the object.
     * @param intervalMs The amount of time between checks.
     * @returns The element if found or undefined if not found within timeout.
     */
    static waitForElementByPath(elementPath: string, timeoutMs?: number, intervalMs?: number): Promise<IWebDriverElement | undefined>;
    /**
     * Find elements by their xpath.
     * @param elementPath The path the element to find.
     * @returns The element if found.
     */
    static findElementsByPath(elementPath: string): Promise<IWebDriverElement[]>;
    /**
     * Find an element by its tag.
     * @param tag The tag of the element to find.
     * @returns The element if found.
     */
    static findElementByTag(tag: string): Promise<IWebDriverElement | undefined>;
    /**
     * Find all elements by their tag.
     * @param tag The tag of the element to find.
     * @returns The elements if found.
     */
    static findElementsByTag(tag: string): Promise<IWebDriverElement[]>;
    /**
     * Wait for an element by its tag.
     * @param tag The tag of the element to find.
     * @param timeoutMs The amount of time to wait for the object.
     * @param intervalMs The amount of time between checks.
     * @returns The element if found or undefined if not found within timeout.
     */
    static waitForElementByTag(tag: string, timeoutMs?: number, intervalMs?: number): Promise<IWebDriverElement | undefined>;
    /**
     * Find an element by css selector.
     * @param cssSelector The css selector of the element to find.
     * @returns The element if found.
     */
    static findElementByCssSelector(cssSelector: string): Promise<IWebDriverElement | undefined>;
    /**
     * Find all elements by their css selector.
     * @param cssSelector The css selector of the element to find.
     * @returns The element if found.
     */
    static findElementsCssSelector(cssSelector: string): Promise<IWebDriverElement[]>;
    /**
     * Wait for an element by its css selector.
     * @param cssSelector The css selector of the element to find.
     * @param timeoutMs The amount of time to wait for the object.
     * @param intervalMs The amount of time between checks.
     * @returns The element if found or undefined if not found within timeout.
     */
    static waitForElementByCssSelector(cssSelector: string, timeoutMs?: number, intervalMs?: number): Promise<IWebDriverElement | undefined>;
    /**
     * Find an element by its id.
     * @param id The id of the element to find.
     * @returns The element if found.
     */
    static findElementById(id: string): Promise<IWebDriverElement | undefined>;
    /**
     * Wait for an element by its id.
     * @param id The id of the element to find.
     * @param timeoutMs The amount of time to wait for the object.
     * @param intervalMs The amount of time between checks.
     * @returns The element if found or undefined if not found within timeout.
     */
    static waitForElementById(id: string, timeoutMs?: number, intervalMs?: number): Promise<IWebDriverElement | undefined>;
    /**
     * Find an element by its class.
     * @param className The class of the element to find.
     * @param tag The tag of the element to find defaults to all.
     * @returns The element if found.
     */
    static findElementByClass(className: string, tag?: string): Promise<IWebDriverElement | undefined>;
    /**
     * Find all elements by their class.
     * @param className The class of the element to find.
     * @param tag The tag of the element to find defaults to all.
     * @returns The element if found.
     */
    static findElementsByClass(className: string, tag?: string): Promise<IWebDriverElement[]>;
    /**
     * Wait for an element by its class.
     * @param className The class of the element to find.
     * @param tag The tag of the element to find defaults to all.
     * @param timeoutMs The amount of time to wait for the object.
     * @param intervalMs The amount of time between checks.
     * @returns The element if found or undefined if not found within timeout.
     */
    static waitForElementByClass(className: string, tag?: string, timeoutMs?: number, intervalMs?: number): Promise<IWebDriverElement | undefined>;
    /**
     * Find an element.
     * @param locator The locator to use when finding the element.
     * @param value The value to use with the locator.
     * @returns The element if found.
     */
    static findElementByLocator(locator: LocatorTypes, value: string): Promise<IWebDriverElement | undefined>;
    /**
     * Find elements.
     * @param locator The locator to use when finding the elements.
     * @param value The value to use with the locator.
     * @returns The elements if found.
     */
    static findElementsByLocator(locator: LocatorTypes, value: string): Promise<IWebDriverElement[]>;
    /**
     * Wait for an element by its locator.
     * @param locator The locator to use when finding the elements.
     * @param value The value to use with the locator.
     * @param timeoutMs The amount of time to wait for the object.
     * @param intervalMs The amount of time between checks.
     * @returns The element if found or undefined if not found within timeout.
     */
    static waitForElementByLocator(locator: LocatorTypes, value: string, timeoutMs?: number, intervalMs?: number): Promise<IWebDriverElement | undefined>;
    /**
     * Wait until a condition is met.
     * @param condition The condition to check.
     * @param timeoutMs The amount of time to wait for the condition.
     * @param intervalMs The amount of time between checks.
     * @returns The result of the condition check.
     */
    static waitForCondition(condition: () => Promise<boolean>, timeoutMs?: number, intervalMs?: number): Promise<boolean>;
    /**
     * Take a screenshot of the whole page.
     * @returns Returns a base64 encoded png.
     */
    static screenshot(): Promise<string>;
    /**
     * Take a screenshot of the whole page and saves it.
     * @param folder The location to save the screen grab, if not provided defaults to config location.
     * @param filename The filename to save the screen grab, if not provided defaults fixed naming.
     * @returns Returns the final filename.
     */
    static saveScreenshot(folder?: string, filename?: string): Promise<void>;
    /**
     * Perform actions on the webdriver.
     * @param actions The actions to perform.
     * @returns True if the actions were successfully performed.
     */
    static actions(actions: WebDriverAction[]): Promise<boolean>;
}
