/// <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 {};
