multi-automator
Version:
Multi terminal automation
214 lines (213 loc) • 5.11 kB
TypeScript
/// <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 {};