@testid/antd-testid-runtime 1.0.10 → 1.0.12

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/dist/index.d.mts CHANGED
@@ -327,8 +327,9 @@ declare class TestIdObserver {
327
327
  * 决策优先级:
328
328
  * 0. 已有 data-testid → 跳过
329
329
  * 1. 带 data-test-base-key → 公共组件实例 (锚点定位)
330
- * 2. body 直系浮层根节点 匹配浮层类型 → 独立前缀
331
- * 3. 浮层内部子节点 查找浮层祖先 浮层独立前缀 + 计数器
330
+ * 2. 浮层内部子节点先查祖先,再查自身是否 root
331
+ * (避免嵌套浮层如 el-cascader-panel el-cascader__suggestion-panel 被误判为独立 root)
332
+ * 3. body 直系浮层根节点 → 匹配浮层类型 → 独立前缀
332
333
  * 4. #app 内普通节点 → dynamic
333
334
  */
334
335
  private processSingleNode;
@@ -399,8 +400,8 @@ declare class TestIdObserver {
399
400
  /**
400
401
  * 处理浮层内部子节点 (Modal/Drawer/Dropdown 内的按钮、输入框等)
401
402
  *
402
- * 每个浮层实例独立计数: 以浮层根节点 data-testid 作为隔离 key
403
- * 重复打开相同类型的浮层,子元素 ID 均从 0 重新开始。
403
+ * 同类型浮层的子节点共享全局计数器 (key: popupType_tag)
404
+ * 确保页面上多个同类下拉选择框的下拉选项 testid 全局唯一。
404
405
  *
405
406
  * ID 格式: ${runtimePagePrefix}${popupPrefix}${tag}_${counter}
406
407
  * 例: hall_dynamic_modal_button_0, hall_dynamic_select_div_2
package/dist/index.d.ts CHANGED
@@ -327,8 +327,9 @@ declare class TestIdObserver {
327
327
  * 决策优先级:
328
328
  * 0. 已有 data-testid → 跳过
329
329
  * 1. 带 data-test-base-key → 公共组件实例 (锚点定位)
330
- * 2. body 直系浮层根节点 匹配浮层类型 → 独立前缀
331
- * 3. 浮层内部子节点 查找浮层祖先 浮层独立前缀 + 计数器
330
+ * 2. 浮层内部子节点先查祖先,再查自身是否 root
331
+ * (避免嵌套浮层如 el-cascader-panel el-cascader__suggestion-panel 被误判为独立 root)
332
+ * 3. body 直系浮层根节点 → 匹配浮层类型 → 独立前缀
332
333
  * 4. #app 内普通节点 → dynamic
333
334
  */
334
335
  private processSingleNode;
@@ -399,8 +400,8 @@ declare class TestIdObserver {
399
400
  /**
400
401
  * 处理浮层内部子节点 (Modal/Drawer/Dropdown 内的按钮、输入框等)
401
402
  *
402
- * 每个浮层实例独立计数: 以浮层根节点 data-testid 作为隔离 key
403
- * 重复打开相同类型的浮层,子元素 ID 均从 0 重新开始。
403
+ * 同类型浮层的子节点共享全局计数器 (key: popupType_tag)
404
+ * 确保页面上多个同类下拉选择框的下拉选项 testid 全局唯一。
404
405
  *
405
406
  * ID 格式: ${runtimePagePrefix}${popupPrefix}${tag}_${counter}
406
407
  * 例: hall_dynamic_modal_button_0, hall_dynamic_select_div_2
package/dist/index.js CHANGED
@@ -147,8 +147,10 @@ var popupClassSuffixMap2 = {
147
147
  select: [
148
148
  ["-select-dropdown"],
149
149
  // ElSelect 下拉面板
150
- ["-cascader__suggestion-panel"]
151
- // ElCascader 级联选择器浮层面板
150
+ ["-cascader__suggestion-panel"],
151
+ // ElCascader 浮层 (suggestion 模式)
152
+ ["-cascader-panel"]
153
+ // ElCascader 浮层 (panel 模式 / 低版本)
152
154
  ],
153
155
  datePicker: [
154
156
  ["-picker-panel"],
@@ -410,8 +412,9 @@ var TestIdObserver = class {
410
412
  * 决策优先级:
411
413
  * 0. 已有 data-testid → 跳过
412
414
  * 1. 带 data-test-base-key → 公共组件实例 (锚点定位)
413
- * 2. body 直系浮层根节点 匹配浮层类型 → 独立前缀
414
- * 3. 浮层内部子节点 查找浮层祖先 浮层独立前缀 + 计数器
415
+ * 2. 浮层内部子节点先查祖先,再查自身是否 root
416
+ * (避免嵌套浮层如 el-cascader-panel el-cascader__suggestion-panel 被误判为独立 root)
417
+ * 3. body 直系浮层根节点 → 匹配浮层类型 → 独立前缀
415
418
  * 4. #app 内普通节点 → dynamic
416
419
  */
417
420
  processSingleNode(node) {
@@ -423,16 +426,16 @@ var TestIdObserver = class {
423
426
  this.handleBaseKeyNode(node, baseKey, config);
424
427
  return;
425
428
  }
429
+ const popupAncestor = this.detectPopupAncestor(node);
430
+ if (popupAncestor) {
431
+ this.handlePopupChildNode(node, popupAncestor.type, config);
432
+ return;
433
+ }
426
434
  const popupType = this.detectPopupType(node);
427
435
  if (popupType) {
428
436
  this.handlePopupNode(node, popupType);
429
437
  return;
430
438
  }
431
- const popupAncestor = this.detectPopupAncestor(node);
432
- if (popupAncestor) {
433
- this.handlePopupChildNode(node, popupAncestor.type, popupAncestor.element, config);
434
- return;
435
- }
436
439
  if (this.isInsideApp(node)) {
437
440
  this.handleDynamicNode(node, config);
438
441
  }
@@ -592,19 +595,18 @@ var TestIdObserver = class {
592
595
  /**
593
596
  * 处理浮层内部子节点 (Modal/Drawer/Dropdown 内的按钮、输入框等)
594
597
  *
595
- * 每个浮层实例独立计数: 以浮层根节点 data-testid 作为隔离 key
596
- * 重复打开相同类型的浮层,子元素 ID 均从 0 重新开始。
598
+ * 同类型浮层的子节点共享全局计数器 (key: popupType_tag)
599
+ * 确保页面上多个同类下拉选择框的下拉选项 testid 全局唯一。
597
600
  *
598
601
  * ID 格式: ${runtimePagePrefix}${popupPrefix}${tag}_${counter}
599
602
  * 例: hall_dynamic_modal_button_0, hall_dynamic_select_div_2
600
603
  *
601
604
  * 浮层子元素均为运行时注入,统一使用 runtimePagePrefix 前缀。
602
605
  */
603
- handlePopupChildNode(node, popupType, popupElement, config) {
606
+ handlePopupChildNode(node, popupType, config) {
604
607
  if (config.onlyInteractive && !this.isInteractive(node)) return;
605
608
  const tag = this.getSimpleTag(node);
606
- const popupRootTestId = popupElement.getAttribute("data-testid") || `${popupType}_unknown`;
607
- const key = `${popupRootTestId}_${tag}`;
609
+ const key = `${popupType}_${tag}`;
608
610
  const current = this.state.popupChildCounter.get(key) ?? 0;
609
611
  this.state.popupChildCounter.set(key, current + 1);
610
612
  const popupPrefix = config.popupPrefixMap[popupType] || `${popupType}_`;
package/dist/index.mjs CHANGED
@@ -104,8 +104,10 @@ var popupClassSuffixMap2 = {
104
104
  select: [
105
105
  ["-select-dropdown"],
106
106
  // ElSelect 下拉面板
107
- ["-cascader__suggestion-panel"]
108
- // ElCascader 级联选择器浮层面板
107
+ ["-cascader__suggestion-panel"],
108
+ // ElCascader 浮层 (suggestion 模式)
109
+ ["-cascader-panel"]
110
+ // ElCascader 浮层 (panel 模式 / 低版本)
109
111
  ],
110
112
  datePicker: [
111
113
  ["-picker-panel"],
@@ -367,8 +369,9 @@ var TestIdObserver = class {
367
369
  * 决策优先级:
368
370
  * 0. 已有 data-testid → 跳过
369
371
  * 1. 带 data-test-base-key → 公共组件实例 (锚点定位)
370
- * 2. body 直系浮层根节点 匹配浮层类型 → 独立前缀
371
- * 3. 浮层内部子节点 查找浮层祖先 浮层独立前缀 + 计数器
372
+ * 2. 浮层内部子节点先查祖先,再查自身是否 root
373
+ * (避免嵌套浮层如 el-cascader-panel el-cascader__suggestion-panel 被误判为独立 root)
374
+ * 3. body 直系浮层根节点 → 匹配浮层类型 → 独立前缀
372
375
  * 4. #app 内普通节点 → dynamic
373
376
  */
374
377
  processSingleNode(node) {
@@ -380,16 +383,16 @@ var TestIdObserver = class {
380
383
  this.handleBaseKeyNode(node, baseKey, config);
381
384
  return;
382
385
  }
386
+ const popupAncestor = this.detectPopupAncestor(node);
387
+ if (popupAncestor) {
388
+ this.handlePopupChildNode(node, popupAncestor.type, config);
389
+ return;
390
+ }
383
391
  const popupType = this.detectPopupType(node);
384
392
  if (popupType) {
385
393
  this.handlePopupNode(node, popupType);
386
394
  return;
387
395
  }
388
- const popupAncestor = this.detectPopupAncestor(node);
389
- if (popupAncestor) {
390
- this.handlePopupChildNode(node, popupAncestor.type, popupAncestor.element, config);
391
- return;
392
- }
393
396
  if (this.isInsideApp(node)) {
394
397
  this.handleDynamicNode(node, config);
395
398
  }
@@ -549,19 +552,18 @@ var TestIdObserver = class {
549
552
  /**
550
553
  * 处理浮层内部子节点 (Modal/Drawer/Dropdown 内的按钮、输入框等)
551
554
  *
552
- * 每个浮层实例独立计数: 以浮层根节点 data-testid 作为隔离 key
553
- * 重复打开相同类型的浮层,子元素 ID 均从 0 重新开始。
555
+ * 同类型浮层的子节点共享全局计数器 (key: popupType_tag)
556
+ * 确保页面上多个同类下拉选择框的下拉选项 testid 全局唯一。
554
557
  *
555
558
  * ID 格式: ${runtimePagePrefix}${popupPrefix}${tag}_${counter}
556
559
  * 例: hall_dynamic_modal_button_0, hall_dynamic_select_div_2
557
560
  *
558
561
  * 浮层子元素均为运行时注入,统一使用 runtimePagePrefix 前缀。
559
562
  */
560
- handlePopupChildNode(node, popupType, popupElement, config) {
563
+ handlePopupChildNode(node, popupType, config) {
561
564
  if (config.onlyInteractive && !this.isInteractive(node)) return;
562
565
  const tag = this.getSimpleTag(node);
563
- const popupRootTestId = popupElement.getAttribute("data-testid") || `${popupType}_unknown`;
564
- const key = `${popupRootTestId}_${tag}`;
566
+ const key = `${popupType}_${tag}`;
565
567
  const current = this.state.popupChildCounter.get(key) ?? 0;
566
568
  this.state.popupChildCounter.set(key, current + 1);
567
569
  const popupPrefix = config.popupPrefixMap[popupType] || `${popupType}_`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@testid/antd-testid-runtime",
3
- "version": "1.0.10",
3
+ "version": "1.0.12",
4
4
  "description": "运行时兜底打标模块 — MutationObserver + 锚点计数器 + 浮层计数器 + ID 重复检测",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",