HarmonyOS鸿蒙Next中Hypium有什么办法快速获取当前页面的package name以及page_name

HarmonyOS鸿蒙Next中Hypium有什么办法快速获取当前页面的package name以及page_name

self.driver.start_app("com.huawei.hmos.settings","MainAbility")

如上代码,如果我打开一个app的一个页面,如何快速的获取到这个app的package_name以及page_name呢?我目前是用DevEco工具去获取的package_name,但是page_name不知道如何定位跟获取?各位有什么办法么?以前安卓,可以通过weditor直接获取到package_name,而且一般用不到page_name,但是Hypium目前看基本都需要有page_name,如何有更快捷的方式可以获取到当前页面的page_name


更多关于HarmonyOS鸿蒙Next中Hypium有什么办法快速获取当前页面的package name以及page_name的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

【背景知识】

可使用hdc shell aa dump -l命令查看当前查看当前任务列表中的Ability信息。在返回的Ability中查找状态在FOREGROUND(前台)的Ability即为当前窗口展示的Ability。

C:\Users\xxx>hdc shell aa dump -l
User ID #100
  current mission lists:{
    Mission ID #117  mission name #[#com.xingin.xhs_hos:redbook:EntryAbility]  lockedState #0  mission affinity #[]
      AbilityRecord ID #1855
        app name [com.xingin.xhs_hos]
        main name [EntryAbility]
        bundle name [com.xingin.xhs_hos]
        ability type [PAGE]
        state #FOREGROUND  start time [90836358]
        app state #FOREGROUND
        ready #1  window attached #0  launcher #0
        callee connections:
        isKeepAlive: false
    Mission ID #118  mission name #[#com.huawei.hmos.settings:phone_settings:com.huawei.hmos.settings.MainAbility]  lockedState #0  mission affinity #[]
      AbilityRecord ID #1864
        app name [com.huawei.hmos.settings]
        main name [com.huawei.hmos.settings.MainAbility]
        bundle name [com.huawei.hmos.settings]
        ability type [PAGE]
        state #BACKGROUND  start time [90857256]
        app state #BACKGROUND
        ready #1  window attached #0  launcher #0
        callee connections:
        isKeepAlive: false
 }

在返回Ability信息current mission lists中app state为FOREGROUND里查找。 main name表示page_name。 bundle name表示package_name。

【解决方案】

  • 手机成功连接PC,将需要获取package name以及page_name的应用打开置于前台。
  • Hypium工程中,使用self.driver.shell('aa dump -l')命令获取当前窗口展示的Ability信息并返回,取返回值中的main name即得到page_name ,取返回值中的bundle name即得到package_name。

代码示例如下:

self.driver.start_app("com.huawei.hmos.settings")
echo = self.driver.shell('aa dump -l')
main_name = echo.split('main name')[1].split()[0].split('[')[1].split(']')[0]
bundle_name = echo.split('bundle name')[1].split()[0].split('[')[1].split(']')[0]
print(main_name)
print(bundle_name)

【常见FAQ】

Q:如何获取当前页面的ability type、app state值?

A:可使用hdc shell aa dump -l命令查看当前查看当前任务列表中的Ability信息。在返回的current mission lists中app state为FOREGROUND提取ability type、app state值。

self.driver.start_app("com.huawei.hmos.settings")
echo = self.driver.shell('aa dump -l')
ability_type = echo.split('ability type')[1].split()[0].split('[')[1].split(']')[0]
app_state = echo.split('app state')[1].split()[0].split('#')[1]

Q:如何获取当前窗口?

A:根据当前打开的包名调用find_window()方法获取窗口名称。

self.driver.start_app("com.huawei.hmos.settings")
window = self.driver.find_window(WindowFilter().bundle_name("com.xingin.xhs_hos").actived(True))

更多关于HarmonyOS鸿蒙Next中Hypium有什么办法快速获取当前页面的package name以及page_name的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next的Hypium测试框架中,可通过driver.currentWindowHandle获取当前窗口句柄,再结合driver.getWindowProperties方法解析窗口属性来提取页面的bundleName(包名)和abilityName(页面名)。具体属性路径通常为windowProperties.bundleNamewindowProperties.abilityName

在HarmonyOS Next的Hypium测试框架中,可以通过driver.current_app属性快速获取当前页面的包名(package name)和页面名(page name)。

具体方法如下:

# 获取当前页面的应用信息
current_app_info = self.driver.current_app
# 提取包名
package_name = current_app_info.bundle_name
# 提取页面名(ability name)
page_name = current_app_info.ability_name

print(f"Package name: {package_name}")
print(f"Page name: {page_name}")

说明:

  • driver.current_app 返回一个包含当前应用信息的对象。
  • bundle_name 对应应用的包名(package name)。
  • ability_name 对应页面的Ability名称,即你所需的page_name。

使用场景示例: 在你启动应用并进入某个页面后,直接调用上述代码即可获取当前页面的包名和Ability名,无需借助DevEco工具手动查找。

这种方式比通过工具手动获取更快捷,尤其适合在自动化测试脚本中动态识别和验证页面。

回到顶部