askui
Version:
Reliable, automated end-to-end-testing that depends on what is shown on your screen instead of the technology you are running on
54 lines (53 loc) • 2.26 kB
TypeScript
import { ControlCommand } from '../../core/ui-control-commands';
import { DeviceClient } from '../device-client';
import { UiControllerClientConnectionState } from '../ui-controller-client-connection-state';
export type AndroidKeyboardMode = 'input-text' | 'adb-keyboard';
export interface AndroidAdbClientArgs {
/** Select a specific device by its adb serial. Defaults to the first device. */
readonly id?: string;
/** Path to the `adb` executable. Defaults to `adb` (must be on PATH). */
readonly adbPath?: string;
/** Delay applied after each action, in milliseconds. Defaults to `0`. */
readonly actionDelayInMs?: number;
/**
* How text is typed. `input-text` uses `adb shell input text` (ASCII, no
* setup). `adb-keyboard` uses the ADBKeyboard IME broadcast for full Unicode
* support (requires ADBKeyboard installed and set as the default IME).
* Defaults to `input-text`.
*/
readonly keyboard?: AndroidKeyboardMode;
}
/**
* Drives an Android device directly via `adb`, implementing {@link DeviceClient}
* so it is interchangeable with the desktop AgentOS gRPC client. Replaces the
* legacy UI Controller's WebSocket/adbkit path: every operation is a plain
* `adb` invocation, so no separate controller process or binary is required.
*/
export declare class AndroidAdbClient implements DeviceClient {
private args;
private static readonly EXEC_MAX_BUFFER;
connectionState: UiControllerClientConnectionState;
private readonly adbPath;
private readonly keyboard;
private readonly actionDelayInMs;
private deviceId;
private screenWidth;
private screenHeight;
private mousePosition;
constructor(args?: AndroidAdbClientArgs);
private exec;
private shell;
private listDevices;
private resolveDeviceId;
private updateScreenSize;
connect(): Promise<UiControllerClientConnectionState>;
disconnect(): void;
setActiveDisplay(): Promise<void>;
private requireConnected;
private delay;
requestControl(controlCommand: ControlCommand): Promise<void>;
private runAction;
private typeText;
requestScreenshot(): Promise<string>;
getStartingArguments(): Promise<Record<string, string | number | boolean>>;
}