目标:ADR-R4 前置修复——①CDP 对端不回包时 send 在有限时间内失败;②同名定位参数在全部网页能力下行为一致 代码逻辑:①ExternalTransport.send 增单命令超时(默认 30s,connect 可传),超时以稳定码 timeout 拒绝并清理 pending(不再依赖引擎级超时兜底+泄漏表项);RuntimeError 原样透传不经 mapCdpError 改写;②selectorOf 三份重复定义(browser/browser-extended/browser-dom)收敛为 src/main/browser/selector.ts 单一事实源,键集合取并集(补 uiWindowSelector);browser-common 的 element_position 位置感知定位语义不同,有意保留 验证:宿主 browser+extended 测试 49/49 全绿;rpa-core 引擎域 32/32 全绿;typecheck 归零 风险与回滚:低——超时默认值对既有快流程无感知;定位器统一仅补齐兜底键,行为为超集
19 lines
864 B
TypeScript
19 lines
864 B
TypeScript
import { RuntimeError } from "@rpa/core";
|
||
|
||
/**
|
||
* 浏览器能力统一的元素选择器入参解析(W3 定位器统一修复)。
|
||
*
|
||
* 两个浏览器能力文件(browser.ts / browser-extended.ts)此前各持一份 selectorOf,
|
||
* 兜底键集合不一致(extended 缺 uiWindowSelector),同一流程里同名参数在
|
||
* 两个能力下行为不同。现收敛为单一事实源,键集合为两者并集。
|
||
*/
|
||
export function selectorOf(args: Record<string, unknown>): unknown {
|
||
const selector = args.uiSelector ?? args.selector ?? args.target ?? args.uiWindowSelector;
|
||
if (selector === undefined || selector === null || selector === "") {
|
||
throw new RuntimeError("validation_error", "元素选择器为空", {
|
||
recommendation: "填写 css:#id、text:提交、aria:button=提交 或使用拾取器"
|
||
});
|
||
}
|
||
return selector;
|
||
}
|