HarmonyOS7 UI 自动化测试:UiTest 框架从 0 到 1
文章目录前言为什么要写 UI 测试UiTest 框架概览环境搭建查找组件模拟操作断言验证测试报告写在最后前言你有没有试过改了一行代码结果三个页面炸了我上个月就干过这事——改了个按钮颜色把整个订单流程搞崩了。手动测了两天才把问题找全人都麻了。从那以后我就在想要是有一套自动化测试能替我点点点该多好。折腾了一周 UiTest 框架终于跑通了第一个 UI 自动化测试用例。今天把整个过程分享出来帮你少踩坑。HarmonyOS7 提供了官方的 UI 自动化测试框架UiTest专门用来对 ArkUI 页面做自动化验证。说实话之前我一直觉得写测试是浪费时间直到那次改一行炸三页的事故才真正意识到——没有测试的代码就像没有刹车的车早晚出事。为什么要写 UI 测试先聊聊为什么需要 UI 测试而不是只靠单元测试。单元测试管的是逻辑但用户看到的、操作的是 UI。按钮能不能点页面跳转对不对列表滑到底部会不会崩这些问题单元测试覆盖不了。我之前的项目有个搜索页单元测试全过结果真机上输入法一弹出来就把搜索按钮遮住了。这种问题只有 UI 测试能发现。UI 自动化测试能帮我们做到回归保障改代码不怕旧功能炸持续集成每次提交自动跑测试减少手动测试把重复的点点点交给机器UiTest 框架概览UiTest 是 HarmonyOS7 官方的 UI 自动化测试框架核心能力包括能力说明|组件查找| 通过 id、text、type 等属性定位 UI 组件 ||模拟操作| 点击、长按、滑动、输入文本等 ||断言验证| 检查组件属性、页面状态是否符合预期 ||测试报告| 自动生成测试结果报告 |它的 API 风格跟 Android 的 UiAutomator 有点像但更简洁。如果你写过 Android UI 测试上手会很快。环境搭建写 UI 测试之前得先把环境搭好。步骤不复杂但有几个坑要注意。1. 在模块的oh-package.json5中添加依赖{ devDependencies: { ohos/hypium: 1.0.6 } }2. 在测试目录下创建测试文件测试文件放在entry/src/ohosTest/ets/目录下别放错位置了。ohosTest是专门放仪器测试的目录跟test目录不一样。3. 配置测试运行器在module.json5里确认有测试配置{ abilities: [ { name: EntryAbility, srcEntry: ./ets/EntryAbility.ets } ] }划重点测试文件必须在ohosTest目录下否则框架识别不了。查找组件UiTest 的核心思路就两步找到组件操作组件。找组件是第一步也是最关键的一步。按 id 查找import{Driver,ON}fromohos.UiTest;constdriverDriver.create();constbuttonawaitdriver.findComponent(ON.id(loginButton));这段代码通过组件的id来查找。ON.id()是最精确的查找方式前提是你给组件设了id。按文本查找consttextCompawaitdriver.findComponent(ON.text(登录));当组件没有设 id 时可以通过显示文本来查找。不过这种方式有个隐患——文本改了测试就挂了。所以还是建议给关键组件加 id。按类型查找constlistCompawaitdriver.findComponent(ON.type(List));按组件类型查找适合需要操作某个类型的容器组件时使用。敲黑板查找组件返回的是Promise必须用await。忘了加await是新手最常见的坑。模拟操作找到组件后就可以模拟用户操作了。点击操作constloginBtnawaitdriver.findComponent(ON.id(loginButton));awaitloginBtn.click();click()模拟单击。如果你需要长按用longClick()。滑动操作awaitdriver.swipe(200,500,200,100,500);// 参数起点x, 起点y, 终点x, 终点y, 滑动速度(ms)swipe()是屏幕级别的滑动适合滚动页面、下拉刷新等场景。输入文本constinputCompawaitdriver.findComponent(ON.id(searchInput));awaitinputComp.inputText(HarmonyOS7);往输入框里填文字。注意这个操作会先清空原有内容再输入新内容。组合操作示例——模拟登录流程asyncfunctiontestLogin(){constdriverDriver.create();// 输入用户名constusernameInputawaitdriver.findComponent(ON.id(username));awaitusernameInput.inputText(testuser);// 输入密码constpasswordInputawaitdriver.findComponent(ON.id(password));awaitpasswordInput.inputText(123456);// 点击登录按钮constloginBtnawaitdriver.findComponent(ON.id(loginButton));awaitloginBtn.click();// 等待页面响应awaitdriver.delayMs(1000);}这段代码模拟了完整的登录操作。delayMs()用来等待页面跳转时间根据实际情况调整。断言验证操作完了得验证结果对不对。这才是测试的核心——光操作不验证那叫演示不叫测试。验证组件是否可见import{assert}fromohos/hypium;consthomeTitleawaitdriver.findComponent(ON.text(首页));assert.assertTrue(homeTitle!null,登录后应跳转到首页);这段代码检查登录后是否出现了首页文字。如果组件找不到说明跳转没成功。验证组件属性conststatusTextawaitdriver.findComponent(ON.id(orderStatus));consttextawaitstatusText.getText();assert.assertEqual(text,已完成,订单状态应为已完成);先拿到组件再读取它的文本内容跟预期值对比。assertEqual会在值不匹配时抛出异常测试标记为失败。验证组件数量constlistItemsawaitdriver.findComponents(ON.type(ListItem));assert.assertEqual(listItems.length,10,列表应显示10条数据);注意findComponents带 s返回所有匹配的组件数组。适合验证列表数据是否正确加载。血泪教训断言一定要写清楚错误信息不然测试挂了你看半天不知道哪里出了问题。测试报告测试跑完会自动生成报告。在 DevEco Studio 里右键测试文件 → Run Tests执行完就能看到结果。报告里包含信息说明用例总数总共跑了多少条测试通过数绿色的没问题的失败数红色的需要排查执行时间每条用例耗时失败截图断言失败时自动截图建议把 UI 测试集成到 CI 流水线里每次提交代码自动跑一遍。这样谁改坏了东西第一时间就能发现。写在最后UiTest 框架上手不难关键是把组件 id 规划好。我现在的习惯是所有用户可交互的组件必须设 id按钮用btnXxx输入框用inputXxx统一命名。这样写测试的时候查找组件就轻松了。还有一点别一上来就想覆盖所有场景。先从核心流程开始——登录、支付、关键操作路径把这些保住了再慢慢扩展。测试覆盖率 20% 但都是关键路径比覆盖率 80% 但全是边缘场景有用得多。如果你还没写过 UI 自动化测试今天就可以动手试试。先跑通一个用例你就知道有多香了。

相关新闻

ChatGPT、Codex、Plus与Pro:AI会调用工具,为什么仍然经常把任务做错?

ChatGPT、Codex、Plus与Pro:AI会调用工具,为什么仍然经常把任务做错?

很多开发者判断AI Agent能力时,首先会看它能不能调用工具。能不能读取项目文件。 能不能运行测试命令。 能不能查询日志。 能不能修改代码。 能不能连续完成多个步骤。当ChatGPT负责理解需求,Codex进入工程环境执行任务,Plus与Pro支撑更高频、…

2026/7/24 20:57:13 阅读更多 →
任天堂Switch自制固件大气层:3步快速上手游戏优化终极指南

任天堂Switch自制固件大气层:3步快速上手游戏优化终极指南

任天堂Switch自制固件大气层:3步快速上手游戏优化终极指南 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 你是否还在为Switch游戏加载缓慢、系统功能受限而烦恼?大…

2026/7/24 20:57:13 阅读更多 →
魔兽争霸III终极优化插件:3分钟解决经典游戏所有兼容性问题

魔兽争霸III终极优化插件:3分钟解决经典游戏所有兼容性问题

魔兽争霸III终极优化插件:3分钟解决经典游戏所有兼容性问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典魔兽争霸III在现代电…

2026/7/24 20:56:12 阅读更多 →

最新新闻

如何用AI股票分析系统在5分钟内搭建你的智能投资助手

如何用AI股票分析系统在5分钟内搭建你的智能投资助手

如何用AI股票分析系统在5分钟内搭建你的智能投资助手 你是否每天花费数小时查看股票行情、分析技术指标,却仍然难以把握市场机会?面对海量的财经新闻和复杂的数据图表,个人投资者往往感到力不从心。daily_stock_analysis正是为解决这一痛点而…

2026/7/24 21:07:16 阅读更多 →
鸿蒙三方库 | harmony-utils之NetworkUtil 网络检测详解

鸿蒙三方库 | harmony-utils之NetworkUtil 网络检测详解

前言 网络加速检测在企业应用和安全场景中非常重要,如企业应用要求连接内网才能访问内部资源。pura/harmony-utils 的 NetworkUtil 封装了内网检测方法。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解,帮助开发者快速掌握并应用…

2026/7/24 21:07:16 阅读更多 →
Windows Defender完全移除指南:windows-defender-remover工具终极解决方案

Windows Defender完全移除指南:windows-defender-remover工具终极解决方案

Windows Defender完全移除指南:windows-defender-remover工具终极解决方案 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode…

2026/7/24 21:07:16 阅读更多 →
RimSort终极指南:从零开始打造《环世界》完美模组环境

RimSort终极指南:从零开始打造《环世界》完美模组环境

RimSort终极指南:从零开始打造《环世界》完美模组环境 【免费下载链接】RimSort RimSort is an open source mod manager for the video game RimWorld. There is support for Linux, Mac, and Windows, built from the ground up to be a reliable, community-mana…

2026/7/24 21:07:16 阅读更多 →
UCD90320电源监控与序列控制:从原理到实战的复杂系统电源管理

UCD90320电源监控与序列控制:从原理到实战的复杂系统电源管理

1. 项目概述:为什么我们需要一个“电源管家”?在服务器主板、高端通信设备或者复杂的工业控制系统中,你打开机箱盖板,映入眼帘的往往不是单一的电源,而是一个由十几甚至几十路不同电压、不同电流的电源轨(P…

2026/7/24 21:07:16 阅读更多 →
3个关键配置让daily_stock_analysis智能分析系统更懂你的投资需求

3个关键配置让daily_stock_analysis智能分析系统更懂你的投资需求

3个关键配置让daily_stock_analysis智能分析系统更懂你的投资需求 你是否曾经遇到过股票分析工具不够个性化的困扰?数据源不稳定、分析策略不符合你的投资风格、回测结果与实际表现差异太大?daily_stock_analysis作为一款LLM驱动的多市场股票智能分析系…

2026/7/24 21:06:16 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻