Skip to content

🐛 fix(desktop): 使用真实 CDP 输入并修复搜索框定位 - #268

Open
CavinHuang wants to merge 4 commits into
mainfrom
codex/browser-cdp-actions-262
Open

🐛 fix(desktop): 使用真实 CDP 输入并修复搜索框定位#268
CavinHuang wants to merge 4 commits into
mainfrom
codex/browser-cdp-actions-262

Conversation

@CavinHuang

@CavinHuang CavinHuang commented Aug 20, 2026

Copy link
Copy Markdown
Owner

结果

完成 #262 的真实输入纵向切片,补齐 #253 的百度类搜索框链路,并交付 #263 的首个单写者队列切片。Browser locator 动作不再依赖 element.click()、人工 KeyboardEvent 或直接改 value。

变更

  • click/doubleClick 使用 Input.dispatchMouseEvent 的 move、press、release 完整序列
  • fill 使用真实点击聚焦、全选、Backspace 和 Input.insertText
  • press 通过 DOM 命中目标并使用完整 modifier 生命周期;Enter 支持原生表单提交
  • role 名称支持 aria-labelledby、aria-label、关联 label、title、placeholder、alt 和按钮 value
  • 关联 label 将焦点转交给 label.control
  • 普通页面和 iframe locator 共用真实 CDP 输入路径;iframe 语义按钮/链接通过 DOM.focus + 原生 Enter 激活
  • locator 目标连续两次位置稳定后才执行;fill/type/check/uncheck/select 动作后读取真实状态验证
  • offscreen locator 自动滚动到视口中心
  • 同一 BrowserSession 的变更动作进入单写者队列
  • 队列动作执行前重新校验标签、generation 和 Agent lease;导航后的旧页面动作返回 stale_target
  • 删除原有页面内 click、fill、press、check 合成实现

验证

后续风险

Closes #253
Related: #251 #262 #263 #269 #270

将点击、双击、文本输入和按键从页面内合成事件切换为 Chromium CDP Input 序列。普通页面与 iframe locator 统一先解析稳定坐标,再执行真实输入;表单动作读取最终状态,避免静默报告成功。

Constraint: 不依赖尚未合并的内置 Browser Tools PR

Constraint: 保留 select 的标准 DOM 状态设置并验证最终值

Rejected: 继续使用 element.click 与人工 InputEvent | 无法覆盖受控输入和真实用户激活语义

Tested: browser-cdp-input 4 个单元测试通过

Tested: @lume/desktop 类型检查通过
补全可访问名称解析和关联 label 命中,使用可产生文本的原生 CDP Enter 事件,并将 DOM 命中坐标规范为整数。

Constraint: 保持真实 CDP 输入,不回退到 JavaScript 合成事件

Tested: browser-cdp-input 与 browser-locator 8 个单元测试

Tested: @lume/desktop typecheck

Not-tested: 完整 Browser E2E 被现有 WebMCP 基线问题 #269 阻断;新增搜索断言在阻断前全部通过
@CavinHuang CavinHuang changed the title 🐛 fix(desktop): 使用真实 CDP 输入执行浏览器动作 🐛 fix(desktop): 使用真实 CDP 输入并修复搜索框定位 Aug 20, 2026
Electron 会丢弃连续路由到子 frame 的 root-session 指针序列,因此对 iframe 内按钮和链接先用 CDP DOM.focus 聚焦,再发送原生 Enter 完成浏览器语义激活。

Constraint: 不使用 element.click 或合成 MouseEvent

Tested: browser-cdp-input 与 browser-locator 9 个单元测试

Tested: @lume/desktop typecheck

Tested: 合入 #269 修复后 Electron Browser Runtime E2E 70 assertions
@CavinHuang

Copy link
Copy Markdown
Owner Author

追加 iframe 稳定性切片 c6d1fcc:frame button/link 改为 CDP DOM.focus + 原生 Enter 语义激活,规避 Electron root-session 连续指针事件被 Widget 丢弃;未使用 JS click。与 #270/#269 修复组合验证时 Electron Browser Runtime E2E 70 assertions 全通过。

同一 BrowserSession 的变更型请求进入单写者队列。动作真正执行前重新校验标签页身份、generation 与 Agent lease;前一动作导航后,队列中基于旧页面生成的动作返回 stale_target,不再落到新页面。

Constraint: 本提交不实现用户接管暂停与动作后效果等待

Rejected: 仅依赖模型串行发工具 | 并行 tool_use 仍可能同时落到页面

Tested: Browser action queue/CDP/locator 11 tests

Tested: Electron Browser Runtime E2E 72 assertions(临时组合 PR #270 后验证)

Tested: bun run --filter @lume/desktop typecheck
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

【BUG】【内置浏览器】百度搜索框 locator 填写在可操作性等待后失败

2 participants