UNPKG

@appium/types

Version:

Various type declarations used across Appium

1,673 lines (1,503 loc) 66.2 kB
import type {EventEmitter} from 'node:events'; import type {Merge} from 'type-fest'; import type {ActionSequence} from './action'; import type {Capabilities, DriverCaps, W3CCapabilities, W3CDriverCaps} from './capabilities'; import type { BidiModuleMap, BiDiResultData, ExecuteMethodMap, MethodMap, } from './command'; import type {ServerArgs} from './config'; import type {HTTPHeaders, HTTPMethod} from './http'; import type {AppiumLogger} from './logger'; import type {AppiumServer, UpdateServerCallback} from './server'; import type {Class, Element, StringRecord} from './util'; import type internal from 'node:stream'; /** * Interface implemented by the `DeviceSettings` class in `@appium/base-driver` */ export interface IDeviceSettings<T extends StringRecord> { update(newSettings: T): Promise<void>; getSettings(): T; } export interface ITimeoutCommands { /** * Set the various timeouts associated with a session * @see {@link https://w3c.github.io/webdriver/#set-timeouts} * * @param type - used only for the old (JSONWP) command, the type of the timeout * @param ms - used only for the old (JSONWP) command, the ms for the timeout * @param script - the number in ms for the script timeout, used for the W3C command * @param pageLoad - the number in ms for the pageLoad timeout, used for the W3C command * @param implicit - the number in ms for the implicit wait timeout, used for the W3C command */ timeouts( type: string, ms: number | string, script?: number, pageLoad?: number, implicit?: number | string, ): Promise<void>; /** * Set the new command timeout * * @param ms - the timeout in ms */ setNewCommandTimeout(ms: number): void; /** * Set the implicit wait timeout * * @param ms - the timeout in ms * * @deprecated Use `timeouts` instead * */ implicitWait(ms: number | string): Promise<void>; /** * A helper method (not a command) used to set the implicit wait value * * @param ms - the implicit wait in ms */ setImplicitWait(ms: number): void; /** * Periodically retry an async function up until the currently set implicit wait timeout * * @param condition - the behaviour to retry until it returns truthy * * @returns The return value of the condition */ implicitWaitForCondition(condition: (...args: any[]) => Promise<any>): Promise<unknown>; /** * Get the current timeouts * @see {@link https://w3c.github.io/webdriver/#get-timeouts} * * @returns A map of timeout names to ms values */ getTimeouts(): Promise<Record<string, number>>; /** * Set the implicit wait value that was sent in via the W3C protocol * * @param ms - the timeout in ms */ implicitWaitW3C(ms: number): Promise<void>; /** * Set the implicit wait value that was sent in via the JSONWP * * @param ms - the timeout in ms * @deprecated */ implicitWaitMJSONWP(ms: number): Promise<void>; /** * Set the page load timeout value that was sent in via the W3C protocol * * @param ms - the timeout in ms */ pageLoadTimeoutW3C(ms: number): Promise<void>; /** * Set the page load timeout value that was sent in via the JSONWP * * @param ms - the timeout in ms * @deprecated */ pageLoadTimeoutMJSONWP(ms: number): Promise<void>; /** * Set the script timeout value that was sent in via the W3C protocol * * @param ms - the timeout in ms */ scriptTimeoutW3C(ms: number): Promise<void>; /** * Set the script timeout value that was sent in via the JSONWP * * @param ms - the timeout in ms * @deprecated */ scriptTimeoutMJSONWP(ms: number): Promise<void>; /** * Set Appium's new command timeout * * @param ms - the timeout in ms */ newCommandTimeout(ms: number): Promise<void>; /** * Get a timeout value from a number or a string * * @param ms - the timeout value as a number or a string * * @returns The timeout as a number in ms */ parseTimeoutArgument(ms: number | string): number; } export interface IEventCommands { /** * Add a custom-named event to the Appium event log * * @param vendor - the name of the vendor or tool the event belongs to, to namespace the event * @param event - the name of the event itself */ logCustomEvent(vendor: string, event: string): Promise<void>; /** * Get a list of events that have occurred in the current session * * @param type - filter the returned events by including one or more types * * @returns The event history for the session */ getLogEvents(type?: string | string[]): Promise<EventHistory | Record<string, number>>; } export interface IExecuteCommands { /** * Call an `Execute Method` by its name with the given arguments. This method will check that the * driver has registered the method matching the name, and send it the arguments. * * @param script - the name of the Execute Method * @param args - a singleton array containing an arguments object * * @returns The result of calling the Execute Method */ executeMethod< TArgs extends readonly any[] | readonly [StringRecord<unknown>] = unknown[], TReturn = unknown, >( script: string, args: TArgs, ): Promise<TReturn>; } /** * Data returned by {@linkcode ISessionHandler.getSessions}. * * @typeParam C - The driver's constraints */ export interface MultiSessionData<C extends Constraints = Constraints> { id: string; capabilities: DriverCaps<C>; } /** * Data returned by `AppiumDriver.getAppiumSessions` * * @typeParam C - The driver's constraints */ export interface TimestampedMultiSessionData<C extends Constraints = Constraints> { id: string; created: number; // Unix timestamp in milliseconds capabilities: DriverCaps<C>; } /** * Data returned by {@linkcode ISessionHandler.getSession}. * * @typeParam C - The driver's constraints * @typeParam T - Any extra data the driver stuffs in here * @privateRemarks The content of this object looks implementation-specific and in practice is not well-defined. It's _possible_ to fully type this in the future. */ export type SingularSessionData< C extends Constraints = Constraints, T extends StringRecord = StringRecord, > = DriverCaps<C> & { events?: EventHistory; error?: string; } & T; /** * Data returned by {@linkcode ISessionCommands.getAppiumSessionCapabilities}. * * @typeParam C - The driver's constraints * @typeParam T - Any extra data the driver stuffs in here */ export type SessionCapabilities< C extends Constraints = Constraints, T extends StringRecord = StringRecord, > = { capabilities: DriverCaps<C>; } & T; export interface IFindCommands { /** * Find a UI element given a locator strategy and a selector, erroring if it can't be found * @see {@link https://w3c.github.io/webdriver/#find-element} * * @param strategy - the locator strategy * @param selector - the selector to combine with the strategy to find the specific element * * @returns The element object encoding the element id which can be used in element-related * commands */ findElement(strategy: string, selector: string): Promise<Element>; /** * Find a a list of all UI elements matching a given a locator strategy and a selector * @see {@link https://w3c.github.io/webdriver/#find-elements} * * @param strategy - the locator strategy * @param selector - the selector to combine with the strategy to find the specific elements * * @returns A possibly-empty list of element objects */ findElements(strategy: string, selector: string): Promise<Element[]>; /** * Find a UI element given a locator strategy and a selector, erroring if it can't be found. Only * look for elements among the set of descendants of a given element * @see {@link https://w3c.github.io/webdriver/#find-element-from-element} * * @param strategy - the locator strategy * @param selector - the selector to combine with the strategy to find the specific element * @param elementId - the id of the element to use as the search basis * * @returns The element object encoding the element id which can be used in element-related * commands */ findElementFromElement(strategy: string, selector: string, elementId: string): Promise<Element>; /** * Find a a list of all UI elements matching a given a locator strategy and a selector. Only * look for elements among the set of descendants of a given element * @see {@link https://w3c.github.io/webdriver/#find-elements-from-element} * * @param strategy - the locator strategy * @param selector - the selector to combine with the strategy to find the specific elements * @param elementId - the id of the element to use as the search basis * * @returns A possibly-empty list of element objects */ findElementsFromElement( strategy: string, selector: string, elementId: string, ): Promise<Element[]>; /** * Find an element from a shadow root * @see {@link https://w3c.github.io/webdriver/#find-element-from-shadow-root} * @param strategy - the locator strategy * @param selector - the selector to combine with the strategy to find the specific elements * @param shadowId - the id of the element to use as the search basis * * @returns The element inside the shadow root matching the selector */ findElementFromShadowRoot?( strategy: string, selector: string, shadowId: string, ): Promise<Element>; /** * Find elements from a shadow root * @see {@link https://w3c.github.io/webdriver/#find-element-from-shadow-root} * @param strategy - the locator strategy * @param selector - the selector to combine with the strategy to find the specific elements * @param shadowId - the id of the element to use as the search basis * * @returns A possibly empty list of elements inside the shadow root matching the selector */ findElementsFromShadowRoot?( strategy: string, selector: string, shadowId: string, ): Promise<Element[]>; /** * A helper method that returns one or more UI elements based on the search criteria * * @param strategy - the locator strategy * @param selector - the selector * @param mult - whether or not we want to find multiple elements * @param context - the element to use as the search context basis if desiredCapabilities * * @returns A single element or list of elements */ findElOrEls(strategy: string, selector: string, mult: true, context?: any): Promise<Element[]>; findElOrEls(strategy: string, selector: string, mult: false, context?: any): Promise<Element>; /** * This is a wrapper for {@linkcode findElOrEls} that validates locator strategies * and implements the `appium:printPageSourceOnFindFailure` capability * * @param strategy - the locator strategy * @param selector - the selector * @param mult - whether or not we want to find multiple elements * @param context - the element to use as the search context basis if desiredCapabilities * * @returns A single element or list of elements */ findElOrElsWithProcessing( strategy: string, selector: string, mult: true, context?: any, ): Promise<Element[]>; findElOrElsWithProcessing( strategy: string, selector: string, mult: false, context?: any, ): Promise<Element>; /** * Get the current page/app source as HTML/XML * @see {@link https://w3c.github.io/webdriver/#get-page-source} * * @returns The UI hierarchy in a platform-appropriate format (e.g., HTML for a web page) */ getPageSource(): Promise<string>; } export interface ILogCommands { /** * Definition of the available log types */ supportedLogTypes: Readonly<LogDefRecord>; /** * Get available log types as a list of strings */ getLogTypes(): Promise<string[]>; /** * Get the log for a given log type. * * @param logType - Name/key of log type as defined in {@linkcode ILogCommands.supportedLogTypes}. */ getLog(logType: string): Promise<any>; } export interface IBidiCommands { bidiSubscribe(events: string[], contexts: string[]): Promise<void>; bidiUnsubscribe(events: string[], contexts: string[]): Promise<void>; bidiStatus(): Promise<DriverStatus>; } /** * A record of {@linkcode LogDef} objects, keyed by the log type name. * Used in {@linkcode ILogCommands.supportedLogTypes} */ export type LogDefRecord = Record<string, LogDef>; /** * A definition of a log type */ export interface LogDef { /** * Description of the log type. * * The only place this is used is in error messages if the client provides an invalid log type * via {@linkcode ILogCommands.getLog}. */ description: string; /** * Returns all the log data for the given type * * This implementation *should* drain, truncate or otherwise reset the log buffer. */ getter: (driver: any) => Promise<unknown> | unknown; } export interface ISettingsCommands<T extends object = object> { /** * Update the session's settings dictionary with a new settings object * * @param settings - A key-value map of setting names to values. Settings not named in the map * will not have their value adjusted. */ updateSettings: (settings: T) => Promise<void>; /** * Get the current settings for the session * * @returns The settings object */ getSettings(): Promise<T>; } /** * @see {@linkcode ISessionHandler} */ export type DefaultCreateSessionResult<C extends Constraints> = [ sessionId: string, capabilities: DriverCaps<C>, ]; /** * @see {@linkcode ISessionHandler} */ export type DefaultDeleteSessionResult = void; /** * An interface which creates and deletes sessions. */ export interface ISessionHandler< C extends Constraints = Constraints, CreateResult = DefaultCreateSessionResult<C>, DeleteResult = DefaultDeleteSessionResult, SessionData extends StringRecord = StringRecord, > { /** * Start a new automation session * @see {@link https://w3c.github.io/webdriver/#new-session} * * @privateRemarks * The shape of this method is strange because it used to support both JSONWP and W3C * capabilities. This will likely change in the future to simplify. * * @param w3cCaps1 - the new session capabilities * @param w3cCaps2 - another place the new session capabilities could be sent (typically left undefined) * @param w3cCaps3 - another place the new session capabilities could be sent (typically left undefined) * @param driverData - a list of DriverData objects representing other sessions running for this * driver on the same Appium server. This information can be used to help ensure no conflict of * resources * * @returns The capabilities object representing the created session */ createSession( w3cCaps1: W3CDriverCaps<C>, w3cCaps2?: W3CDriverCaps<C>, w3cCaps3?: W3CDriverCaps<C>, driverData?: DriverData[], ): Promise<CreateResult>; /** * Stop an automation session * @see {@link https://w3c.github.io/webdriver/#delete-session} * * @param sessionId - the id of the session that is to be deleted * @param driverData - the driver data for other currently-running sessions */ deleteSession(sessionId?: string, driverData?: DriverData[]): Promise<DeleteResult | void>; /** * Get data for all sessions running on an Appium server * * @returns A list of session data objects */ getSessions(): Promise<MultiSessionData[]>; /** * Get the data for the current session * * @returns A session data object */ getSession(): Promise<SingularSessionData<C, SessionData>>; } /** * Custom session data for a driver. */ export type DriverData = Record<string, unknown>; export interface Constraint { readonly presence?: boolean | Readonly<{allowEmpty: boolean}>; readonly isString?: boolean; readonly isNumber?: boolean; readonly isBoolean?: boolean; readonly isObject?: boolean; readonly isArray?: boolean; readonly deprecated?: boolean; readonly inclusion?: Readonly<[string, ...string[]]>; readonly inclusionCaseInsensitive?: Readonly<[string, ...string[]]>; } /** * A collection of constraints describing the allowed capabilities for a driver. */ export type Constraints = { readonly [name: string]: Constraint; }; export interface DriverHelpers { configureApp: ( app: string, supportedAppExtensions?: string | string[] | ConfigureAppOptions, ) => Promise<string>; isPackageOrBundle: (app: string) => boolean; duplicateKeys: <T>(input: T, firstKey: string, secondKey: string) => T; parseCapsArray: (cap: string | string[]) => string[]; generateDriverLogPrefix: (obj: object, sessionId?: string) => string; } export type SettingsUpdateListener<T extends Record<string, unknown> = Record<string, unknown>> = ( prop: keyof T, newValue: unknown, curValue: unknown, ) => Promise<void>; // WebDriver export interface Rect { x: number; y: number; width: number; height: number; } export type NewWindowType = 'tab' | 'window'; export interface NewWindow { handle: string; type: NewWindowType; } export interface Cookie { name: string; value: string; path?: string; domain?: string; secure?: boolean; httpOnly?: boolean; expiry?: number; sameSite?: 'Lax' | 'Strict'; } // JSONWP export type Size = Pick<Rect, 'width' | 'height'>; export type Position = Pick<Rect, 'x' | 'y'>; export interface Location { latitude: number; longitude: number; altitude?: number; } export interface Rotation { x: number; y: number; z: number; } // Web Authentication export interface Credential { credentialId: string; isResidentCredential: boolean; rpId: string; privateKey: string; userHandle?: string; signCount: number; largeBlob?: string; } export type Orientation = 'LANDSCAPE' | 'PORTRAIT'; export interface EventHistory { commands: EventHistoryCommand[]; [key: string]: any; } export interface EventHistoryCommand { cmd: string; startTime: number; endTime: number; } export type Protocol = 'MJSONWP' | 'W3C'; export interface DriverStatus { ready: boolean, message: string, [key: string]: any; } /** * Methods and properties which both `AppiumDriver` and `BaseDriver` inherit. * * This should not be used directly by external code. */ export interface Core<C extends Constraints, Settings extends StringRecord = StringRecord> { shouldValidateCaps: boolean; sessionId: string | null; sessionCreationTimestampMs: number; opts: DriverOpts<C>; initialOpts: InitialOpts; protocol?: Protocol; helpers: DriverHelpers; basePath: string; relaxedSecurityEnabled: boolean; allowInsecure: string[]; denyInsecure: string[]; newCommandTimeoutMs: number; implicitWaitMs: number; locatorStrategies: string[]; webLocatorStrategies: string[]; eventEmitter: EventEmitter; settings: IDeviceSettings<Settings>; log: AppiumLogger; driverData: DriverData; isCommandsQueueEnabled: boolean; eventHistory: EventHistory; bidiEventSubs: Record<string, string[]>; /** * @deprecated Drivers no longer need to opt into BiDi support explicitly */ doesSupportBidi?: boolean; updateBidiCommands(cmds: BidiModuleMap): void; onUnexpectedShutdown(handler: () => any): void; /** * @summary Retrieve the server's current status. * @description * Returns information about whether a remote end is in a state in which it can create new sessions and can additionally include arbitrary meta information that is specific to the implementation. * * The readiness state is represented by the ready property of the body, which is false if an attempt to create a session at the current time would fail. However, the value true does not guarantee that a New Session command will succeed. * * Implementations may optionally include additional meta information as part of the body, but the top-level properties ready and message are reserved and must not be overwritten. * * @example * ```js * // webdriver.io example * await driver.status(); * ``` * * ```python * driver.get_status() * ``` * * ```java * driver.getStatus(); * ``` * * ```ruby * # ruby_lib example * remote_status * * # ruby_lib_core example * @driver.remote_status * ``` */ getStatus(): Promise<any>; sessionExists(sessionId?: string): boolean; isW3CProtocol(): boolean; isMjsonwpProtocol(): boolean; isFeatureEnabled(name: string): boolean; assertFeatureEnabled(name: string): void; validateLocatorStrategy(strategy: string, webContext?: boolean): void; proxyActive(sessionId?: string): boolean; get bidiProxyUrl(): string | null; getProxyAvoidList(sessionId?: string): RouteMatcher[]; canProxy(sessionId?: string): boolean; proxyRouteIsAvoided(sessionId: string, method: string, url: string, body?: any): boolean; addManagedDriver(driver: Driver): void; getManagedDrivers(): Driver<Constraints>[]; clearNewCommandTimeout(): Promise<void>; logEvent(eventName: string): void; driverForSession(sessionId: string): Core<Constraints> | null; } /** * `BaseDriver` implements this. It contains default behavior; * external drivers are expected to implement {@linkcode ExternalDriver} instead. * * `C` should be the constraints of the driver. * `CArgs` would be the shape of `cliArgs`. * `Settings` is the shape of the raw device settings object (see {@linkcode IDeviceSettings}) */ export interface Driver< C extends Constraints = Constraints, CArgs extends StringRecord = StringRecord, Settings extends StringRecord = StringRecord, CreateResult = DefaultCreateSessionResult<C>, DeleteResult = DefaultDeleteSessionResult, SessionData extends StringRecord = StringRecord, > extends ILogCommands, IFindCommands, ISettingsCommands<Settings>, ITimeoutCommands, IEventCommands, IExecuteCommands, ISessionHandler<C, CreateResult, DeleteResult, SessionData>, Core<C, Settings> { /** * The set of command line arguments set for this driver */ cliArgs: CArgs; // The following properties are assigned by appium */ server?: AppiumServer; serverHost?: string; serverPort?: number; serverPath?: string; // The following methods are implemented by `BaseDriver`. /** * Execute a driver (WebDriver-protocol) command by its name as defined in the routes file * * @param cmd - the name of the command * @param args - arguments to pass to the command * * @returns The result of running the command */ executeCommand(cmd: string, ...args: any[]): Promise<any>; /** Execute a driver (WebDriver Bidi protocol) command by its name as defined in the bidi commands file * @param bidiCmd - the name of the command in the bidi spec * @param args - arguments to pass to the command */ executeBidiCommand(bidiCmd: string, ...args: any[]): Promise<BiDiResultData>; /** * Signify to any owning processes that this driver encountered an error which should cause the * session to terminate immediately (for example an upstream service failed) * * @param err - the Error object which is causing the shutdown */ startUnexpectedShutdown(err?: Error): Promise<void>; /** * Start the timer for the New Command Timeout, which when it runs out, will stop the current * session */ startNewCommandTimeout(): Promise<void>; /** * Reset the current session (run the delete session and create session subroutines) * * @deprecated Use explicit session management commands instead * @privateRemarks This is implemented by `BaseDriver` and is used within `@appium/driver-test-support` */ reset(): Promise<void>; /** * The processed capabilities used to start the session represented by the current driver instance */ caps?: Capabilities<C>; /** * The original capabilities used to start the session represented by the current driver instance */ originalCaps?: W3CCapabilities<C>; /** * The constraints object used to validate capabilities */ desiredCapConstraints: C; /** * Validate the capabilities used to start a session * * @param caps - the capabilities * * @internal * * @returns Whether or not the capabilities are valid */ validateDesiredCaps(caps: DriverCaps<C>): boolean; /** * A helper function to log unrecognized capabilities to the console * * @params caps - the capabilities * * @internal */ logExtraCaps(caps: DriverCaps<C>): void; /** * A helper function used to assign server information to the driver instance so the driver knows * where the server is Running * * @param server - the server object * @param host - the server hostname * @param port - the server port * @param path - the server base url */ assignServer?(server: AppiumServer, host: string, port: number, path: string): void; } /** * External drivers must subclass `BaseDriver`, and can implement any of these methods. * None of these are implemented within Appium itself. */ export interface ExternalDriver< C extends Constraints = Constraints, Ctx = string, CArgs extends StringRecord = StringRecord, Settings extends StringRecord = StringRecord, CreateResult = DefaultCreateSessionResult<C>, DeleteResult = DefaultDeleteSessionResult, SessionData extends StringRecord = StringRecord, > extends Driver<C, CArgs, Settings, CreateResult, DeleteResult, SessionData> { // WebDriver spec commands /** * Navigate to a given url * @see {@link https://w3c.github.io/webdriver/#navigate-to} * * @param url - the url */ setUrl?(url: string): Promise<void>; /** * Get the current url * @see {@link https://w3c.github.io/webdriver/#get-current-url} * * @returns The url */ getUrl?(): Promise<string>; /** * Navigate back in the page history * @see {@link https://w3c.github.io/webdriver/#back} */ back?(): Promise<void>; /** * Navigate forward in the page history * @see {@link https://w3c.github.io/webdriver/#forward} */ forward?(): Promise<void>; /** * Refresh the page * @see {@link https://w3c.github.io/webdriver/#refresh} */ refresh?(): Promise<void>; /** * Get the current page title * @see {@link https://w3c.github.io/webdriver/#get-title} * * @returns The title * * @example * ```js * await driver.getTitle() * ``` * ```py * driver.title * ``` * ```java * driver.getTitle(); * ``` */ title?(): Promise<string>; /** * Get the handle (id) associated with the current browser window * @see {@link https://w3c.github.io/webdriver/#get-window-handle} * * @returns The handle string */ getWindowHandle?(): Promise<string>; /** * Close the current browsing context (window) * @see {@link https://w3c.github.io/webdriver/#close-window} * * @returns An array of window handles representing currently-open windows */ closeWindow?(): Promise<string[]>; /** * Switch to a specified window * @see {@link https://w3c.github.io/webdriver/#switch-to-window} * * @param handle - the window handle of the window to make active */ setWindow?(handle: string): Promise<void>; /** * Get a set of handles representing open browser windows * @see {@link https://w3c.github.io/webdriver/#get-window-handles} * * @returns An array of window handles representing currently-open windows */ getWindowHandles?(): Promise<string[]>; /** * Create a new browser window * @see {@link https://w3c.github.io/webdriver/#new-window} * * @param type - a hint to the driver whether to create a "tab" or "window" * * @returns An object containing the handle of the newly created window and its type */ createNewWindow?(type?: NewWindowType): Promise<NewWindow>; /** * Switch the current browsing context to a frame * @see {@link https://w3c.github.io/webdriver/#switch-to-frame} * * @param id - the frame id, index, or `null` (indicating the top-level context) */ setFrame?(id: null | number | string): Promise<void>; /** * Set the current browsing context to the parent of the current context * @see {@link https://w3c.github.io/webdriver/#switch-to-parent-frame} */ switchToParentFrame?(): Promise<void>; /** * Get the size and position of the current window * @see {@link https://w3c.github.io/webdriver/#get-window-rect} * * @returns A `Rect` JSON object with x, y, width, and height properties */ getWindowRect?(): Promise<Rect>; /** * Set the current window's size and position * @see {@link https://w3c.github.io/webdriver/#set-window-rect} * * @param x - the screen coordinate for the new left edge of the window * @param y - the screen coordinate for the new top edge of the window * @param width - the width in pixels to resize the window to * @param height - the height in pixels to resize the window to * * @returns The actual `Rect` of the window after running the command */ setWindowRect?(x: number, y: number, width: number, height: number): Promise<Rect>; /** * Run the window-manager specific 'maximize' operation on the current window * @see {@link https://w3c.github.io/webdriver/#maximize-window} * * @returns The actual `Rect` of the window after running the command */ maximizeWindow?(): Promise<Rect>; /** * Run the window-manager specific 'minimize' operation on the current window * @see {@link https://w3c.github.io/webdriver/#minimize-window} * * @returns The actual `Rect` of the window after running the command */ minimizeWindow?(): Promise<Rect>; /** * Put the current window into full screen mode * @see {@link https://w3c.github.io/webdriver/#fullscreen-window} * * @returns The actual `Rect` of the window after running the command */ fullScreenWindow?(): Promise<Rect>; /** * Get the active element * @see {@link https://w3c.github.io/webdriver/#get-active-element} * * @returns The JSON object encapsulating the active element reference */ active?(): Promise<Element>; /** * Get the shadow root of an element * @see {@link https://w3c.github.io/webdriver/#get-element-shadow-root} * * @param elementId - the id of the element to retrieve the shadow root for * * @returns The shadow root for an element, as an element */ elementShadowRoot?(elementId: string): Promise<Element>; /** * Determine if the reference element is selected or not * @see {@link https://w3c.github.io/webdriver/#is-element-selected} * * @param elementId - the id of the element * * @returns True if the element is selected, False otherwise */ elementSelected?(elementId: string): Promise<boolean>; /** * Retrieve the value of an element's attribute * @see {@link https://w3c.github.io/webdriver/#get-element-attribute} * * @param name - the attribute name * @param elementId - the id of the element * * @returns The attribute value */ getAttribute?(name: string, elementId: string): Promise<string | null>; /** * Retrieve the value of a named property of an element's JS object * @see {@link https://w3c.github.io/webdriver/#get-element-property} * * @param name - the object property name * @param elementId - the id of the element * * @returns The property value */ getProperty?(name: string, elementId: string): Promise<string | null>; /** * Retrieve the value of a CSS property of an element * @see {@link https://w3c.github.io/webdriver/#get-element-css-value} * * @param name - the CSS property name * @param elementId - the id of the element * * @returns The property value */ getCssProperty?(name: string, elementId: string): Promise<string>; /** * Get the text of an element as rendered * @see {@link https://w3c.github.io/webdriver/#get-element-text} * * @param elementId - the id of the element * * @returns The text rendered for the element */ getText?(elementId: string): Promise<string>; /** * Get the tag name of an element * @see {@link https://w3c.github.io/webdriver/#get-element-tag-name} * * @param elementId - the id of the element * * @returns The tag name */ getName?(elementId: string): Promise<string>; /** * Get the dimensions and position of an element * @see {@link https://w3c.github.io/webdriver/#get-element-rect} * * @param elementId - the id of the element * * @returns The Rect object containing x, y, width, and height properties */ getElementRect?(elementId: string): Promise<Rect>; /** * Determine whether an element is enabled * @see {@link https://w3c.github.io/webdriver/#is-element-enabled} * * @param elementId - the id of the element * * @returns True if the element is enabled, False otherwise */ elementEnabled?(elementId: string): Promise<boolean>; /** * Get the WAI-ARIA role of an element * @see {@link https://w3c.github.io/webdriver/#get-computed-role} * * @param elementId - the id of the element * * @returns The role */ getComputedRole?(elementId: string): Promise<string | null>; /** * Get the accessible name/label of an element * @see {@link https://w3c.github.io/webdriver/#get-computed-label} * * @param elementId - the id of the element * * @returns The accessible name */ getComputedLabel?(elementId: string): Promise<string | null>; /** * Determine whether an element is displayed * @see {@link https://w3c.github.io/webdriver/#element-displayedness} * * @param elementId - the id of the element * * @returns True if any part of the element is rendered within the viewport, False otherwise */ elementDisplayed?(elementId: string): Promise<boolean>; /** * Click/tap an element * @see {@link https://w3c.github.io/webdriver/#element-click} * * @param elementId - the id of the element */ click?(elementId: string): Promise<void>; /** * Clear the text/value of an editable element * @see {@link https://w3c.github.io/webdriver/#element-clear} * * @param elementId - the id of the element */ clear?(elementId: string): Promise<void>; /** * Send keystrokes to an element (or otherwise set its value) * @see {@link https://w3c.github.io/webdriver/#element-send-keys} * * @param text - the text to send to the element * @param elementId - the id of the element */ setValue?(text: string, elementId: string): Promise<void>; /** * Execute JavaScript (or some other kind of script) in the browser/app context * @see {@link https://w3c.github.io/webdriver/#execute-script} * * @param script - the string to be evaluated as the script, which will be made the body of an * anonymous function in the case of JS * @param args - the list of arguments to be applied to the script as a function * * @returns The return value of the script execution */ execute?(script: string, args: unknown[]): Promise<unknown>; /** * Execute JavaScript (or some other kind of script) in the browser/app context, asynchronously * @see {@link https://w3c.github.io/webdriver/#execute-async-script} * * @param script - the string to be evaluated as the script, which will be made the body of an * anonymous function in the case of JS * @param args - the list of arguments to be applied to the script as a function * * @returns The promise resolution of the return value of the script execution (or an error * object if the promise is rejected) */ executeAsync?(script: string, args: unknown[]): Promise<unknown>; /** * Get all cookies known to the browsing context * @see {@link https://w3c.github.io/webdriver/#get-all-cookies} * * @returns A list of serialized cookies */ getCookies?(): Promise<Cookie[]>; /** * Get a cookie by name * @see {@link https://w3c.github.io/webdriver/#get-named-cookie} * * @param name - the name of the cookie * * @returns A serialized cookie */ getCookie?(name: string): Promise<Cookie>; /** * Add a cookie to the browsing context * @see {@link https://w3c.github.io/webdriver/#add-cookie} * * @param cookie - the cookie data including properties like name, value, path, domain, * secure, httpOnly, expiry, and samesite */ setCookie?(cookie: Cookie): Promise<void>; /** * Delete a named cookie * @see {@link https://w3c.github.io/webdriver/#delete-cookie} * * @param name - the name of the cookie to delete */ deleteCookie?(name: string): Promise<void>; /** * Delete all cookies * @see {@link https://w3c.github.io/webdriver/#delete-all-cookies} */ deleteCookies?(): Promise<void>; /** * Perform touch or keyboard actions * @see {@link https://w3c.github.io/webdriver/#perform-actions} * * @param actions - the action sequence */ performActions?(actions: ActionSequence[]): Promise<void>; /** * Release all keys or buttons that are currently pressed * @see {@link https://w3c.github.io/webdriver/#release-actions} */ releaseActions?(): Promise<void>; /** * Dismiss a simple dialog/alert * @see {@link https://w3c.github.io/webdriver/#dismiss-alert} */ postDismissAlert?(): Promise<void>; /** * Accept a simple dialog/alert * @see {@link https://w3c.github.io/webdriver/#accept-alert} */ postAcceptAlert?(): Promise<void>; /** * Get the text of the displayed alert * @see {@link https://w3c.github.io/webdriver/#get-alert-text} * * @returns The text of the alert */ getAlertText?(): Promise<string | null>; /** * Set the text field of an alert prompt * @see {@link https://w3c.github.io/webdriver/#send-alert-text} * * @param text - the text to send to the prompt */ setAlertText?(text: string): Promise<void>; /** * Get a screenshot of the current document as rendered * @see {@link https://w3c.github.io/webdriver/#take-screenshot} * * @returns A base64-encoded string representing the PNG image data */ getScreenshot?(): Promise<string>; /** * Get an image of a single element as rendered on screen * @see {@link https://w3c.github.io/webdriver/#take-element-screenshot} * * @param elementId - the id of the element * * @returns A base64-encoded string representing the PNG image data for the element rect */ getElementScreenshot?(elementId: string): Promise<string>; // Appium W3C WebDriver Extension /** * Get the current time on the device under timeouts * * @param format - the date/time format you would like the response into * * @returns The formatted time */ getDeviceTime?(format?: string): Promise<string>; /** * List the performance data types supported by this driver, which can be used in a call to get * the performance data by type. * * @returns The list of types * * @deprecated */ getPerformanceDataTypes?(): Promise<string[]>; /** * Get the list of performance data associated with a given type * * @param packageName - the package name / id of the app to retrieve data for * @param dataType - the performance data type; one of those retrieved in a call to * getPerformanceDataTypes * @param dataReadTimeout - how long to wait for data before timing out * * @returns A list of performance data strings * * @deprecated */ getPerformanceData?( packageName: string, dataType: string, dataReadTimeout?: number, ): Promise<any>; /** * Press a device hardware key by its code for the default duration * * @param keycode - the keycode * @param metastate - the code denoting the simultaneous pressing of any meta keys (shift etc) * @param flags - the code denoting the combination of extra flags * * @deprecated */ pressKeyCode?(keycode: number, metastate?: number, flags?: number): Promise<void>; /** * Press a device hardware key by its code for a longer duration * * @param keycode - the keycode * @param metastate - the code denoting the simultaneous pressing of any meta keys (shift etc) * @param flags - the code denoting the combination of extra flags * * @deprecated * */ longPressKeyCode?(keycode: number, metastate?: number, flags?: number): Promise<void>; /** * Apply a synthetic fingerprint to the fingerprint detector of the device * * @param fingerprintId - the numeric ID of the fingerprint to use * * @deprecated */ fingerprint?(fingerprintId: number): Promise<void>; /** * Simulate sending an SMS message from a certain phone number to the device * * @param phoneNumber - the number to pretend the message is from * @param message - the SMS text * * @deprecated */ sendSMS?(phoneNumber: string, message: string): Promise<void>; /** * Simulate triggering a phone call from a phone number and having the device take an action in * response * * @param phoneNumber - the number to pretend the call is from * @param action - the action to take in response (accept, reject, etc...) * * @deprecated */ gsmCall?(phoneNumber: string, action: string): Promise<void>; /** * Simulate setting the GSM signal strength for a cell phone * * @param singalStrength - the strength in a driver-appropriate string * * @deprecated */ gsmSignal?(signalStrength: string | number): Promise<void>; /** * Do something with GSM voice (unclear; this should not be implemented anywhere) * * @param state - the state * * @deprecated * @privateRemarks Not implemented in `appium-xcuitest-driver` */ gsmVoice?(state: string): Promise<void>; /** * Set the simulated power capacity of the device * * @param percent - how full the battery should become * * @deprecated */ powerCapacity?(percent: number): Promise<void>; /** * Set the AC-connected power state of the device * * @param state - whether the device is connected to power or not * * @deprecated */ powerAC?(state: string): Promise<void>; /** * Set the network speed of the device * * @param netspeed - the speed as a string, like '3G' * * @deprecated */ networkSpeed?(netspeed: string): Promise<void>; /** * Simulate a keyevent on the device * * @param keycode - the manufacturer defined keycode * @param metastate - the combination of meta startUnexpectedShutdown * * @deprecated */ keyevent?(keycode: string | number, metastate?: string | number): Promise<void>; /** * Get the current activity name * * @returns The activity name * * @deprecated * @privateRemarks Not implemented in `appium-xcuitest-driver` */ getCurrentActivity?(): Promise<string>; /** * Get the current active app package name/id * * @returns The package name * * @deprecated * @privateRemarks Not implemented in `appium-xcuitest-driver` */ getCurrentPackage?(): Promise<string>; /** * Install an app on a device * * @param appPath - the absolute path to a local app or a URL of a downloadable app bundle * @param options - driver-specific install options */ installApp?(appPath: string, options?: unknown): Promise<void>; /** * Launch an app * * @param appId - the package or bundle ID of the application * @param options - driver-specific launch options */ activateApp?(appId: string, options?: unknown): Promise<void>; /** * Remove / uninstall an app * * @param appId - the package or bundle ID of the application * @param options - driver-specific launch options * * @returns `true` if successful */ removeApp?(appId: string, options?: unknown): Promise<boolean>; /** * Quit / terminate / stop a running application * * @param appId - the package or bundle ID of the application * @param options - driver-specific launch options */ terminateApp?(appId: string, options?: unknown): Promise<boolean>; /** * Determine whether an app is installed * * @param appId - the package or bundle ID of the application */ isAppInstalled?(appId: string): Promise<boolean>; /** * Get the running state of an app * * @param appId - the package or bundle ID of the application * * @returns A number representing the state. `0` means not installed, `1` means not running, `2` * means running in background but suspended, `3` means running in the background, and `4` means * running in the foreground */ queryAppState?(appId: string): Promise<0 | 1 | 2 | 3 | 4>; /** * Attempt to hide a virtual keyboard * * @param strategy - the driver-specific name of a hiding strategy to follow * @param key - the text of a key to use to hide the keyboard * @param keyCode - a key code to trigger to hide the keyboard * @param keyName - the name of a key to use to hide the keyboard * * @returns Whether the keyboard was successfully hidden. May never return `false` on some platforms */ hideKeyboard?( strategy?: string, key?: string, keyCode?: string, keyName?: string, ): Promise<boolean>; /** * Determine whether the keyboard is shown * * @returns Whether the keyboard is shown */ isKeyboardShown?(): Promise<boolean>; /** * Push data to a file at a remote path on the device * * @param path - the remote path on the device to create the file at * @param data - the base64-encoded data which will be decoded and written to `path` */ pushFile?(path: string, data: string): Promise<void>; /** * Retrieve the data from a file on the device at a given path * * @param path - the remote path on the device to pull file data from * * @returns The base64-encoded file data */ pullFile?(path: string): Promise<string>; /** * Retrieve the data from a folder on the device at a given path * * @param path - the remote path of a directory on the device * * @returns The base64-encoded zip file of the directory contents */ pullFolder?(path: string): Promise<string>; /** * Toggle airplane/flight mode for the device * * @deprecated * @privateRemarks Not implemented in `appium-xcuitest-driver` */ toggleFlightMode?(): Promise<void>; /** * Toggle cell network data * * @deprecated * @privateRemarks Not implemented in `appium-xcuitest-driver` */ toggleData?(): Promise<void>; /** * Toggle WiFi radio status * * @deprecated * @privateRemarks Not implemented in `appium-xcuitest-driver` */ toggleWiFi?(): Promise<void>; /** * Toggle location services for the device * * @deprecated * @privateRemarks Not implemented in `appium-xcuitest-driver` */ toggleLocationServices?(): Promise<void>; /** * Open the notifications shade/screen * * @deprecated * @privateRemarks Not implemented in `appium-xcuitest-driver` */ openNotifications?(): Promise<void>; /** * Start an Android activity within an app * * @param appPackage - the app package id * @param appActivity - the activity name * @param appWaitPackage - the package id to wait for if different from the app package * @param appWaitActivity - the activity name to wait for being active if different from * appActivity * @param intentAction - the action for the intent to use to start the activity * @param intentCategory - the category for the intent * @param flags - the flags for the intent * @param optionalIntentArguments - additional arguments to be passed to launching the intent * @param dontStopAppOnReset - set to true to not stop the current app before launching the * activity * * @deprecated * @privateRemarks Not implemented in `appium-xcuitest-driver` */ startActivity?( appPackage: string, appActivity: string, appWaitPackage?: string, appWaitActivity?: string, intentAction?: string, intentCategory?: string, intentFlags?: string, optionalIntentArguments?: string, dontStopAppOnReset?: boolean, ): Promise<void>; /** * Get information from the system bars of a device * * @returns An array of information objects of driver-specific shape * * @deprecated */ getSystemBars?(): Promise<unknown>; /** * Get the display's pixel density * * @returns The density * * @deprecated * @privateRemarks Not implemented in `appium-xcuitest-driver` */ getDisplayDensity?(): Promise<number>; /** * End platform-specific code coverage tracing * * @param intent - the Android intent for the coverage activity * @param path - the path to place the results * * @deprecated * @privateRemarks Not implemented in `appium-xcuitest-driver` */ endCoverage?(intent: string, path: string): Promise<void>; /** * Set the value of a text field but ensure the current value is replace and not appended * * @param value - the text to set * @param elementId - the element to set it in * * @deprecated * @privateRemarks Not implemented in `appium-xcuitest-driver` */ replaceValue?(value: string, elementId: string): Promise<void>; // JSONWP /** * Check whether two elements are identical * * @param elementId - the first element's ID * @param otherElementId - the second element's ID * * @returns True if the elements are equal, false otherwise * * @deprecated * @privateRemarks Not implemented in `appium-xcuitest-driver` */ equalsElement?(elementId: string, otherElementId: string): Promise<boolean>; /** * Get the list of IME engines *