/// <reference types="node" />
import WebElement from './web/Element';
import IOSElement from './iOS/Element';
import AndroidElement from './android/Element';
import { AppInfo, ScreenSize, SwipeOptions } from './types';
/**
 * Device Options
 */
export interface DeviceOptions {
    deviceId?: string;
    deviceType: string;
}
interface SourceOptions {
    timeout?: number;
    format?: SourceFormat;
    path?: string;
}
type SourceFormat = 'string' | 'json' | 'object';
/**
 * 设备操控类
 */
export default class Device {
    /**
     * 设备ID
     */
    id: string;
    /**
     * 设备类型
     */
    type: string;
    /**
     * 设备对象
     */
    handler: any;
    /**
     * 构造函数
     *
     * @param {string} deviceId       设备 ID
     * @param {string} deviceType     设备类型
     */
    constructor(options: DeviceOptions);
    /**
     * 初始化函数
     *
     * @param {Promise{any}} handler 设备处理对象
     */
    init(handler: any): Promise<void>;
    /**
     * 跳转页面
     *
     * @param {string} path url 地址
     * @returns {string}
     */
    goto(path: string): Promise<string>;
    /**
     * home 键
     */
    home(): Promise<void>;
    /**
     * 获取当前设备页面 dom 树
     *
     * @param {string} path     存储路径
     * @param {string} format   返回格式
     * @param {number} timeout  操作超时时间（ms）
     * @return {Promise{string}}
     */
    source(options?: SourceOptions): Promise<string | object>;
    /**
     * 通过 xpath 获取设备元素
     *
     * @param {string} expression XPath表达式
     * @param {object} options
     * @param {number} options.loop 轮询次数，默认 3
     * @param {number} options.duration 轮询时间间隔（ms），默认 1000
     * @param {number} options.retry 查询异常重试次数，默认 3
     * @returns {Promise{Array{WebElement}}}
     */
    $x(expression: string, options?: {
        loop: number;
        duration: number;
        retry: number;
    }): Promise<WebElement[] | IOSElement[] | AndroidElement[]>;
    /**
     * 通过 CSS 选择器获取元素操作对象 - 仅支持 web 设备
     *
     * @param selector CSS 选择器
     * @param {object} options
     * @param {number} options.loop 轮询次数，默认 3
     * @param {number} options.duration 轮询时间间隔（ms），默认 1000
     * @param {number} options.retry 查询异常重试次数，默认 3
     * @returns @returns {Promise{WebElement|null}}}
     */
    $(selector: string, options?: {
        loop: number;
        duration: number;
        retry: number;
    }): Promise<WebElement | null>;
    /**
     * 通过 CSS 选择器获取元素操作对象列表 - 仅支持 web 设备
     *
     * @param selector CSS 选择器
     * @param {object} options
     * @param {number} options.loop 轮询次数，默认 3
     * @param {number} options.duration 轮询时间间隔（ms），默认 1000
     * @param {number} options.retry 查询异常重试次数，默认 3
     * @returns @returns {Promise{Array{WebElement}}}
     */
    $$(selector: string, options?: {
        loop: number;
        duration: number;
        retry: number;
    }): Promise<WebElement[]>;
    /**
     * 设备截图
     *
     * @param {string} path     图片路径
     * @returns {Promise{Buffer|String}}
     */
    screenshot(options?: {
        path?: string;
    }): Promise<Buffer | string>;
    /**
     * 获取设备屏幕宽高
     *
     * @return {object} screenInfo
     * @return {number} screenInfo.width 真实宽
     * @return {number} screenInfo.height 真实高
     */
    getScreenSize(): Promise<ScreenSize>;
    /**
     * 屏幕点击
     *
     * @param {number} x 横坐标
     * @param {number} y 纵坐标
     * @return {Promise}
     */
    tap(x: number, y: number): Promise<void>;
    /**
     * 长按屏幕
     *
     * @param {number} x 横坐标
     * @param {number} y 纵坐标
     * @param {number} duration 长按时间(ms)
     */
    longpress(x: number, y: number, duration?: number): Promise<void>;
    /**
     * 屏幕滑动
     *
     * @param {number} fx 起点横坐标
     * @param {number} fy 起点纵坐标
     * @param {number} tx 终点横坐标
     * @param {number} ty 终点纵坐标
     * @param {Object} options
     * @return {Promise}
     */
    swipe(fx: number, fy: number, tx: number, ty: number, options?: SwipeOptions): Promise<any>;
    /**
     * 输入文本
     *
     * @param {string} text 文本
     */
    input(text: string): Promise<any>;
    /**
     * 获取版本信息
     *
     * @returns {Promise}
     */
    version(): Promise<string>;
    /**
     * 获取应用列表
     *
     * @returns {Promise{Array{AppInfo}}}
     */
    appList(): Promise<AppInfo[]>;
    /**
     * 获取应用信息
     *
     * @param {string} packageName 包名
     * @returns {Promise{AppInfo}}
     */
    appInfo(packageName: string): Promise<AppInfo>;
    /**
     * 判断应用是否已安装
     *
     * @param {string} appId 应用ID
     * @returns {Promise{boolean}}
     */
    isInstalled(packageName: string): Promise<boolean>;
    /**
     * 安装应用
     *
     * @param {string} appPath 应用路径
     * @returns {Promise}
     */
    install(appPath: string): Promise<void>;
    /**
     * 卸载应用
     *
     * @param {string} appId 应用ID
     * @returns {Promise}
     */
    uninstall(appId: string): Promise<void>;
    /**
     * 启动 APP
     *
     * @param packageName 包名
     * @param {string} activity 启动 Activity
     * @returns {Promise}
     */
    launchApp(packageName: string, activity?: string): Promise<void>;
    /**
     * 终止 APP
     *
     * @param packageName 包名
     */
    terminateApp(packageName: string): Promise<void>;
    /**
     * 激活 APP
     *
     * @param packageName 包名
     */
    activateApp(packageName: string): Promise<void>;
    /**
     * 重新启动 APP
     *
     * @param packageName 包名
     */
    relaunchApp(packageName: string): Promise<void>;
    /**
     * 关闭设备操控实例
     */
    close(): Promise<void>;
    private formatResponse;
}
export {};
