UNPKG

multi-automator

Version:
214 lines (213 loc) 5.11 kB
/// <reference types="node" /> import { ScreenSize } from '../types'; interface WDARequestOptions { retry?: number; duration?: number; timeout?: number; withSession?: boolean; } export default class WDA { /** * 设备 UUID */ uuid: string; /** * WebDriverAgent 项目路径 */ wdaProjPath: string; /** * WebDriverAgent 进程 */ webDriverAgent: any; /** * iProxy 进程 */ iProxy: any; /** * 本地 IP */ ip: string; /** * 端口号 */ port: number; /** * 超时时间 */ timeout: number; /** * sessionId */ sessionId: string; constructor(uuid: string, wdaProjPath: string); init(): Promise<void>; /** * 启动 WDA */ start(timeout?: number): Promise<void>; /** * 停止 WDA */ stop(): Promise<void>; /** * 关闭wda不正常结束的进程 */ close(): Promise<void>; /** * 关闭xcodebuild、iproxy代理进程 */ clear(): Promise<void>; /** * home 键 * * @param {number} timeout 超时时间 */ home(timeout?: number): Promise<void>; /** * 启动 APP * * @param packageName 包名 * @returns */ launchApp(packageName: string): Promise<void>; /** * 终止 APP * * @param packageName 包名 */ terminateApp(packageName: string): Promise<void>; /** * 激活 APP * * @param packageName 包名 */ activateApp(packageName: string): Promise<void>; /** * 获取当前设备页面 dom 树 * * @param {number} timeout 超时时间 * @returns {Promise<any>} */ getSource(timeout?: number): Promise<any>; /** * 获取当前设备屏幕信息 * * @returns {Promise<any>} */ getScreenInfo(): Promise<any>; /** * 获取屏幕宽高 */ getScreenSize(): Promise<ScreenSize>; /** * 获取当前设备页面截图 * * @returns {Promise<Buffer>} */ screenshot(): Promise<Buffer>; /** * 屏幕点击 * * @param {number} x 横坐标 * @param {number} y 纵坐标 */ tap(x: number, y: number): Promise<void>; /** * 长按屏幕 * * @param {number} x 横坐标 * @param {number} y 纵坐标 * @param {number} duration 长按时间(s) */ longpress(x: number, y: number, duration: number): Promise<void>; /** * 跳转页面(通过safari) * * @param {string} url 页面地址 */ openUrl(url: string): Promise<void>; /** * 从某个点滚动到某个点 * * @param {number} fromX 起点横坐标 * @param {number} fromY 起点纵坐标 * @param {number} toX 终点横坐标 * @param {number} toY 终点纵坐标 * @param {number} duration 滑动时间 */ drag(fromX: number, fromY: number, toX: number, toY: number, duration: number): Promise<void>; /** * 重新激活当前活动的应用(先home桌面,再打开该应用) */ deactivateApp(): Promise<void>; findElements(using: string, value: string): Promise<any>; /** * 等待 WDA 启动 * * @param {number} expiredTime 超时时间 * @returns {boolean} 是否启动成功 */ private waitForReady; /** * 初始化 WDA 会话 */ private initializeSession; /** * 发送 WebDriverAgent GET 请求 * * @param {string} path 请求路径 * @param {WDARequestOptions} options 请求选项 * @returns {Promise<T>} 响应数据 */ get<T>(path: string, options: WDARequestOptions): Promise<T>; /** * 发送 WebDriverAgent POST 请求 * * @param {string} path 请求路径 * @param {unknown} data 请求数据 * @param {WDARequestOptions} options 请求选项 * @returns {Promise<T>} 响应数据 */ post<T>(path: string, data: unknown, options: WDARequestOptions): Promise<T>; /** * 发送 WebDriverAgent 请求 * * @param {string} method 请求方法 * @param {string} url 请求 URL * @param {unknown} data 请求数据 * @param {number} retry 重试次数 * @param {number} duration 请求间隔时间 * @param {number} timeout 请求超时时间 * @returns {Promise<T>} 响应数据 */ private sendRequest; /** * 构建 WebDriverAgent 请求 URL * * @param {string} path 请求路径 * @param {boolean} withSession 是否包含会话 ID * @returns {string} 请求 URL */ private buildURL; /** * 检查 iProxy 是否安装 */ private checkIproxyInstall; /** * 启动 WDA */ private launchWda; /** * 获取 iProxy 类型 */ private getIproxyType; /** * 启动 iProxy * * @param {number} localIp 本地端口号 * @param {number} remoteIp 远程端口号 * @returns {any} iProxy 进程 */ private launchIproxy; } export {};