Skip to content

Commit e04862e

Browse files
committed
v10.3 Phase1-3: 项目隔离(去全部项目)+平台全称显示+Tooltip分区+平台前置检查+设备连接检测+多平台API
1 parent d6f8b0b commit e04862e

4 files changed

Lines changed: 404 additions & 101 deletions

File tree

Untitled

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
我对你需求的理解(请你确认)
2+
A. 项目选择层
3+
不要“全部项目”这个选项。
4+
项目必须是独立边界,不应跨项目批跑。
5+
下拉只显示“单个项目列表”,用户一次只选一个项目。
6+
项目显示名用:项目全名 + 平台全称(不简写)。
7+
B. 项目命名显示规则
8+
你希望类似:
9+
甲项目(Web)
10+
乙项目(Windows桌面)
11+
丙项目(Android)
12+
丁项目(iOS)
13+
戊项目(微信小程序)
14+
即:不使用 W / 小图标简写,直接中文全称,清晰第一。
15+
C. 全局蓝本与局部蓝本
16+
“全局蓝本”仅作用于当前项目,表示“测试本项目下全部蓝本”。
17+
勾选全局后,局部蓝本禁用是可以的,但提示文案要更智能:
18+
鼠标在复选框区域:显示“已启用全局,如需局部请选择先取消全局”
19+
鼠标在蓝本内容描述区域:仍显示该蓝本的功能说明(不是一刀切覆盖)
20+
D. 设备连接提示(重点)
21+
当项目平台需要设备时,系统应主动引导:
22+
选中 Android/iOS 项目:提示先连接手机(并展示连接状态)
23+
未连接时禁止开始测试,给明确原因
24+
已连接时显示“设备已连接,可开始测试”
25+
小程序项目要提示“微信开发者工具/automator状态”
26+
你问的“现在命名规则是什么?”(当前现状)
27+
你现在看到的行为是:
28+
下拉里有一个默认项:全部项目(N个蓝本)
29+
各项目项目前面带平台图标(🌐 �� 等),后面是蓝本数量
30+
项目名优先取蓝本里的 app_name,没有就取目录名
31+
平台显示是“图标+名称”,不是你要的“全称平台文字”
32+
所以你感觉“不直观、会混项目”,这个判断完全正确。
33+
我给你的最中肯建议(产品/工程都稳)
34+
方案原则(建议你定为产品规范)
35+
项目隔离优先:永不跨项目批跑(去掉“全部项目”)
36+
平台透明优先:显示全称平台,不用缩写
37+
运行前置检查优先:先检查环境,再允许点击“开始测试”
38+
提示分层优先:操作提示与内容提示分离,不互相覆盖
39+
平台显示标准(建议定稿)
40+
统一平台标签(全称):
41+
Web
42+
Windows桌面
43+
Android
44+
iOS
45+
微信小程序
46+
项目显示格式建议:
47+
{项目名}({平台全称})
48+
示例:FreshMart 生鲜超市(微信小程序)
49+
“开始测试”前的专业引导流(强烈建议)
50+
1) Web / Windows桌面
51+
检查引擎连接 + 蓝本可用即可。
52+
未通过:按钮置灰 + 原因提示。
53+
2) Android / iOS
54+
增加“设备状态行”:
55+
未检测 / 未连接 / 已连接(设备名)
56+
未连接:
57+
“开始测试”置灰
58+
给动作提示:“请先连接设备并点击‘检测设备’”
59+
已连接:
60+
显示绿色状态
61+
允许开始
62+
3) 微信小程序
63+
增加两项状态:
64+
微信开发者工具
65+
automator端口(如 9420)
66+
任一未就绪:禁止开始并提示一键启动建议
67+
都就绪:允许开始
68+
你提的 Tooltip 交互,我建议这样落地(非常合理)
69+
你说得对,应该“按鼠标停留区域显示不同信息”:
70+
悬停在局部蓝本复选框/前导区域:
71+
提示“当前已启用全局蓝本,如需局部选择请先取消全局蓝本”
72+
悬停在蓝本标题/描述内容区域:
73+
始终显示该蓝本的描述、场景数、步骤数、路径
74+
这叫“操作提示”和“内容说明”分离,用户体验会明显更好。
75+
实施计划
76+
Phase 1(信息架构)
77+
删除“全部项目”选项
78+
下拉只保留项目列表
79+
项目文案改为“项目名(平台全称)”
80+
Phase 2(蓝本交互)
81+
全局蓝本仅当前项目内生效
82+
全局勾选时,局部禁用
83+
Tooltip分区:复选框区显示操作提示;内容区显示蓝本详情
84+
Phase 3(平台前置检查)
85+
新增“运行前检查器”(按平台)
86+
Android/iOS:设备连接检测 + 阻断逻辑
87+
小程序:开发者工具 + automator检测 + 阻断逻辑
88+
状态通过后才允许“开始测试”
89+
Phase 4(文案与可视化)
90+
状态文案标准化(未连接/已连接/待处理)
91+
错误提示可执行化(告诉用户下一步做什么)
92+
记录最近一次失败原因(便于重试)

extension/src/engineClient.ts

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,41 @@ export class EngineClient {
123123
return this._get<unknown[]>(`/api/v1/memory/history${qs ? "?" + qs : ""}`);
124124
}
125125

126-
/** 蓝本模式测试(v2.3) */
126+
/** Web 蓝本模式测试 */
127127
async startBlueprintTest(params: {
128128
blueprint_path: string;
129129
base_url?: string;
130130
}): Promise<TestReportResponse> {
131131
return this._post<TestReportResponse>("/api/v1/test/blueprint", params);
132132
}
133133

134+
/** 手机蓝本测试(Android/iOS) */
135+
async startMobileBlueprintTest(params: {
136+
blueprint_path: string;
137+
base_url?: string;
138+
mobile_session_id: string;
139+
}): Promise<TestReportResponse> {
140+
return this._post<TestReportResponse>("/api/v1/test/mobile-blueprint", params);
141+
}
142+
143+
/** 小程序蓝本测试 */
144+
async startMiniprogramBlueprintTest(params: {
145+
blueprint_path: string;
146+
base_url?: string;
147+
project_path?: string;
148+
}): Promise<TestReportResponse> {
149+
return this._post<TestReportResponse>("/api/v1/test/miniprogram-blueprint", params);
150+
}
151+
152+
/** 桌面蓝本测试 */
153+
async startDesktopBlueprintTest(params: {
154+
blueprint_path: string;
155+
base_url?: string;
156+
window_title?: string;
157+
}): Promise<TestReportResponse> {
158+
return this._post<TestReportResponse>("/api/v1/test/desktop-blueprint", params);
159+
}
160+
134161
/** 蓝本自动生成(v10.1) */
135162
async generateBlueprint(params: {
136163
url: string;
@@ -159,6 +186,32 @@ export class EngineClient {
159186
return this._get<TestStatus>("/api/v1/test/status");
160187
}
161188

189+
/** 列出已连接移动设备 */
190+
async listMobileDevices(): Promise<{ devices: Array<Record<string, unknown>>; count: number; error?: string }> {
191+
return this._get<{ devices: Array<Record<string, unknown>>; count: number; error?: string }>("/api/v1/mobile/devices");
192+
}
193+
194+
/** 列出活动移动会话 */
195+
async listMobileSessions(): Promise<{ sessions: Array<Record<string, unknown>>; count: number }> {
196+
return this._get<{ sessions: Array<Record<string, unknown>>; count: number }>("/api/v1/mobile/sessions");
197+
}
198+
199+
/** 创建移动会话 */
200+
async createMobileSession(params: {
201+
device_name?: string;
202+
app_package?: string;
203+
app_activity?: string;
204+
app_path?: string;
205+
permissions?: string[];
206+
} = {}): Promise<{ session_id: string; message: string; device?: Record<string, unknown> }> {
207+
return this._post<{ session_id: string; message: string; device?: Record<string, unknown> }>("/api/v1/mobile/session/create", params);
208+
}
209+
210+
/** 检查小程序开发者工具状态 */
211+
async getMiniprogramDevtoolsStatus(): Promise<{ found: boolean; path?: string; message?: string }> {
212+
return this._get<{ found: boolean; path?: string; message?: string }>("/api/v1/miniprogram/devtools/status");
213+
}
214+
162215
/** 测试控制:暂停/继续/停止(v2.0) */
163216
async controlTest(action: string): Promise<{ action: string; success: boolean; state: string }> {
164217
return this._post<{ action: string; success: boolean; state: string }>(

0 commit comments

Comments
 (0)