hamibot 脚本支持测试某个app切换页面吗?如何操作

已存档
兔如花
9
· 2 个月前
第 1 条补充
·
2 个月前

那如何获得想要页面的路径呢,如何通过hamibot获得到,比如微信小程序商品页,订单确认页面

第 2 条补充
·
2 个月前

hamibot能获得测试app当前页面的参数吗 微信小程序参数未加密

回答

Hamibot AI
1
· 2 个月前

Hamibot 脚本支持测试某个 App 的页面切换操作。你可以通过以下方法来实现:

1. 等待目标 Activity 出现

使用 waitForActivity(activity[, period = 200]) 函数,等待指定的 Activity 出现。

  • activity: 目标 Activity 名称(例如 "com.example.MainActivity")。
  • period: 检查间隔时间,默认是 200 毫秒。

示例:

// 等待微信主界面的 Activity 出现
waitForActivity("com.tencent.mm.ui.LauncherUI");
toast("已进入微信主界面");

2. 启动目标页面的 Intent

如果你需要主动跳转到某个页面,可以使用 app.startActivity(intent) 来启动一个 Intent。

  • 构造 Intent 对象时,可以指定 packageNameclassName 来打开特定页面。

示例:

// 打开微信的设置页面
app.startActivity({
    packageName: "com.tencent.mm",
    className: "com.tencent.mm.setting.ui.setting.SettingsFragmentUI"
});

3. 结合 UI 控件进行页面切换测试

通过查找页面上的控件并模拟点击,触发页面切换。

  • 使用 text("xxx").findOne() 查找文本控件。
  • 使用 .click() 模拟点击。

示例:

// 进入微信后,点击“我”标签
text("我").findOne().click();
sleep(1000); // 等待页面切换

// 再点击“设置”按钮
text("设置").findOne().click();

4. 验证页面是否切换成功

结合 text("xxx").exists()text("xxx").waitFor() 来确认当前页面是否已经切换到目标页面。

示例:

// 点击“设置”后,等待“通用”选项出现
text("通用").waitFor();
toast("已成功进入设置页面");

5. 完整流程示例

以下是一个完整的脚本流程,用于测试从启动应用到切换页面的过程:

// 启动微信
launchApp("微信");

// 等待微信主界面的 Activity
waitForActivity("com.tencent.mm.ui.LauncherUI");

// 点击“我”标签
text("我").findOne().click();

// 等待“设置”按钮出现并点击
text("设置").findOne().click();

// 验证是否进入设置页面
text("通用").waitFor();
toast("成功切换到设置页面");

注意事项

  1. 权限要求:

    • 确保 Hamibot 的「无障碍服务权限」已开启。
    • 如果测试涉及敏感操作,可能还需要设备 Root 权限。
  2. Activity 名称获取:

    • 可以使用工具如 Activity Monitor 获取目标 App 的 Activity 名称。

通过以上方法,你可以轻松地在 Hamibot 脚本中测试 App 的页面切换行为。


补充回答 1

你可以通过以下几种方式获取目标页面(如微信小程序商品页、订单确认页)的路径信息,用于 Hamibot 脚本中的 IntentActivity 判断:


✅ 方法一:使用 AccessibilityService 获取当前页面信息

Hamibot 提供了全局对象 currentActivity()currentPackage() 来获取当前正在运行的应用包名和 Activity 名。

示例代码:

// 打印当前应用的包名和 Activity
log("当前包名: " + currentPackage());
log("当前页面: " + currentActivity());

// 可以配合 UI 检测来判断是否进入目标页面
if (currentActivity() == "com.tencent.mm.plugin.product.ui.MallProductUI") {
    toast("已进入商品详情页");
}

文档地址 https://docs.hamibot.com/


✅ 方法二:手动操作 App 并记录页面路径

你可以在手机上手动打开目标页面(例如微信小程序的商品页),然后使用 Hamibot 的 API 记录当前页面信息。

步骤如下:

  1. 在 Hamibot 中运行以下脚本:
auto.waitFor();

// 每隔 1 秒打印一次当前页面信息
setInterval(() => {
    log("包名: " + currentPackage());
    log("页面: " + currentActivity());
}, 1000);
  1. 手动操作微信进入目标页面(如商品页、订单页等)。
  2. 查看日志输出,记录下对应的 currentActivity() 值。

✅ 方法三:使用 Intent 工具解析目标页面

如果你想通过 Intent 启动某个特定页面,可以构造带有参数的 Intent。

示例:打开微信小程序商品页

app.startActivity({
    action: "android.intent.action.VIEW",
    packageName: "com.tencent.mm",
    className: "com.tencent.mm.plugin.product.ui.MallProductUI",
    // 如果有参数,可以添加 extra 数据
    extras: {
        "product_id": "123456"
    }
});

注意:某些页面可能需要额外参数(如商品 ID、用户 ID 等),这些参数通常可以通过抓包或逆向分析获得。


✅ 方法四:使用 ADB 工具获取前台页面信息

如果你熟悉命令行,可以连接设备后使用 ADB 命令查看当前前台页面信息。

ADB 命令:

adb shell dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'

输出示例:

mCurrentFocus=Window{... com.tencent.mm/com.tencent.mm.plugin.product.ui.MallProductUI}

从中提取出 com.tencent.mm/com.tencent.mm.plugin.product.ui.MallProductUI 即为包名与页面类名。


🔍 常见微信页面类名参考(仅供参考)

页面名称 类名
微信主界面 com.tencent.mm.ui.LauncherUI
商品详情页 com.tencent.mm.plugin.product.ui.MallProductUI
支付确认页 com.tencent.mm.plugin.wallet_core.ui.WalletBalanceManagerUI
设置页面 com.tencent.mm.setting.ui.setting.SettingsFragmentUI

实际页面类名可能因版本更新而变化,请以实际测试结果为准。


🧪 小技巧:结合文本查找辅助定位页面

如果无法直接获取页面类名,也可以通过查找页面上的文字内容进行判断。

if (text("确认订单").exists()) {
    toast("已进入订单确认页");
}

总结

方法 是否推荐 说明
使用 currentActivity() 获取 ✅ 推荐 最简单直接的方式
手动记录页面信息 ✅ 推荐 配合脚本实时观察
构造 Intent 启动页面 ✅ 推荐 适合自动化跳转
ADB 命令获取前台页面 ⚠️ 进阶 需要电脑和调试环境
使用文本查找判断页面 ✅ 推荐 辅助判断当前页面

如有进一步需求,比如如何构造带参数的 Intent 或识别复杂页面结构,建议点击【更多】→【创建脚本工单】联系开发者协助。


补充回答 2

Hamibot 无法直接读取 App 页面中的参数(如微信小程序页面的参数),因为这些参数通常存储在应用的内存或 Intent 中,Hamibot 的无障碍服务本身并不具备访问这些数据的能力。

但你可以通过以下方式间接获取或构造目标页面的参数:


✅ 方法一:使用 ADB 抓取当前 Activity 的 Intent 数据(需电脑)

  1. 连接设备并打开目标页面(如微信小程序商品页)。
  2. 执行以下命令抓取当前 Activity 的 Intent 信息:
adb shell dumpsys activity top
  1. 在输出中查找 Intent { ... },可以找到类似如下内容:
Intent: act=android.intent.action.VIEW dat=https://example.com?product_id=123

从中提取出参数(如 product_id=123)后,你可以在 Hamibot 脚本中构造带有该参数的 Intent 启动页面。


✅ 方法二:通过 UI 文本识别辅助判断页面(无需参数)

如果参数没有加密且显示在页面上,可以通过文本匹配来判断当前是否进入目标页面。

示例:

if (text("商品ID: 123456").exists()) {
    toast("已进入指定商品页面");
}

✅ 方法三:构造带参数的 Intent(适合自动化跳转)

如果你已经通过 ADB 或其他方式获得了带参数的 URL,可以使用 app.startActivity() 构造 Intent 来打开指定页面。

示例:

app.startActivity({
    action: "android.intent.action.VIEW",
    packageName: "com.tencent.mm",
    className: "com.tencent.mm.plugin.product.ui.MallProductUI",
    data: "https://wxapp.com/product?product_id=123"
});

❌ 注意事项

  • 微信小程序页面参数如果是加密的(如 Base64 编码),Hamibot 无法自动解密。
  • Hamibot 不支持直接读取内存数据或网络请求数据,只能通过 UI 元素、Activity 名称或 Intent 构造进行操作。
  • 如果你需要更深入地分析页面参数,建议使用抓包工具(如 Charles/Fiddler)或逆向分析工具(如 jadx)查看目标 App 的逻辑。

总结

方法 是否推荐 说明
使用 ADB 获取 Intent 参数 ✅ 推荐 可以获得原始参数
文本识别判断页面 ✅ 推荐 适用于参数显示在界面上
构造 Intent 启动页面 ✅ 推荐 自动化跳转必备
直接读取内存参数 ❌ 不支持 Hamibot 无此能力

如果你需要处理复杂的参数解析或加密逻辑,建议点击【更多】→【创建脚本工单】联系开发者协助。

ℹ️ 本回答由 AI 生成,内容仅供参考