## 问题描述
在仓库自带的 `SimUsePlayground` → `paste-test` 页面中,执行 `paste --via-menu` 后:
- 命令退出码为 0,并返回 `ok: true`
- 系统编辑菜单已经出现
- “Paste” 菜单项没有被真正点击
- 输入框内容仍然为空
- 手动补充执行 `tap --label Paste` 后,文本立即成功写入
复现完全基于仓库自带 Demo,不涉及第三方 App。
## 环境
- sim-use:`upstream/main@16e2cdf61751e085b8db5804bdc30fbc3d59607a`
- Xcode:26.5(17F42)
- iOS Simulator:26.5
- 屏幕方向:portrait
- CLI 与 daemon 使用相同构建,daemon 状态正常
- Demo:`Playgrounds/iOS/SimUsePlayground`
- 页面:`paste-test`
## 最小复现步骤
启动仓库自带 Demo 的粘贴页面:
```bash
xcrun simctl launch <UDID> \
com.cameroncooke.SimUsePlayground \
--launch-arg screen=paste-test
确认初始状态:
sim-use describe-ui \
--device <UDID> \
--json \
--no-raw
此时:
TextField "empty" #paste-input-field
StaticText "Content:" #paste-content-echo value="empty"
执行:
sim-use paste "Menu Paste ABC" \
--via-menu \
--target-id paste-input-field \
--device <UDID> \
--json
命令退出码为 0,stdout 为:
但随后再次执行 describe-ui,可以看到:
TextField "empty" #paste-input-field
StaticText "Paste"
StaticText "AutoFill"
StaticText "Content:" #paste-content-echo value="empty"
即系统编辑菜单仍然停留在屏幕上,输入框没有收到文本。
此时手动执行:
sim-use tap --label Paste --device <UDID> --json
“Paste” 菜单被成功点击,paste-content-echo 随即变为测试文本。
在当前环境中连续复现 3 次,结果均相同。
预期行为
paste --via-menu 返回成功时,应当已经完成以下动作:
- 长按目标输入框
- 找到系统编辑菜单中的 “Paste”
- 成功点击该菜单项
在 Demo 中,编辑菜单应被关闭,paste-input-field 和 paste-content-echo 应显示传入文本。
如果菜单项未被成功点击,命令不应返回 ok: true。
当前 E2E 可能存在假阳性
Tests/PasteTests.swift 中的 settlePaste 会查找并点击 allowPasteLabels,而该集合包含普通字符串 "Paste"。
当 paste --via-menu 只打开编辑菜单、没有完成点击时,settlePaste 可能把遗留的普通编辑菜单项 “Paste” 当成粘贴权限提示,再额外执行一次:
这会补完原本失败的操作,使下面的测试仍然通过:
Paste via edit menu targets a field by AX id
Unicode paste via edit menu
建议测试区分:
- 系统粘贴权限提示中的 “Allow Paste”
- 普通文本编辑菜单中的 “Paste”
并在执行恢复动作前,先断言 paste --via-menu 本身已经关闭编辑菜单并改变输入框内容。
排查线索
从现象看,问题位于“编辑菜单已经出现”到“实际点击 Paste”之间。
独立执行 tap --label Paste 可以成功,因此可以重点比较:
pasteViaEditMenu 内部复用的方向校准结果
- 编辑菜单出现后重新解析菜单坐标的结果
- 独立
tap --label Paste 使用的实时坐标转换
- HID 点击是否落在实际菜单项 frame 内
以上只是排查方向,尚未确认具体根因。
确认初始状态:
此时:
执行:
命令退出码为 0,stdout 为:
{"data":{},"ok":true}但随后再次执行
describe-ui,可以看到:即系统编辑菜单仍然停留在屏幕上,输入框没有收到文本。
此时手动执行:
“Paste” 菜单被成功点击,
paste-content-echo随即变为测试文本。在当前环境中连续复现 3 次,结果均相同。
预期行为
paste --via-menu返回成功时,应当已经完成以下动作:在 Demo 中,编辑菜单应被关闭,
paste-input-field和paste-content-echo应显示传入文本。如果菜单项未被成功点击,命令不应返回
ok: true。当前 E2E 可能存在假阳性
Tests/PasteTests.swift中的settlePaste会查找并点击allowPasteLabels,而该集合包含普通字符串"Paste"。当
paste --via-menu只打开编辑菜单、没有完成点击时,settlePaste可能把遗留的普通编辑菜单项 “Paste” 当成粘贴权限提示,再额外执行一次:这会补完原本失败的操作,使下面的测试仍然通过:
Paste via edit menu targets a field by AX idUnicode paste via edit menu建议测试区分:
并在执行恢复动作前,先断言
paste --via-menu本身已经关闭编辑菜单并改变输入框内容。排查线索
从现象看,问题位于“编辑菜单已经出现”到“实际点击 Paste”之间。
独立执行
tap --label Paste可以成功,因此可以重点比较:pasteViaEditMenu内部复用的方向校准结果tap --label Paste使用的实时坐标转换以上只是排查方向,尚未确认具体根因。