打开云闪付以后,首页有一个搜索框,先要点击输入框输入开户宝后,点击搜索按钮
输入框的组件是TextView

已存档
HAMI_8721267164 · 10 天前
第 1 条补充
·
10 天前

如何触发 press 按钮,点击搜索功能

第 2 条补充
·
9 天前

打开云闪付
找到输入框
输入开户宝
点击搜索按钮

回答

Hamibot AI
1
· 10 天前

文档地址 https://docs.hamibot.com/
// 启动云闪付应用
app.launch('com.unionpay');

// 等待一段时间,确保页面完全加载
sleep(3000);

// 尝试通过文本或控件类型找到搜索输入框(虽然显示为TextView,但实际可点击输入的可能是EditText)
// 但根据你的描述,输入框组件是 TextView,可能是外层容器。我们尝试找可点击的输入区域
var inputBox = className('TextView').textContains('搜索').clickable(true).findOne(5000);
if (inputBox) {
inputBox.click();
} else {
// 如果找不到带“搜索”字样的,则尝试找其他可能的输入框
var inputBox = className('TextView').clickable(true).focusable(true).findOne(5000);
if (inputBox) {
inputBox.click();
} else {
toast('未找到搜索输入框');
exit();
}
}

// 等待输入法弹出或页面切换到输入状态
sleep(2000);

// 使用 setText 方法直接设置文本(需要获取到可编辑控件)
// 上面点击后,可能焦点已进入输入框,此时可以通过控件查找输入框并输入内容
var editText = className('EditText').findOne(1000);
if (editText) {
editText.setText('开户宝');
} else {
// 若无法通过 EditText 找到,则使用通用文本输入方式
setText('开户宝');
}

// 查找并点击搜索按钮
var searchBtn = text('搜索').clickable(true).findOne(2000);
if (searchBtn) {
searchBtn.click();
} else {
// 尝试通过 ID 或其他特征查找搜索按钮
var searchBtn = id('search_btn').className('android.widget.Button').findOne(2000);
if (searchBtn) {
searchBtn.click();
} else {
toast('未找到搜索按钮');
exit();
}
}


补充回答 1

文档地址 https://docs.hamibot.com/
在 Android 中,"press" 通常指的是软键盘上的“搜索”或“回车”按钮。当输入法弹出时,点击该按钮会触发搜索行为。

你可以使用 press 函数来模拟按下软键盘上的特定按键。对于搜索场景,常见的操作是调用:

press("search");

这会触发当前输入法的“搜索”键(IME_ACTION_SEARCH),许多应用(如云闪付)会监听此事件并执行搜索逻辑。

完整示例流程如下:

// 启动云闪付
app.launch('com.unionpay');
sleep(3000);

// 点击搜索输入框
if (className('TextView').textContains('搜索').clickable(true).findOne(5000)) {
    className('TextView').textContains('搜索').clickable(true).click();
} else {
    toast('未找到搜索框');
    exit();
}

sleep(2000);

// 输入文本
setText('开户宝');

// 触发软键盘上的“搜索”按钮
press("search");

支持的 press 按钮类型包括:

  • "back":返回键
  • "home":主屏幕键
  • "recent":最近任务键
  • "search":搜索键(常用于软键盘确认)
  • "enter""done":回车/完成键

⚠️ 注意:press("search") 是否生效取决于目标应用是否正确处理了 IME 的搜索事件。如果无效,可改用查找页面上的“搜索”按钮并点击:

text('搜索').clickable(true).findOnce() && text('搜索').click();

建议优先尝试 press("search"),若不生效则退回到 UI 查找方式。


补充回答 2

你可以使用 Hamibot 编写自动化脚本来实现打开云闪付、输入内容并搜索的操作。以下是一个基本的示例脚本,使用了 Hamibot 的无障碍服务和控件操作功能。

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

// 启动云闪付应用
app.launch('com.unionpay');
sleep(3000); // 等待应用启动

// 尝试找到输入框并输入“开户宝”
var input = className('EditText').findOnce();
if (input) {
    input.setText('开户宝');
    toast('已输入“开户宝”');
} else {
    toast('未找到输入框');
    exit();
}

sleep(1000);

// 尝试点击搜索按钮
var searchBtn = text('搜索').findOnce() || id('search_btn').findOnce();
if (searchBtn) {
    searchBtn.click();
    toast('已点击搜索按钮');
} else {
    toast('未找到搜索按钮');
}

说明:

  • app.launch('com.unionpay'):通过包名启动云闪付 App。
  • className('EditText').findOnce():查找页面中的输入框(通常是 EditText 类型)。
  • setText('开户宝'):向输入框中输入指定文本。
  • 查找“搜索”按钮时优先通过文本或 ID 匹配,可根据实际界面调整选择器。
  • 使用 sleep() 给页面留出加载时间。

注意事项:

  1. 不同版本的云闪付界面可能不同,你需要根据实际 UI 调整控件的选择条件(如 text, id, className 等)。
  2. 建议在编写脚本前开启 Hamibot 的“UI 识别”功能,使用“悬浮窗检查”工具查看目标控件的具体属性。
  3. 请确保已授予 Hamibot 无障碍权限和相应的弹出窗口权限。

如果需要更稳定的匹配逻辑,可以结合多个条件进行筛选,例如:

var input = className('EditText').textContains('请输入').findOnce();

如果你遇到特定问题(如控件无法点击、找不到元素),建议使用 Hamibot 内置的“录制”或“脚本生成”辅助工具来定位元素。

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