Skip to content

[iOS] paste --via-menu 在 SimUsePlayground 中返回成功但未完成粘贴 #91

Description

@AoZ-923
## 问题描述

在仓库自带的 `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 为:

{"data":{},"ok":true}

但随后再次执行 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 返回成功时,应当已经完成以下动作:

  1. 长按目标输入框
  2. 找到系统编辑菜单中的 “Paste”
  3. 成功点击该菜单项

在 Demo 中,编辑菜单应被关闭,paste-input-fieldpaste-content-echo 应显示传入文本。

如果菜单项未被成功点击,命令不应返回 ok: true

当前 E2E 可能存在假阳性

Tests/PasteTests.swift 中的 settlePaste 会查找并点击 allowPasteLabels,而该集合包含普通字符串 "Paste"

paste --via-menu 只打开编辑菜单、没有完成点击时,settlePaste 可能把遗留的普通编辑菜单项 “Paste” 当成粘贴权限提示,再额外执行一次:

tap --label 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 内

以上只是排查方向,尚未确认具体根因。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions