feat(发布计划): 新增「校验页面」步骤(expect_el)—— 每一步先确认上一步真的完成了
用户要求:"进行每一步的时候先校验上一步有没有完成,比如相册界面肯定有特征,如果没有到相册界面
就出现执行,你看看怎么处理" → 方案 A:新增只做校验、不带副作用的步骤。
· tasks/generic/task.py:新步骤 expect_el
- 参数:特征元素选择器 / timeout(10) / what("在等什么") / on_missing
- on_missing:skip_rest(默认,**跳过本轮剩余步骤** —— 这一条不发、换下一个号) / notify / stop
- 为此加了 worker 级的 `_skip_rest`:_exec_steps 每步前检查,foreach_account 每轮复位
· 骨架:关键点击前各插一个 —— 相册页(//*[@text='所有照片']) → 素材已选中(desc 选择/预览)
→ 剪辑页(desc 文字/话题) → 发布页(含'添加标题'/'添加作品描述') → 发布按钮
· 通知:新增 task.page.mismatch(页面不对,本轮剩余步骤已跳过)
· 昵称选择器改**两版通吃**(实测 A06=40.7.0):xpath 联合
`//*[@resource-id="…:id/tkv"] | //*[@resource-id="…:id/tk+"]`
—— 40.7 是 tkv、40.6 是 tk+,联合在 40.7 上实测能读到名字;.env(dev)已改,切号入口两版同为 desc=切换账号
· 前端:编辑器面板 + 参数表单 + 发布页就地编辑字段表都认 expect_el
· 文档:TASK_DEV §3(27→28 种)+ §4.7("每步先校验上一步")、NOTIFY、research §七·补(40.7.0 对照表
+ 联合 xpath + 各页特征 + "别按坐标点页签"的坑)、.env.example
· 测试:新增 scripts/tests/test_expect_el.py(特征在/不在、三种 on_missing、选择器为空),全套 7 个用例通过
This commit is contained in:
@@ -231,3 +231,32 @@
|
||||
.venv/Scripts/python -c "import uiautomator2 as u2; d=u2.connect('<serial>'); open('me.xml','w',encoding='utf-8').write(d.dump_hierarchy())"
|
||||
# 在 me.xml 里找 text 是昵称、或 content-desc 是「切换账号」的节点,看它的 resource-id
|
||||
```
|
||||
|
||||
### 七·补:40.7.0 的「我」页与发布流程各页(2026-10-12,A06 = 192.168.20.75 实测)
|
||||
|
||||
生产是 40.6 与 40.7 **混装**(9 台 40.7 / 3 台 40.6),两版的混淆 id **不一样**。实测对照:
|
||||
|
||||
| 元素 | 40.6.0(A01) | 40.7.0(A06) |
|
||||
|---|---|---|
|
||||
| **「我」页昵称** | `id/tk+` | **`id/tkv`** |
|
||||
| 切换账号入口 | `desc=切换账号`(id/oxp) | `desc=切换账号`(id/ow_)**同一个 desc ✓** |
|
||||
| 抖音号 | `id/504` | `id/5zk` |
|
||||
| 底部「我」页签 | `desc=我,按钮` | 同样能用 `desc 含我` 命中 ✓ |
|
||||
| 拍摄面板「相册」 | `id/cnv` | `id/cnv` **同 id ✓** |
|
||||
| 相册页 | —— | 标题 `id/tv_title` = **`所有照片`**;页签 全部/视频/图片/动图/人像 |
|
||||
| 选中素材后 | —— | 顶部出现 `desc=选择` / `预览` |
|
||||
| 剪辑页 | —— | `desc=文字`/`话题`/`贴纸`/`特效`/`标记`/`滤镜`(都挂在 `id/iv_icon` 上) |
|
||||
| 发布页 | —— | 标题框 `id/ipv`(hint `添加标题`)、描述框 `id/ia-`(hint `添加作品描述...`) |
|
||||
|
||||
**昵称的"两版通吃"写法(已实测)**:xpath 联合 ——
|
||||
`//*[@resource-id="com.ss.android.ugc.aweme:id/tkv"] | //*[@resource-id="com.ss.android.ugc.aweme:id/tk+"]`
|
||||
在 40.7.0 上 `exists=True` 且 `get_text()` 读到昵称 ✓。**比按版本配两套省事**,写进 `.env` 的
|
||||
`DOUYIN_NAME_SELECTOR_VALUE` 即可(`read_account_name` 与「校验账号」共用它)。
|
||||
|
||||
**为什么 `desc=选择` 这类"页面特征"能当校验**:选素材/进剪辑页这些**没有独立 id 的页面**,
|
||||
靠"这一页特有的文字/描述"判断"我在哪一页",比按坐标/序号稳 —— 这正是「校验页面」(expect_el)
|
||||
要的东西(见 `doc/TASK_DEV.md` §3 第 28 行、§4.7)。
|
||||
|
||||
> ⚠ 走查时踩的坑:**别用坐标点底部页签** —— 我按 (0.876,0.899) 点 A06 的「我」,
|
||||
> 结果进了「抖音音乐榜」(`MusicDetailActivity`)。同一台机器上 `desc 含我` 是好的,
|
||||
> 按 desc 点才是对的(40.6 上坐标碰巧能用,不代表 40.7 也行)。
|
||||
|
||||
Reference in New Issue
Block a user