鸿蒙 PC Markdown 编辑器模拟器验证:鸿蒙 2in1 上的桌面工作流 鸿蒙 PC Markdown 编辑器模拟器验证鸿蒙 2in1 上的桌面工作流浏览器测试和 ArkTS编译都通过后应用仍可能在系统选择器、窗口生命周期、输入法、ArkWeb主题或 HDC安装上失败。鸿蒙 PC优先产品需要一套可重复的模拟器工作流把构建、启动、强杀、文件操作、主题和证据留存串起来而不是依赖 DevEco里偶然点通一次。本文基于 OhMarkdown在 MateBook Pro 2in1模拟器上的实际验证说明启动脚本、HDC连接、HAP安装、系统交互和截图规则。代码位于 https://gitcode.com/VON-/codex_md_oh对应提交3a9146e。模拟器目标与环境当前环境HarmonyOS 6.1.1、API 24、MateBook Pro 2in1模拟器、3120×2080显示。它覆盖自由窗口、键盘、鼠标、系统文件选择器和深色设置比 phone预览更接近目标。模拟器仍不等于真机物理触控板、真实内存、存储 provider、功耗和窗口管理可能不同。报告明确写“模拟器通过真机待复核”。一条脚本完成构建和启动DEVECO_HOME${DEVECO_HOME:-/Applications/DevEco-Studio.app/Contents}HDC$DEVECO_HOME/sdk/default/openharmony/toolchains/hdcEMULATOR$DEVECO_HOME/tools/emulator/EmulatorEMULATOR_NAME${OHMARKDOWN_EMULATOR:-MateBook Pro}PROJECT_ROOT$(CDPATH cd -- \ $(dirname--$0)/..pwd) HAP$PROJECT_ROOT/entry/build/default/outputs/default/entry-default-unsigned.hap $PROJECT_ROOT/scripts/build-debug.sh先构建 Web和 Debug HAP避免安装旧产物。模拟器名称可用环境变量覆盖默认与项目验证目标一致。连接检测与等待if!$HDClist targets-v2/dev/null|grep-qConnected;then$EMULATOR-start$EMULATOR_NAME\/dev/null21fiattempt0while!$HDClist targets-v2/dev/null|grep-qConnected;doattempt$((attempt1))if[$attempt-ge60];thenecho等待模拟器连接超时。2exit1fisleep1done窗口出现不等于 HDC已连接脚本最多等待60秒。超时非零退出不继续执行看似成功的安装。连接检测目前只判断任一 Connected若同时有真机和模拟器应选择明确 target id避免安装错设备。覆盖安装与冷启动$HDCinstall-r$HAP$HDCshell aa force-stop\com.example.ohmarkdown/dev/null21||true$HDCshell aa start\-aEntryAbility\-bcom.example.ohmarkdowninstall -r覆盖安装保留应用数据适合验证恢复记录和升级force-stop后重新启动形成可控前台状态。若要验证首次安装还需卸载清数据的独立场景不能每次都覆盖安装。force-stop允许失败是因为应用可能未运行安装和 start不能吞错。脚本输出“已启动”只在命令成功后出现。文件选择器必须真实操作工作区和文件打开使用系统 DocumentViewPicker。测试在 Documents创建无敏感样本文档通过 UI选择文件夹或文件返回应用后检查 URI读取、名称、状态栏和正文。曾经把完整授权 URI直接传给listFile模拟器报 No such file or directory。真实系统操作暴露了纯代码审查无法发现的 URI/path差异。修复后用new uri.URI(...).path枚举并保留 URI构造子项。选择器测试覆盖确认与取消。取消后当前 dirty文档必须保持状态回到 Modified不能只测选择成功。强杀恢复验证在编辑器输入未保存标记文本等待至少1.5秒快照使用 HDC force-stop不执行正常退出。重新 start后应显示恢复对话框选择 Recover正文回来且标签仍脏选择 Discard则记录清除。验证 RPO时在文本中加入时间序号区分快照前后内容。重复强杀应覆盖计时器触发前、触发后、恢复后未保存再次强杀、保存成功后强杀。普通关闭窗口可能触发生命周期不等于进程突然终止不能作为崩溃证据。中文输入和快捷键模拟器使用小艺输入法输入拼音组合观察组合串、候选上屏、CtrlZ整次撤销和无残留字符。快捷键验证 CtrlS打开保存选择器、CtrlO打开文件流程、CtrlF聚焦搜索框。Web自动化insertText不能完全模拟 IME composition。设备验证需要真实候选交互。物理键盘长按和系统快捷键冲突仍留给真机。多标签与关闭分支输入 Session-A新建标签输入 Session-B往返切换检查正文和星号在 A撤销不能改变 B。关闭脏标签分别选择取消、放弃、保存取消保留、放弃只删目标、保存选择器取消仍保留。模拟器画面验证标签活动边、关闭按钮和后继选择Playwright补充 EditorState历史断言。两层缺一不可。工作区树选择 Documents后检查一级目录、Markdown过滤、目录优先排序点击子目录按需展开点击文件打开新标签折叠删除后代。空目录、无支持文件和权限失败需要状态反馈。两千项上限尚未在模拟器建立规模语料不能仅凭代码标为设备通过。系统深色切换打开系统设置的深色模式与 OhMarkdown并排。切换后原生外壳、CodeMirror、预览、边框和状态栏同时变暗不能留下白色 Web区。验证后切回浅色恢复设备环境。初次验证发现 ArkUI变暗但 ArkWeb仍白促成 AppStorage到setTheme的显式 Bridge。媒体查询测试无法替代系统配置生命周期。分栏和同步滚动准备长文档分别滚动源码与预览检查另一侧跟随且不回弹关闭 Sync后两侧独立快速换边观察递归抖动。窗口缩窄到断点下分栏改为上下布局且没有重叠。模拟器鼠标滚轮不等于真机触控板惯性报告保留真机项。性能采集用 1MiB与10MiB临时文档日志OhMarkdownPerf记录文件读取和编辑器加载。模拟器实测1MiB总83ms10MiB总345ms。内存用 hidumper统计主进程、ArkWeb活跃和辅助进程 PSS。1MiB完整进程组324.7MiB高于250MiB目标29.9%10MiB396.4MiB。加载时间通过不代表内存通过指标分开结论。应用截图证据下图是 MateBook Pro 2in1模拟器中的完整桌面工作台。标题栏、活动栏、侧栏、标签、工具栏、编辑区和状态栏同时可见。截图使用无敏感 fixture保留完整应用边界。每个功能证据还保存主题、工作区、搜索、大纲、标签和恢复专项图片。图片文件实际格式与扩展名要一致。截图不能替代动作记录静态图无法证明保存、滚动和恢复。测试报告应写前置数据、操作、预期、实际、构建 commit和证据路径。对话框分支逐项记录不能用一张主界面图代表全部通过。自动截图前清理通知、用户名、路径和文档正文。必要时裁剪但保留应用上下文不要用设计稿冒充运行截图。模拟器状态清理每轮结束恢复浅色主题、关闭测试选择器、删除临时公共文件或使用专用目录。恢复记录是否保留要明确避免下一轮启动弹框影响用例。不要未经确认删除用户真实未保存内容。测试脚本可以创建带前缀临时文件并在 after清理。系统设置属于共享状态必须记录变更与恢复。自动化演进可用 HDC脚本安装、启动、强停和拉取日志UI操作可通过测试框架或稳定坐标辅助但系统选择器与窗口位置会变化优先使用组件标识。截图命名用语义和日期不用 screen1。模拟器流水线需要独占设备串行执行失败后保存日志和屏幕。连接失败、应用崩溃、断言失败分别报告。当前边界模拟器不是鸿蒙 PC真机HDC脚本未选择特定 target设备 UI尚未完全自动化两千项目录、反复强杀、物理触控板、多窗口压力和签名 Release未验证。冷启动、覆盖安装和清数据要分开覆盖安装保留沙箱适合升级与恢复首次安装没有历史记录适合检查默认主题、初始空标签和权限清数据启动适合确认测试残留不会被代码依赖。三种场景结果不能混在一起。升级验证应先用旧 HAP创建未保存恢复记录和工作区状态再安装新 HAP检查记录版本校验与迁移。当前 RecoveryRecord只有 version 1且无迁移未知版本会被拒绝测试必须确认应用仍能启动而不是卡在恢复循环。卸载会删除应用沙箱执行前要明确没有需要保留的草稿。自动化环境可以使用专用模拟器快照用户共享设备不能随意清数据。日志与崩溃证据HDC拉取 hilog时按应用 bundle、时间和标签过滤。性能使用OhMarkdownPerf普通生命周期使用有限日志。正文、URI和搜索词不进入日志。发现退出时同时记录应用主进程、ArkWeb进程、系统 LowMemoryKill和异常堆栈。“应用窗口消失”可能是 force-stop、崩溃或系统杀进程必须根据系统记录区分。性能报告曾记录一次10MiB连续撤销触发 LowMemoryKill修复后用相同路径复测且未产生新记录这比“后来没闪退”更有证据。每次设备报告绑定 HAP哈希。若日志来自 Debug而截图来自另一个 Release不能合并成一条结论。自由窗口尺寸矩阵主工作台设置最小640×480侧边栏在宽度小于900时隐藏Web分栏在760以下改为上下布局。模拟器应逐档验证640、720、900、1280、1440vp并在每档检查标签、Open/Save、模式控制、状态栏和长文件名。测试不仅拖到目标宽度还要连续来回跨越断点观察组件是否残留、Web尺寸是否更新和焦点是否丢失。最大化、还原、分屏和最小化回前台也属于 PC生命周期。截图至少保留宽、窄和深色三个基线。证据目录结构每个功能使用日期与阶段目录包含 test-cases、test-report和 evidence。图片采用语义名称如system-dark-split.jpeg、workspace-expanded.jpeg报告引用相对路径。相同图片不要被多个不相关结论重复使用。技术文章图片复制到本地忽略目录不修改仓库测试证据。复制后用file检查实际格式PNG不能继续错误命名为 JPEG。图片替代文本说明界面、状态和验证点方便离线阅读与无障碍。结语OhMarkdown模拟器工作流把 Web构建、HAP组装、连接等待、覆盖安装、强停启动和真实系统交互串成可重复路径。文件选择、恢复、输入法、主题和分栏都在2in1环境产生证据同时对真机缺口保持明确。鸿蒙 PC优先不是一句设备声明而是每个核心工作流都必须在目标形态上被实际操作、记录、清理和复测。