pageqa 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -8
- package/dist/agent.d.ts +1 -1
- package/dist/agent.js +27 -9
- package/dist/agent.js.map +1 -1
- package/dist/bsk/tools.d.ts +27 -1
- package/dist/bsk/tools.js +133 -24
- package/dist/bsk/tools.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/locator.d.ts +14 -0
- package/dist/locator.js +15 -7
- package/dist/locator.js.map +1 -1
- package/dist/record.d.ts +2 -11
- package/dist/record.js +4 -5
- package/dist/record.js.map +1 -1
- package/dist/replay.js +9 -7
- package/dist/replay.js.map +1 -1
- package/dist/report.d.ts +10 -3
- package/dist/report.js +13 -4
- package/dist/report.js.map +1 -1
- package/dist/snapshot.d.ts +15 -0
- package/dist/snapshot.js +167 -0
- package/dist/snapshot.js.map +1 -0
- package/examples/smoke-test-page.html +531 -0
- package/examples/smoke-test.md +43 -0
- package/examples/smoke-test.replay.json +389 -0
- package/package.json +5 -3
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
{
|
|
2
|
+
"format": "pageqa-replay",
|
|
3
|
+
"version": 1,
|
|
4
|
+
"recordedAt": "2026-09-21T07:09:53.436Z",
|
|
5
|
+
"source": {
|
|
6
|
+
"path": "examples/smoke-test.md",
|
|
7
|
+
"hash": "70fcc09fbb6d42fa"
|
|
8
|
+
},
|
|
9
|
+
"scenarios": [
|
|
10
|
+
{
|
|
11
|
+
"name": "路由切换测试",
|
|
12
|
+
"caseSteps": [
|
|
13
|
+
"打开 `http://localhost:18888/smoke-test-page.html` 并断言页面标题包含 冒烟测试页面",
|
|
14
|
+
"点击页面上的「表单页面 1」链接,等待页面路由切换",
|
|
15
|
+
"断言页面中已出现表单内容",
|
|
16
|
+
"点击页面上的「文件上传」链接,等待页面路由切换",
|
|
17
|
+
"断言页面中已出现文件上传相关内容"
|
|
18
|
+
],
|
|
19
|
+
"steps": [
|
|
20
|
+
{
|
|
21
|
+
"kind": "navigate",
|
|
22
|
+
"step": 1,
|
|
23
|
+
"url": "http://localhost:18888/smoke-test-page.html"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"kind": "assert_text",
|
|
27
|
+
"step": 1,
|
|
28
|
+
"expectation": "冒烟测试页面"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"kind": "click",
|
|
32
|
+
"step": 2,
|
|
33
|
+
"target": "@e2",
|
|
34
|
+
"locator": {
|
|
35
|
+
"role": "link",
|
|
36
|
+
"name": "表单页面 1",
|
|
37
|
+
"nth": 0,
|
|
38
|
+
"target": "@e2",
|
|
39
|
+
"path": [
|
|
40
|
+
"RootWebArea \"冒烟测试页面\""
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"kind": "wait",
|
|
46
|
+
"step": 2,
|
|
47
|
+
"ms": 1000
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"kind": "assert_text",
|
|
51
|
+
"step": 3,
|
|
52
|
+
"expectation": "姓名"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"kind": "click",
|
|
56
|
+
"step": 4,
|
|
57
|
+
"target": "@e4",
|
|
58
|
+
"locator": {
|
|
59
|
+
"role": "link",
|
|
60
|
+
"name": "文件上传",
|
|
61
|
+
"nth": 0,
|
|
62
|
+
"target": "@e4",
|
|
63
|
+
"path": [
|
|
64
|
+
"RootWebArea \"冒烟测试页面\""
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"kind": "wait",
|
|
70
|
+
"step": 4,
|
|
71
|
+
"ms": 1000
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"kind": "assert_text",
|
|
75
|
+
"step": 5,
|
|
76
|
+
"expectation": "选择文件"
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"name": "表单填写测试",
|
|
82
|
+
"caseSteps": [
|
|
83
|
+
"打开 `http://localhost:18888/smoke-test-page.html`",
|
|
84
|
+
"点击「表单页面 1」链接",
|
|
85
|
+
"在「姓名」输入框填写 `张三`",
|
|
86
|
+
"点击「城市」下拉框,在展开的选项中点击选择 `北京`",
|
|
87
|
+
"在「性别」中选择 `男`",
|
|
88
|
+
"在「出生日期」输入框填写 `1990-01-01`",
|
|
89
|
+
"点击「提交表单」按钮",
|
|
90
|
+
"等待 1 秒,让表单提交完成",
|
|
91
|
+
"断言页面中已出现成功消息"
|
|
92
|
+
],
|
|
93
|
+
"steps": [
|
|
94
|
+
{
|
|
95
|
+
"kind": "navigate",
|
|
96
|
+
"step": 1,
|
|
97
|
+
"url": "http://localhost:18888/smoke-test-page.html"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"kind": "click",
|
|
101
|
+
"step": 2,
|
|
102
|
+
"target": "@e2",
|
|
103
|
+
"locator": {
|
|
104
|
+
"role": "link",
|
|
105
|
+
"name": "表单页面 1",
|
|
106
|
+
"nth": 0,
|
|
107
|
+
"target": "@e2",
|
|
108
|
+
"path": [
|
|
109
|
+
"RootWebArea \"冒烟测试页面\""
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"kind": "fill",
|
|
115
|
+
"step": 3,
|
|
116
|
+
"target": "@e5",
|
|
117
|
+
"value": "张三",
|
|
118
|
+
"locator": {
|
|
119
|
+
"role": "textbox",
|
|
120
|
+
"name": "姓名 *",
|
|
121
|
+
"nth": 0,
|
|
122
|
+
"target": "@e5",
|
|
123
|
+
"path": [
|
|
124
|
+
"RootWebArea \"冒烟测试页面\"",
|
|
125
|
+
"main \"表单页面 1 姓名 * 城市 * 请选择城市 兴趣爱好 性别 * 出生日期 *\"",
|
|
126
|
+
"form \"姓名 * 城市 * 请选择城市 兴趣爱好 性别 * 出生日期 *\""
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"kind": "click",
|
|
132
|
+
"step": 4,
|
|
133
|
+
"target": "@e6",
|
|
134
|
+
"locator": {
|
|
135
|
+
"role": "button",
|
|
136
|
+
"name": "请选择城市",
|
|
137
|
+
"nth": 0,
|
|
138
|
+
"target": "@e6",
|
|
139
|
+
"path": [
|
|
140
|
+
"RootWebArea \"冒烟测试页面\"",
|
|
141
|
+
"main \"表单页面 1 姓名 * 城市 * 请选择城市 兴趣爱好 性别 * 出生日期 *\"",
|
|
142
|
+
"form \"姓名 * 城市 * 请选择城市 兴趣爱好 性别 * 出生日期 *\""
|
|
143
|
+
]
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"kind": "click",
|
|
148
|
+
"step": 4,
|
|
149
|
+
"target": "@e7",
|
|
150
|
+
"locator": {
|
|
151
|
+
"role": "button",
|
|
152
|
+
"name": "北京",
|
|
153
|
+
"nth": 0,
|
|
154
|
+
"target": "@e7",
|
|
155
|
+
"path": [
|
|
156
|
+
"RootWebArea \"冒烟测试页面\"",
|
|
157
|
+
"main \"表单页面 1 姓名 * 城市 * 请选择城市 北京 上海 广州 深圳 兴趣爱好 性别 * 出生日期 *\"",
|
|
158
|
+
"form \"姓名 * 城市 * 请选择城市 北京 上海 广州 深圳 兴趣爱好 性别 * 出生日期 *\""
|
|
159
|
+
]
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"kind": "click",
|
|
164
|
+
"step": 5,
|
|
165
|
+
"target": "@e11",
|
|
166
|
+
"locator": {
|
|
167
|
+
"role": "radio",
|
|
168
|
+
"name": "男",
|
|
169
|
+
"nth": 0,
|
|
170
|
+
"target": "@e11",
|
|
171
|
+
"path": [
|
|
172
|
+
"RootWebArea \"冒烟测试页面\"",
|
|
173
|
+
"main \"表单页面 1 姓名 * 城市 * 北京 兴趣爱好 性别 * 出生日期 *\"",
|
|
174
|
+
"form \"姓名 * 城市 * 北京 兴趣爱好 性别 * 出生日期 *\""
|
|
175
|
+
]
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"kind": "fill",
|
|
180
|
+
"step": 6,
|
|
181
|
+
"target": "@e13",
|
|
182
|
+
"value": "1990-01-01",
|
|
183
|
+
"locator": {
|
|
184
|
+
"role": "textbox",
|
|
185
|
+
"name": "出生日期 *",
|
|
186
|
+
"nth": 0,
|
|
187
|
+
"target": "@e13",
|
|
188
|
+
"path": [
|
|
189
|
+
"RootWebArea \"冒烟测试页面\"",
|
|
190
|
+
"main \"表单页面 1 姓名 * 城市 * 北京 兴趣爱好 性别 * 出生日期 *\"",
|
|
191
|
+
"form \"姓名 * 城市 * 北京 兴趣爱好 性别 * 出生日期 *\""
|
|
192
|
+
]
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"kind": "click",
|
|
197
|
+
"step": 7,
|
|
198
|
+
"target": "@e14",
|
|
199
|
+
"locator": {
|
|
200
|
+
"role": "button",
|
|
201
|
+
"name": "提交表单",
|
|
202
|
+
"nth": 0,
|
|
203
|
+
"target": "@e14",
|
|
204
|
+
"path": [
|
|
205
|
+
"RootWebArea \"冒烟测试页面\"",
|
|
206
|
+
"main \"表单页面 1 姓名 * 城市 * 北京 兴趣爱好 性别 * 出生日期 *\"",
|
|
207
|
+
"form \"姓名 * 城市 * 北京 兴趣爱好 性别 * 出生日期 *\""
|
|
208
|
+
]
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"kind": "wait",
|
|
213
|
+
"step": 8,
|
|
214
|
+
"ms": 1000
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"kind": "assert_text",
|
|
218
|
+
"step": 9,
|
|
219
|
+
"expectation": "表单提交成功!"
|
|
220
|
+
}
|
|
221
|
+
]
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"name": "表单页面 2 测试",
|
|
225
|
+
"caseSteps": [
|
|
226
|
+
"打开 `http://localhost:18888/smoke-test-page.html`",
|
|
227
|
+
"点击「表单页面 2」链接",
|
|
228
|
+
"在「邮箱」输入框填写 `test@example.com`",
|
|
229
|
+
"点击「职业」下拉框,在展开的选项中点击选择 `工程师`",
|
|
230
|
+
"点击「提交表单」按钮",
|
|
231
|
+
"等待 1 秒,让表单提交完成",
|
|
232
|
+
"断言页面中已出现成功消息"
|
|
233
|
+
],
|
|
234
|
+
"steps": [
|
|
235
|
+
{
|
|
236
|
+
"kind": "navigate",
|
|
237
|
+
"step": 1,
|
|
238
|
+
"url": "http://localhost:18888/smoke-test-page.html"
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"kind": "click",
|
|
242
|
+
"step": 2,
|
|
243
|
+
"target": "@e3",
|
|
244
|
+
"locator": {
|
|
245
|
+
"role": "link",
|
|
246
|
+
"name": "表单页面 2",
|
|
247
|
+
"nth": 0,
|
|
248
|
+
"target": "@e3",
|
|
249
|
+
"path": [
|
|
250
|
+
"RootWebArea \"冒烟测试页面\""
|
|
251
|
+
]
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"kind": "fill",
|
|
256
|
+
"step": 3,
|
|
257
|
+
"target": "@e5",
|
|
258
|
+
"value": "test@example.com",
|
|
259
|
+
"locator": {
|
|
260
|
+
"role": "textbox",
|
|
261
|
+
"name": "邮箱 *",
|
|
262
|
+
"nth": 0,
|
|
263
|
+
"target": "@e5",
|
|
264
|
+
"path": [
|
|
265
|
+
"RootWebArea \"冒烟测试页面\"",
|
|
266
|
+
"main \"表单页面 2 邮箱 * 职业 * 请选择职业\"",
|
|
267
|
+
"form \"邮箱 * 职业 * 请选择职业\""
|
|
268
|
+
]
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"kind": "click",
|
|
273
|
+
"step": 4,
|
|
274
|
+
"target": "@e6",
|
|
275
|
+
"locator": {
|
|
276
|
+
"role": "button",
|
|
277
|
+
"name": "请选择职业",
|
|
278
|
+
"nth": 0,
|
|
279
|
+
"target": "@e6",
|
|
280
|
+
"path": [
|
|
281
|
+
"RootWebArea \"冒烟测试页面\"",
|
|
282
|
+
"main \"表单页面 2 邮箱 * 职业 * 请选择职业\"",
|
|
283
|
+
"form \"邮箱 * 职业 * 请选择职业\""
|
|
284
|
+
]
|
|
285
|
+
}
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
"kind": "click",
|
|
289
|
+
"step": 4,
|
|
290
|
+
"target": "@e8",
|
|
291
|
+
"locator": {
|
|
292
|
+
"role": "button",
|
|
293
|
+
"name": "工程师",
|
|
294
|
+
"nth": 0,
|
|
295
|
+
"target": "@e8",
|
|
296
|
+
"path": [
|
|
297
|
+
"RootWebArea \"冒烟测试页面\"",
|
|
298
|
+
"main \"表单页面 2 邮箱 * 职业 * 请选择职业 学生 工程师 设计师 产品经理\"",
|
|
299
|
+
"form \"邮箱 * 职业 * 请选择职业 学生 工程师 设计师 产品经理\""
|
|
300
|
+
]
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
"kind": "click",
|
|
305
|
+
"step": 5,
|
|
306
|
+
"target": "@e7",
|
|
307
|
+
"locator": {
|
|
308
|
+
"role": "button",
|
|
309
|
+
"name": "提交表单",
|
|
310
|
+
"nth": 0,
|
|
311
|
+
"target": "@e7",
|
|
312
|
+
"path": [
|
|
313
|
+
"RootWebArea \"冒烟测试页面\"",
|
|
314
|
+
"main \"表单页面 2 邮箱 * 职业 * 工程师\"",
|
|
315
|
+
"form \"邮箱 * 职业 * 工程师\""
|
|
316
|
+
]
|
|
317
|
+
}
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
"kind": "wait",
|
|
321
|
+
"step": 6,
|
|
322
|
+
"ms": 1000
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
"kind": "assert_text",
|
|
326
|
+
"step": 7,
|
|
327
|
+
"expectation": "表单提交成功!"
|
|
328
|
+
}
|
|
329
|
+
]
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
"name": "文件上传测试",
|
|
333
|
+
"caseSteps": [
|
|
334
|
+
"打开 `http://localhost:18888/smoke-test-page.html`",
|
|
335
|
+
"点击「文件上传」链接",
|
|
336
|
+
"点击「选择文件」按钮并上传本地文件 `D:\\1project\\page-test-agent\\examples\\smoke-test.md`",
|
|
337
|
+
"等待 1 秒,让文件列表完成渲染",
|
|
338
|
+
"断言页面中已出现上传的文件名"
|
|
339
|
+
],
|
|
340
|
+
"steps": [
|
|
341
|
+
{
|
|
342
|
+
"kind": "navigate",
|
|
343
|
+
"step": 1,
|
|
344
|
+
"url": "http://localhost:18888/smoke-test-page.html"
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
"kind": "click",
|
|
348
|
+
"step": 2,
|
|
349
|
+
"target": "@e4",
|
|
350
|
+
"locator": {
|
|
351
|
+
"role": "link",
|
|
352
|
+
"name": "文件上传",
|
|
353
|
+
"nth": 0,
|
|
354
|
+
"target": "@e4",
|
|
355
|
+
"path": [
|
|
356
|
+
"RootWebArea \"冒烟测试页面\""
|
|
357
|
+
]
|
|
358
|
+
}
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
"kind": "upload",
|
|
362
|
+
"step": 3,
|
|
363
|
+
"file": "D:\\1project\\page-test-agent\\examples\\smoke-test.md",
|
|
364
|
+
"target": "@e5",
|
|
365
|
+
"locator": {
|
|
366
|
+
"role": "button",
|
|
367
|
+
"name": "选择文件",
|
|
368
|
+
"nth": 0,
|
|
369
|
+
"target": "@e5",
|
|
370
|
+
"path": [
|
|
371
|
+
"RootWebArea \"冒烟测试页面\"",
|
|
372
|
+
"main \"文件上传 选择文件 尚未选择文件\""
|
|
373
|
+
]
|
|
374
|
+
}
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
"kind": "wait",
|
|
378
|
+
"step": 4,
|
|
379
|
+
"ms": 1000
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
"kind": "assert_text",
|
|
383
|
+
"step": 5,
|
|
384
|
+
"expectation": "smoke-test.md"
|
|
385
|
+
}
|
|
386
|
+
]
|
|
387
|
+
}
|
|
388
|
+
]
|
|
389
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pageqa",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/klren0312/pageqa.git"
|
|
@@ -16,8 +16,9 @@
|
|
|
16
16
|
"start": "node dist/index.js",
|
|
17
17
|
"pretest": "npm run build",
|
|
18
18
|
"test": "node --test tests/smoke.test.mjs",
|
|
19
|
-
"test:unit": "npm run build && node --test tests/report.test.mjs tests/replay.test.mjs",
|
|
20
|
-
"prepublishOnly": "npm run build"
|
|
19
|
+
"test:unit": "npm run build && node --test tests/report.test.mjs tests/replay.test.mjs tests/snapshot.test.mjs",
|
|
20
|
+
"prepublishOnly": "npm run build",
|
|
21
|
+
"serve:smoke": "serve -l 18888 examples"
|
|
21
22
|
},
|
|
22
23
|
"files": [
|
|
23
24
|
"dist",
|
|
@@ -43,6 +44,7 @@
|
|
|
43
44
|
},
|
|
44
45
|
"devDependencies": {
|
|
45
46
|
"@types/node": "^20.0.0",
|
|
47
|
+
"serve": "^14.2.0",
|
|
46
48
|
"typescript": "^5.5.0"
|
|
47
49
|
}
|
|
48
50
|
}
|