文本与描述选择器——text 系列的五种匹配模式
五种文本匹配模式
text("签到"); // 精确匹配:控件 text 属性完全等于「签到」
textContains("签到"); // 包含匹配:text 包含「签到」子串
textStartsWith("签"); // 开头匹配:text 以「签」开头
textEndsWith("到"); // 结尾匹配:text 以「到」结尾
textMatches("签.{0,3}到"); // 正则匹配:text 符合正则表达式
// description 同理
desc("签到按钮");
descContains("签");
descStartsWith("签到");
descMatches(".*签.*");
实战场景
精确匹配 → 点击确认按钮
// 最保险的方式
text("确定").click();
text("允许").click();
text("同意").click();
包含匹配 → 适应文案变化
// APP 可能改成「立即签到」「每日签到」「今日签到」
textContains("签到").click();
正则匹配 → 适配动态文案
// 价格显示是「¥99.00」「¥1,299」,可以统一匹配
textMatches("¥\\d[\\d,]*\\.?\\d*");
文本匹配的陷阱
1. 文案变动(最大问题)
APP 改版可能把「签到」改成「领金币」,所有精确匹配的脚本都会失效。建议:
- 优先用 ID(如果有的话)
- 退而求其次用 textContains 或正则
- 不确定时跑一次布局分析器看当前实际 text
2. 空格和换行
有些控件 text 末尾有不可见空格,或者中间有换行:
// 用正则清理
textMatches("签到\\s*"); // 允许末尾空白
3. 文本 vs description
某些 APP 把按钮文字放在 description 属性里而不是 text:
// 两个都试试
var btn = text("签到").findOne(1000) || desc("签到").findOne(1000);
if (btn) btn.click();
4. 多行文本
如果一个控件的 text 是多行的(比如产品卡片包含标题+副标题),textContains 仍能匹配,但 text 精确匹配会失败。