纯血鸿蒙系统 HarmonyOS NEXT自动化测试实践

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、环境配置

  1. 配置鸿蒙HDC环境(等价于 android 端的 adb)
    1. 下载 Command Line Tools 并解压
    2. hdc文件在command-line-tools/sdk/HarmonyOS-NEXT-DB2/openharmony/toolchains目录下
    3. 配置环境变量,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等框架进行用例管理,报告输出等

鸿蒙自动化视频

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/912003.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于java宠物医院管理系统的设计与实现

一、环境信息 开发语言:JAVA JDK版本:JDK8及以上 数据库:MySql5.6及以上 Maven版本:任意版本 操作系统:Windows、macOS 开发工具:Idea、Eclipse、MyEclipse 开发框架:SpringbootHtmljQueryMysql…

施工企业为什么要用工程项目管理软件?工程项目管理软件的用处是什么?

施工企业一定会遇到哪些问题?工人怠工、材料浪费、数据造假、工期拖延、质量问题、安全隐患等。这些问题正在悄然侵蚀建施工业的经济效益。每一个环节的失控都可能导致巨大的经济损失,还可能损害企业的声誉。面对日益复杂的工程管理环境,如何…

业务模块部署

一、部署前端 1.1 window部署 下载业务模块前端包。 (此包为耐威迪公司发布,请联系耐威迪客服或售后获得) 包名为:业务-xxxx-business (注:xxxx为发布版本号) 此文件部署位置为:……

【Web前端】OOP编程范式

面向对象编程(Object-Oriented Programming,简称 OOP)是一种程序设计思想,它通过将程序视为一组相互作用的对象来设计程序。OOP 提出了一些重要的基本概念,包括类与实例、继承和封装。面向对象编程将系统视为由多个对象…

C++入门基础知识142—【关于C++ 友元函数】

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C 友元函数的相关内容! 关于…

BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测

BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测 目录 BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 …

vue实现图片无限滚动播放

本人vue新手菜鸡,文章为自己在项目中遇到问题的记录,如有不足还请大佬指正 文章目录 实现效果代码展示总结 因为刚接触vue,本想着看看能不能用一些element的组件实现图片的轮播效果,尝试使用过element-UI里的走马灯Carouse&#x…

python画图|灵活的subplot_mosaic()函数-初逢

【1】引言 前述学习进程中,对hist()函数画直方图已经有一定的探索。然而学无止境,在继续学习的进程中,我发现了一个显得函数subplot_mosaic(),它几乎支持我们随心所欲地排布多个子图。 经过自我探索,我有一些收获&am…

ODOO学习笔记(1):ODOO的SWOT分析和技术优势是什么?

ODOO是一款开源的企业管理软件套件,广泛应用于企业管理中。它由比利时的Odoo S.A.公司开发,最初名为OpenERP,现在已经成为全球流行的ERP解决方案之一。ODOO集成了ERP、CRM、电子商务和CMS等多种功能模块,适用于各种规模的企业应用…

淘酒屋殷卓荣窖主高端客户私享答谢晚宴暨意大利摩罗斯酒庄之夜

一边是热爱,一边是事业,鱼与熊掌兼得淘酒屋殷卓荣窖主答谢晚宴圆满结束 淘酒屋殷卓荣窖主高端 VIP 客户私享答谢晚宴暨意大利摩罗斯酒庄品鉴之夜在广州四季酒店 99 楼圆满举办 2024 年 11 月 8 日晚,一场别开生面的淘酒屋殷卓荣窖主高端 VI…

LeetCode热题100之贪心算法

1.买卖股票的最佳时机 思路分析:即需要找出某一天的最低价格和它后面几天的最高价格差。 维护一个变量min_price,表示到目前为止遇到的最低股票价格;遍历prices数组,在每一天的价格上: 更新min_price为当前的价格和mi…

SL6115降压恒流 60V降压恒流芯片,高精度1%,PWM模拟调光

一、核心参数与性能 工作电压范围:5.5V至60V,宽输入电压范围使其能够适应多种应用场景。 最大输出电流:根据公开发布的信息,SL6115的最大输出电流可达到1.2A至1.5A,具体取决于不同版本或制造商的规格说明。这一高输出…

测试概念以及测试bug

关于测试的概念 什么是需求? 需求分为用户需求和软件需求。 软件需求可以作为开发和测试工作的依据,而用户需求不一定是合理的,这里的不合理有很多的角度:技术角度上,市场需求上,投入成本和收益比噔噔。…

【青牛科技】GC5931:工业风扇驱动芯片的卓越替代者

在工业领域,工业风扇的稳定高效运行对于维持良好的生产环境至关重要。而驱动芯片作为工业风扇控制系统的核心元件,其性能直接影响风扇的工作状态。芯麦 GC5931 作为一款新型驱动芯片,在替代 A5931/Allegro 应用于工业风扇中展现出了非凡的优势…

阿里云docker安装禅道记录

docker network ls docker network create -d bridge cl_network sudo docker run --name zentao --restart always -p 9982:80 --networkcl_network -v /data/zentao:/data -e MYSQL_INTERNALtrue -d hub.zentao.net/app/zentao:18.5 升级禅道 推荐用按照此文档升级&a…

艾体宝产品丨加速开发!Redis Copilot智能助手上线

我们最近发布了 Redis Copilot,旨在帮助开发者更加高效地使用 Redis 构建应用。提升应用性能,简化构建过程是我们不懈的追求。Redis Copilot 正是为此而生的人工智能助手,助力开发者迅速掌握 Redis 的使用技巧。现在您可以在 Redis Insight 中…

深度学习入门:梯度消失问题浅谈(Sigmod,ReLu)

Sigmoid的梯度消失 以下是一个通过简单的神经网络示例来解释 Sigmoid 函数的梯度消失问题。 假设有一个非常简单的三层神经网络,输入层有两个神经元,隐藏层有两个神经元,输出层有一个神经元。我们使用均方误差作为损失函数,并且…

Chromium127编译指南 Linux篇 - 额外环境配置(五)

引言 在成功获取 Chromium 源代码后,接下来我们需要配置适当的编译环境,以便顺利完成开发工作。本文将详细介绍如何设置 Python 和相关的开发工具,以确保编译过程无碍进行。这些配置步骤是开发 Chromium 的必要准备,确保环境设置…

批量混剪矩阵发布助力短视频营销快速获客

内容概要 在现代营销环境中,短视频已经成为品牌传播的重要工具,尤其是在获取潜在客户方面,短视频营销展现出了卓越的效率。那么,为什么要做短视频营销呢?首先,短视频能够迅速抓住观众的注意力,…

uni-app小程序echarts中tooltip被遮盖

图表中的文案过长,tooltip溢出容器,会被遮盖住 解决方案: 在echarts的tooltip中有confine属性可将tooltip限制在容器内,不超过容器,就不易被遮盖