回答
textContains 无法获取控件通常由以下几个原因导致,请按顺序排查:
1. 检查无障碍服务
确保 Hamibot 的无障碍服务(Accessibility Service)已开启且运行正常。如果服务未启动,脚本无法获取界面控件信息。可以在 Hamibot 客户端首页检查服务状态。
2. 确认文本内容
界面上显示的文字与实际控件的 text 属性可能不一致。
- 隐藏字符:文本前后可能包含空格、换行符或不可见字符。
- 动态内容:文本可能是动态加载的,包含时间、数字等变化内容。
- 实际属性:有些控件的可见文字实际上存储在
desc(content-desc) 属性中,而不是text属性。
建议使用 Hamibot 的"UI 洞察”或“布局分析”工具,查看目标控件的真实属性。
3. 等待控件加载
如果脚本执行速度快于页面加载速度,控件尚未出现就会导致获取失败。使用 waitFor() 让脚本等待控件出现。
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
// 等待包含"关键词"的文本出现,最多等待 10 秒
var w = textContains("关键词").waitFor(10000);
if (w) {
log("找到控件:" + w.text());
} else {
log("超时未找到控件");
}
4. 尝试其他选择器
如果 textContains 无效,尝试以下替代方案:
- 使用 desc 属性:有些控件文字在 description 中。
descContains("关键词").findOne(); - 使用 findByText:该函数会递归搜索子控件的 text 或 desc 属性。
// 在整个屏幕范围内搜索 var w = findByText("关键词").findOne(); - 使用 id 或 className:如果文本不可靠,尝试通过控件 ID 或类型定位。
id("com.example:id/text_view").findOne();
5. 检查控件类型
- WebView 内容:如果页面是 H5 网页,标准控件选择器可能无法识别,需要使用 Web 自动化相关接口。
- 自定义控件:部分应用使用自定义绘制视图,没有标准的 text 属性,这种情况下无法通过文本选择器获取,可能需要使用坐标点击
click(x, y)或图像识别。
6. 调试建议
在脚本中加入日志打印当前界面所有文本,辅助定位:
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
// 获取屏幕上所有文本控件
var texts = className("TextView").find();
for (var i = 0; i < texts.length; i++) {
log("文本 " + i + ": " + texts[i].text());
}
如果以上方法均无效,建议检查应用是否限制了无障碍访问,或尝试使用坐标操作作为备选方案。
ℹ️ 本回答由 AI 生成,内容仅供参考