export type Platform = 'ios' | 'android'; export interface ElementLocator { name: string; ios?: { using: 'name' | 'predicate string' | 'class name'; value: string }; android?: { using: 'id' | 'text' | 'content-desc' | '-android uiautomator'; value: string }; } export interface Rect { x: number; y: number; width: number; height: number; } export interface DeviceDriver { readonly platform: Platform; createSession(): Promise; destroySession(): Promise; /** 激活/拉起指定 app(Android appPackage / iOS bundleId)。用于切到系统设置再切回。 */ activateApp(appId: string): Promise; findElement(locator: ElementLocator): Promise; findElements(locator: ElementLocator): Promise; findElementRaw(using: string, value: string): Promise; findElementsRaw(using: string, value: string): Promise; getElementRect(elementId: string): Promise; getElementAttribute(elementId: string, attr: string): Promise; tap(x: number, y: number): Promise; doubleTap(x: number, y: number): Promise; longPress(x: number, y: number, duration?: number): Promise; tapElement(elementId: string): Promise; clickElement(elementId: string): Promise; typeText(elementId: string, text: string): Promise; clearText(elementId: string): Promise; swipe(fromX: number, fromY: number, toX: number, toY: number, duration?: number): Promise; scrollDown(distance?: number): Promise; scrollUp(distance?: number): Promise; goBack(): Promise; getSource(): Promise; getWindowSize(): Promise<{ width: number; height: number }>; screenshot(): Promise; tapByLocator(locator: ElementLocator): Promise; waitForElement(locator: ElementLocator, timeoutMs?: number): Promise; isElementVisible(locator: ElementLocator): Promise; findBotCard(): Promise; findDeviceCard(deviceName: string): Promise; isOnHomepage(): Promise; goBackToHomepage(): Promise; dismissPopupIfPresent(): Promise; }