hamibot 脚本支持测试某个app切换页面吗?如何操作
那如何获得想要页面的路径呢,如何通过hamibot获得到,比如微信小程序商品页,订单确认页面
hamibot能获得测试app当前页面的参数吗 微信小程序参数未加密
回答
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 对象时,可以指定
packageName
和className
来打开特定页面。
示例:
// 打开微信的设置页面
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("成功切换到设置页面");
注意事项
-
权限要求:
- 确保 Hamibot 的「无障碍服务权限」已开启。
- 如果测试涉及敏感操作,可能还需要设备 Root 权限。
-
Activity 名称获取:
- 可以使用工具如 Activity Monitor 获取目标 App 的 Activity 名称。
通过以上方法,你可以轻松地在 Hamibot 脚本中测试 App 的页面切换行为。
补充回答 1
你可以通过以下几种方式获取目标页面(如微信小程序商品页、订单确认页)的路径信息,用于 Hamibot 脚本中的 Intent
或 Activity
判断:
✅ 方法一:使用 AccessibilityService 获取当前页面信息
Hamibot 提供了全局对象 currentActivity()
和 currentPackage()
来获取当前正在运行的应用包名和 Activity 名。
示例代码:
// 打印当前应用的包名和 Activity
log("当前包名: " + currentPackage());
log("当前页面: " + currentActivity());
// 可以配合 UI 检测来判断是否进入目标页面
if (currentActivity() == "com.tencent.mm.plugin.product.ui.MallProductUI") {
toast("已进入商品详情页");
}
✅ 方法二:手动操作 App 并记录页面路径
你可以在手机上手动打开目标页面(例如微信小程序的商品页),然后使用 Hamibot 的 API 记录当前页面信息。
步骤如下:
- 在 Hamibot 中运行以下脚本:
auto.waitFor();
// 每隔 1 秒打印一次当前页面信息
setInterval(() => {
log("包名: " + currentPackage());
log("页面: " + currentActivity());
}, 1000);
- 手动操作微信进入目标页面(如商品页、订单页等)。
- 查看日志输出,记录下对应的
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 数据(需电脑)
- 连接设备并打开目标页面(如微信小程序商品页)。
- 执行以下命令抓取当前 Activity 的 Intent 信息:
adb shell dumpsys activity top
- 在输出中查找
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 无此能力 |
如果你需要处理复杂的参数解析或加密逻辑,建议点击【更多】→【创建脚本工单】联系开发者协助。