ha4t.api module

此模块包含UI自动化操作接口 提供操作如:点击、滑动、输入、OCR识别等

click(*args, duration: float = 0.1, **kwargs) None[源代码]

点击操作,支持多种定位方式 用法:

Example:
>>> click((100,100))  # 坐标点击
>>> click("TEXT")  # 文字点击, OCR识别
>>> click(image="path/to/image.png")  # 图像匹配点击
>>> click(**kwargs)  # uiautomator2/wda的点击(适合原生app,速度快,非H5应用建议使用)
exists(*args, **kwargs) bool[源代码]

判断元素是否存在 :param args: 可变参数,用于不同的定位方式 :param kwargs: 关键字参数,用于uiautomator2/wda的定位 :return: 元素是否存在

Example:
>>> exists((100,100))  # 坐标点击
>>> exists("TEXT")  # 文字点击, OCR识别
>>> exists(image="path/to/image.png")  # 图像匹配点击
>>> exists(**kwargs)  # uiautomator2/wda的点击(适合原生app,速度快,非H5应用建议使用)
wait(*args, timeout: float = 5, reverse: bool = False, raise_error: bool = True, use_in_text: bool = False, **kwargs)[源代码]

等待元素出现,支持多种定位方式 用法: 1. wait("TEXT") # 文字等待, OCR识别 2. web等待 3. uiautomator2/wda的等待(适合原生app,速度快,非H5应用建议使用) :param use_in_text: 是否在文本中使用 :param raise_error: 是否抛出错误 :param reverse: 反向等待 :param args: 可变参数,用于不同的定位方式 :param timeout: 等待超时时间,默认为CF.FIND_TIMEOUT :param kwargs: 关键字参数,用于uiautomator2/wda的定位 :return: 元素是否出现

Example:
>>> wait("TEXT")  # 文字等待, OCR识别
>>> wait(image="path/to/image.png")  # 图像匹配等待
>>> wait(**kwargs)  # uiautomator2/wda的等待(适合原生app,速度快,非H5应用建议使用)
swipe(p1, p2, duration=None, steps=None)[源代码]

uiautomator2/wda的滑动操作 :param p1: 起始位置,(x, y)坐标或比例 :param p2: 结束位置,(x, y)坐标或比例 :param duration: 滑动持续时间 :param steps: 滑动步数,1步约5ms,如果设置则忽略duration

Example:
>>> swipe((0.5, 0.8), (0.5, 0.3))  # 从中间向上滑动
>>> swipe((0.2, 0.5), (0.8, 0.5), duration=0.5)  # 从左向右滑动
get_page_text() str[源代码]

OCR识别页面文字,返回当前页面所有文字的拼接字符串 可用于断言

返回:

页面上的所有文字拼接成的字符串

swipe_up(duration: float = 0.2, steps: int | None = None) None[源代码]

向上滑动

参数:
  • duration -- 滑动持续时间

  • steps -- 滑动步数

Example:
>>> swipe_up()  # 默认持续时间向上滑动
>>> swipe_up(duration=0.5, steps=10)  # 自定义持续时间和步数向上滑动
swipe_down(duration: float = 0.2, steps: int | None = None) None[源代码]

向下滑动

参数:
  • duration -- 滑动持续时间

  • steps -- 滑动步数

Example:
>>> swipe_down()  # 默认持续时间向下滑动
>>> swipe_down(duration=0.5, steps=10)  # 自定义持续时间和步数向下滑动
swipe_left(duration: float = 0.1, steps: int | None = None) None[源代码]

向左滑动

参数:
  • duration -- 滑动持续时间

  • steps -- 滑动步数

Example:
>>> swipe_left()  # 默认持续时间向左滑动
>>> swipe_left(duration=0.5, steps=10)  # 自定义持续时间和步数向左滑动
swipe_right(duration: float = 0.1, steps: int | None = None) None[源代码]

向右滑动

参数:
  • duration -- 滑动持续时间

  • steps -- 滑动步数

Example:
>>> swipe_right()  # 默认持续时间向右滑动
>>> swipe_right(duration=0.5, steps=10)  # 自定义持续时间和步数向右滑动
screenshot(filename: str | None = None) <MagicMock name='mock.Image.Image' id='140002791260432'>[源代码]

截图并可选保存到本地

参数:

filename -- 保存截图的文件名,如果为None则不保存

返回:

截图的PIL.Image对象

Example:
>>> img = screenshot()  # 截图并不保存
>>> screenshot("screenshot.png")  # 截图并保存为文件
popup_apps() None[源代码]

上划弹起应用列表 注意:此方法在部分手机上可能无法使用

Example:
>>> popup_apps()  # 弹起应用列表
home() None[源代码]

返回桌面

Example:
>>> home()  # 返回主屏幕
pull_file(src_path: List[str] | str, filename: str) None[源代码]

从app本地路径下载文件到本地

参数:
  • src_path -- 路径列表或字符串,ios为Documents/xxx,android为/data/data/xxx/files/xxx

  • filename -- 本地文件名

Example:
>>> pull_file("Documents/file.txt", "local_file.txt")  # 从app下载文件
upload_files(src_path: str) None[源代码]

上传文件或文件夹到设备

参数:

src_path -- 源文件或文件夹路径,可以是列表或字符串

抛出:

Exception -- 如果上传过程中出现错误

Example:
>>> upload_files("local_file.txt")  # 上传单个文件
>>> upload_files("my_folder")  # 上传文件夹
delete_file(file_path: List[str] | str) None[源代码]

删除设备上的文件或文件夹

参数:

file_path -- 要删除的文件或文件夹路径,可以是列表或字符串

抛出:

Exception -- 如果删除过程中出现错误

Example:
>>> delete_file("Documents/file.txt")  # 删除单个文件
>>> delete_file(["Documents", "my_folder"])  # 删除文件夹
clear_app(app_name: str = None)[源代码]

清除应用数据 > 仅支持Android平台 :param app_name: 应用名称 :Example:

>>> clear_app("com.example.app")  # 清除应用数据
返回:

start_app(app_name: str | None = '', activity: str | None = '') None[源代码]

启动应用程序

参数:
  • app_name -- 应用程序名称,如果为None则使用配置中的默认值

  • activity -- Android应用的活动名称,如果为None则使用配置中的默认值

抛出:

ValueError -- 如果是Android平台且activity为None

Example:
>>> start_app("com.example.app")  # 启动指定应用
get_current_app() str[源代码]

获取当前运行的应用名称

返回:

应用bundleId 或 package name

Example:
>>> get_current_app()  # 获取当前运行的应用名称
restart_app(app_name: str | None = '', activity: str | None = '') None[源代码]

重启应用程序并更新CDP连接

Example:
>>> restart_app()  # 重启当前应用