1、测试框架选择
hdc
:类似 android 系统的 adb 命令,提供设备信息查询,包管理,调试相关的命令@ohos.UiTest
:鸿蒙 sdk 的一部分,类似 android sdk 里的uiautomator
,基于 Accessibility 服务,提供模拟 UI 操作的能力。但是需要用arkTS
语言来写自动化 case,并且用例需要打包到被测 app 里面hypium
:鸿蒙官方的自动化框架,功能比较完善,可以基于 python 编写自动化 case-
hmdriver2 一个鸿蒙自动化测试py库,安装方便,语法简洁
鸿蒙自动化测试的 文档中心
文档中心hmdriver2 文档:https://github.com/codematrixer/hmdriver2
查看了文档后,发现hypium是官方的自动化框架,但是安装环境比较复杂,并且他是一整套的测试框架,包括了用例套件的管理与执行等,算是比较重量级的。
hmdriver2是一个轻量级的库,流程等都不复杂,先体验一下这个
2、环境配置
- 配置鸿蒙
HDC
环境(等价于 android 端的 adb)- 下载 Command Line Tools 并解压
hdc
文件在command-line-tools/sdk/HarmonyOS-NEXT-DB2/openharmony/toolchains
目录下- 配置环境变量,macOS 为例,在~/.bash_profile 或者 ~/.zshrc 文件中添加
export HM_SDK_HOME="/Users/develop/command-line-tools/sdk/HarmonyOS-NEXT-DB2" //请以sdk实际安装目录为准
export PATH=$PATH:$HM_SDK_HOME/hms/toolchains:$HM_SDK_HOME/openharmony/toolchains
export HDC_SERVER_PORT=7035
电脑插上手机,开启 USB 调试,确保执行hdc list targets
可以看到设备序列号
hdc常用命令 文档中心
2、安装hmdirver2
基础库
pip3 install -U hmdriver2
如果需要使用屏幕录屏 功能,则需要安装额外依赖opencv-python
pip3 install -U "hmdriver2[opencv-python]"
// 由于`opencv-python`比较大,因此没有写入到主依赖中,按需安装
3、代码编写
导入包后就可以连接设备,启动app,当前以安居客发布为例
from hmdriver2.driver import Driver
d = Driver("FMR0223C13000076")
d.start_app("com.anjuke.home", "EntryAbility")
然后就可以进行元素定位和操作
元素定位支持
- 控件查找(联合查找,模糊查找,相对查找)
- 控件信息获取
- 控件点击,长按,拖拽,缩放
- 文本输入,清除
- 获取控件树
控件查找支持这些by
属性
id
key
text
type
description
clickable
longClickable
scrollable
enabled
focused
selected
checked
checkable
isBefore
isAfter
定位方式包括普通定位,模糊定位,相当定位
d(text="tab_recrod")
d(id="drag")
# 定位所有`type`为Button的元素,选中第0个
d(type="Button", index=0)
# 定位`type`为Button且`text`为tab_recrod的元素
d(type="Button", text="tab_recrod")
# 定位`text`为showToast的元素的前面一个元素
d(text="showToast", isAfter=True)
# 定位`id`为drag的元素的后面一个元素
d(id="drag", isBefore=True)
元素操作与信息获取
d(text="tab_recrod").info
# output:
{
"id": "",
"key": "",
"type": "Button",
"text": "tab_recrod",
"description": "",
"isSelected": False,
"isChecked": False,
"isEnabled": True,
"isFocused": False,
"isCheckable": False,
"isClickable": True,
"isLongClickable": False,
"isScrollable": False,
"bounds": {
"left": 539,
"top": 1282,
"right": 832,
"bottom": 1412
},
"boundsCenter": {
"x": 685,
"y": 1347
}
}
d(text="tab_recrod").click()
d(type="Button", text="tab_recrod").click()
d(text="tab_recrod").click_if_exists()
d(text="tab_recrod").double_click()
d(text="tab_recrod").long_click()
# 控件拖拽
componentB: ComponentData = d(type="ListItem", index=1).find_component()
d(type="ListItem").drag_to(componentB) # 将元素拖动到元素B上
# 控件缩放
d(text="tab_recrod").pinch_in(scale=0.5)
d(text="tab_recrod").pinch_out(scale=2)
更多操作请看详细文档https://github.com/codematrixer/hmdriver2或hmdriver2 发布:开启鸿蒙 NEXT 自动化新时代 · 测试之家
另外元素查找可使用 uiviewer工具
安装 pip3 install -U uiviewer
启动 python3 -m uiviewer
打开页面,选择设备,点击connect,连接设备
可查看ui树,定位元素,复制xpath或者rect(元素在屏幕位置)
点击dump hierarchy刷新页面
小demo
from hmdriver2.driver import Driver
d = Driver("FMR0223C13000076")
d.start_app("com.anjuke.home", "EntryAbility")
d(text="租房", index=0).click()
for i in range(5):
d.swipe(0.5, 0.7, 0.5, 0.5, speed=2000)
d.go_home()
实际可以结合pytest等框架进行用例管理,报告输出等
鸿蒙自动化视频