butubb
34a03db1b9
feat(条件判断): 支持「选中元素 → 拿它的文本和设定的值比」(等于/不等于/包含/不包含)
需求原话:条件判断需要能选择元素,比如我设置了一个抖音号,让它采集这个元素的
文本和我设的值做条件判断。
原来的条件判断只会判「元素在不在」(找到走 then、没找到走 else),没法判"内容对不对"。
现在加两个可选参数:
- `cmp_op`:等于 / 不等于 / 包含 / 不包含(`==`/`!=`/`contains` 这类别名也认);
留空 = 老行为,**完全向后兼容**(现有任务不用改)。
- `cmp_value`:要比对的值。
填了就变成:先按选择器取到元素文本 → 和 cmp_value 比 → 比对结果才是命中与否。
用户那个例子就是:元素 `com.ss.android.ugc.aweme:id/506` 的文本是
`抖音号:35377983067`,选「包含」、值填 `35377983067` 即可;
要抓"登录的不是这个号"就用「不等于」。
- 读取只走 `get_text()`(只读,2 秒超时),不点击、不改状态。
- **两条防误判规则**(都写进文档了):
· 元素**没找到**时一律算未命中(走 else)——"没读到"绝不能被当成"和我设的不一样",
否则界面还没加载出来就会误判成"账号被换了";
· 元素在但文本为空时按空文本参与比对(用于抓"栏位是空的"),日志会打出实际读到的值。
- 比对**不污染「选择器健康」统计**:统计用的仍是"元素在不在"——"找到了但值不对"
是条件按预期走了 else,不是选择器失效,不该攒出「连续未命中」告警。
- 支持比对的类型:所有元素类选择器 + `foreground`(比前台包名)+ `ocr`(比 OCR 命中的那段字)。
`screen`(亮/熄)没有文本可比,设了会忽略并告警。
- 前端:条件判断面板多一块「文本比对」(运算符下拉 + 比对的值),
只在元素/OCR/前台App 条件下出现;保存前校验"选了运算符却没填值"和"screen 上设了比对"。
- AI 建任务草稿校验(`core/task_draft.py`)同步拦"运算符拼错""有运算符没值"——
执行器对认不出的运算符是"一律不命中",不拦就会变成悄悄走 else。
自测:比对函数 16 项(含别名、空值、None、拼错运算符)、`_exec_if_el` 全分支 20 项
(含"没找到+不等于"这个关键边界、健康统计用存在性、screen 忽略比对、u2 抛异常不炸)、
**真机验证**(cs1 上真读一个 TextView 的文本再比对:包含/等于/不等于 全对,
元素不存在时不误判)、草稿校验 5 项、GET 路由冒烟 55 个 0 个 500。
(测试里踩到一个坑记一笔:u2 的 `XPathSelector.exists` 是纯 bool 属性,而
`UiObject.exists` 是"可调用的 Exists 对象"(`bool()` 即时判断、`exists(timeout=)` 带等待),
两套语义不能想当然统一——单测的假设备一开始没模拟对,是测试写错了不是代码写错了。)
2026-09-24 09:22:32 +08:00
..
2026-09-10 21:43:08 +08:00
2026-09-10 21:43:08 +08:00
2026-08-30 10:57:07 +08:00
2026-09-15 13:55:14 +08:00
2026-08-20 10:51:54 +08:00
2026-09-13 10:38:13 +08:00
2026-09-24 08:37:42 +08:00
2026-09-15 13:55:14 +08:00
2026-09-24 08:55:10 +08:00
2026-09-16 08:58:43 +08:00
2026-09-20 15:04:21 +08:00
2026-09-16 12:39:47 +08:00
2026-09-16 08:58:43 +08:00
2026-09-16 08:58:43 +08:00
2026-09-24 09:17:15 +08:00
2026-09-24 08:37:42 +08:00
2026-09-04 14:33:28 +08:00
2026-09-16 13:02:40 +08:00
2026-08-15 15:22:55 +08:00
2026-09-20 14:32:35 +08:00
2026-09-16 08:58:43 +08:00
2026-09-16 08:58:43 +08:00
2026-08-11 09:06:59 +08:00
2026-09-24 09:22:32 +08:00
2026-09-24 08:37:42 +08:00
2026-09-16 13:02:40 +08:00
2026-09-14 08:14:11 +08:00