判据: 管理页设备判据(到期静态判据的第一条升级)+ 修设备判据基建的三个真 bug
`run-all.mjs` 的 `STATIC_ONLY` 里登记着 6 条"只能静态验"的判据,前提是
「本工作区能装、能点设备」。设备现在可用 ⇒ 它们**到期**了(欠账当场变红)。
这一批升级第一条:`harmony-admin`(用户管理页)。
## 一、新设备判据:管理页真的能打开、列表真的渲染
上面 27 条静态判据判的都是逻辑与接线形态。它们全绿时,
"管理页能不能打开、列表能不能渲染"**一句都没验过** —— 而它最容易坏:
路由注册对了但入口没接上、接口回来了但列表没渲染。
判据自己搭现场:拉起应用 → 进「我的」→ 滚到底 → 点「管理」→
断言真的在管理页(出现「新建用户」)且**渲染出用户行**。
## 二、途中撞出三个**判据自身**的 bug(都已修,都写了教训)
1. **`tapText` 从来没成功点过任何东西**(`lib/harmony-device.mjs`)
`findByText` 返回的是**数组**,我当单个节点用了 ⇒ `node.attributes` 恒
`undefined` ⇒ 恒返回 `false`。症状极隐蔽:调用方以为"没找到那个文案",
实际是帮手自己坏了。修:从数组里挑,且**优先挑可点的那个**
(同名文案常常一个可点、一个不可点)。
2. **判据之间互相干扰**(新增 `backToMain`)
每个设备判据都是写操作,会把前台留在它操作完的那一页。`harmony-admin`
把人留在管理页 —— 那是 `pushUrl` 出去的独立 `@Entry` 页,**没有侧栏**
⇒ 后面的 `cross-client-gesture` / `harmony-appearance` 找不到侧栏、
双双 skip(skip 原因写的是"宽屏侧栏找不到",看起来像功能没了)。
`launchOurApp` 解决不了(`aa start` 只切前台,不弹栈)⇒ 新增 `backToMain`。
3. **"找不到元素"要先分清是功能缺失还是判据没摆好现场**
本判据连栽四种形态,每一种都伪装成"功能缺失":
· 锚点文案错(入口是「管理」,我按「用户管理」找 —— 后者只是说明的一部分)
· 元素在滚动下方(dumpLayout 只报可见节点)
· 文字节点不可点(`.onClick` 在包住它的容器上,ArkUI 的常态)
· **滚动步长跨过了它**(诊断打印现场才发现:停在了「系统通知」那一带,
而「管理」只占 ~0.04 屏,一次 0.2 屏的滑动必然越过)
⇒ 最后改成"**先滚到底、再小步回扫**"(只管往前找在不均匀列表上必漏),
并加了 `AGENTMAIL_ADMIN_DEBUG=1` 的诊断入口把现场打出来。
## 三、判据
`run-all.mjs` → `files=32 ran=32 checks=505 pass=505 fail=0 skip=0
red=0 broken=0 unreported=0`(连跑两次稳定)。
`harmony-admin` 27 → 28 条。`hvigorw assembleHap` 成功;前端重建。
**设备实测**:管理页从「我的」页打开,显示「管理 / 用户管理 3 / 新建用户」
与三行用户(jianf 管理员 / gui-lab 用户 / test 用户)。
**仍到期未升级**:`harmony-appearance`(已加 2 条设备判据,但登记里其余部分仍静态)、
`harmony-logic`、`cross-client-theme`、`appearance-defaults`、`harmony-imageprep`
—— 按"每条缺什么设备侧验证"逐条来,不为了消数字而凑。
This commit is contained in:
@ -41,7 +41,7 @@ import { code, prose } from './lib/read.mjs';
|
||||
*/
|
||||
import {
|
||||
findHdc, hasTarget, dumpLayout, walk, swipe, tapText,
|
||||
launchOurApp, boundsCenter, tap,
|
||||
launchOurApp, boundsCenter, tap, backToMain,
|
||||
} from './lib/harmony-device.mjs';
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
@ -278,7 +278,14 @@ test('★ 设备:在网格列上左滑,日历标题真的翻到下一段', a
|
||||
* 这才是设备判据该有的样子(前置条件自己满足,而不是等人摆好)。
|
||||
*/
|
||||
assert.ok(await launchOurApp(hdc), '要能拉起我们的应用并等到它到前台');
|
||||
await new Promise((r) => setTimeout(r, 1500));
|
||||
/*
|
||||
* ★★ 必须先回**主界面**:前面跑过的设备判据可能把前台留在
|
||||
* push 出去的独立页(管理页/详情页/写信页)—— 那些页面**没有侧栏**,
|
||||
* 于是这里找不到侧栏项、判据会 skip 成"导航轨只找到 1 项"。
|
||||
* 那是**判据间干扰**,不是功能缺失(详见 `backToMain` 的注释)。
|
||||
*/
|
||||
assert.ok(await backToMain(hdc), '要能回到主界面(侧栏/底栏可见)');
|
||||
await new Promise((r) => setTimeout(r, 1200));
|
||||
|
||||
/* 切到日历窗格:宽屏点侧栏第 2 项 / 窄屏点底栏「日历」 */
|
||||
const rootA = dumpLayout(hdc);
|
||||
|
||||
Reference in New Issue
Block a user