HarmonyOS鸿蒙Next中Hypium跳转应用内的页面

HarmonyOS鸿蒙Next中Hypium跳转应用内的页面 在写自动化测试代码时,因为有些页面路径太长经常失败,有没有什么方法可以直接跳转到对应的页面,类似于deeplink?hdc有相关的命令吗?

3 回复

可以,思路就是让开发给目标页加一段 DeepLink 支持 → 在 Hypium 脚本里直接 hdc shell aa start  目前 Hypium 本身没有封装跳任意页的 API,只能借助系统 Ability 的显式跳转能力,步骤如下

1. 开发侧一次性改造

在要直达的 Ability(或 UIAbility)里新增一条 skills 即可,例如给「设置页」加 schema:

"abilities": [
  {
    "name": ".SettingsAbility",
    "skills": [
      {
        "entities": ["entity.system.home"],
        "actions": ["action.system.main"],
        "uris": [
          {
            "scheme": "hypium", // 任意自定义
            "host": "settings", // 任意自定义
            "path": "/page/main" // 任意自定义
          }
        ]
      }
    ]
  }
]

编译推包后,就能通过:

hdc shell aa start -a action.system.main -d hypium://settings/page/main

直接拉起该页,不需要经过首页逐级点击。


2. 测试脚本里调用(Python 为例)

Hypium 提供了 host.shell() 方法,可以执行任意 hdc 命令 :

from hypium import host

# 一键直达设置页
host.shell("hdc shell aa start "
           "-a action.system.main "
           "-d hypium://settings/page/main")

如果还要带参数,可在 URI 后面继续拼 queryString,在 Ability 的 onCreate(want) 里通过 want.uri.getQuery() 自行解析。


3. 多页批量测试技巧

  • 把「scheme + host + path」三件套写进 Excel,循环拼命令即可批量回归。
  • 若某些页在 router 里而非独立 Ability,就让开发在入口 Ability 里统一做一次「uri 路由分发」,同样可以用上述命令调过去,只要最终 router.pushUrl() 即可。
  • 担心环境残留,可在命令后面加 --es cleanTask true(或代码里 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK))每次清栈。

更多关于HarmonyOS鸿蒙Next中Hypium跳转应用内的页面的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,Hypium测试框架通过Driver类实现应用内页面跳转。使用driver.pressBack()可返回上一页,driver.delay()控制操作间隔。页面跳转需依赖UI测试能力,通过组件定位和操作触发导航。Hypium提供onrun等关键字组织测试步骤,结合Component模块识别界面元素。测试脚本需在TestRunner中执行,支持异步操作同步化处理。

在HarmonyOS Next中,Hypium测试框架支持通过Intent方式直接启动应用内指定页面,类似DeepLink效果。可通过以下方式实现:

  1. 在测试代码中使用Intent设置目标页面的bundleName、abilityName和参数:
let intent = {
    bundleName: "com.example.app",
    abilityName: "MainAbility",
    parameters: {"page": "target"}
};
hypiumTestContext.startAbility(intent);
  1. 在应用代码的对应Ability中,通过onCreateonNewIntent接收参数并跳转至目标页面。

目前hdc命令主要用于调试部署,页面跳转建议直接在Hypium测试代码中封装成公共方法,避免硬编码长路径。这种方式比直接使用页面路径更稳定,且能携带初始化参数。

回到顶部