From e1e094513f4b9360231022f6d18a0ebc6a04dc7d Mon Sep 17 00:00:00 2001 From: hejunxian Date: Mon, 28 Sep 2026 17:43:50 +0800 Subject: [PATCH] Release artemis-case-prep v1.1.0 --- SKILL.md | 26 +++++++++++++++++--------- agents/openai.yaml | 2 +- assets/artemis-tasks.xlsx | Bin 10791 -> 6874 bytes references/workbook-contract.md | 31 +++++++++++++++++++++---------- 4 files changed, 39 insertions(+), 20 deletions(-) diff --git a/SKILL.md b/SKILL.md index cbc2593..c8494d6 100644 --- a/SKILL.md +++ b/SKILL.md @@ -1,11 +1,11 @@ --- name: artemis-case-prep -description: 从多工作表原始 Android 测试用例中筛选适用于目标设备且可由 ARTEMIS 自动执行的用例,标记原表副本并填写六列批量任务模板的 Artemis 提示词。用于准备任务文档,不用于直接运行批次或改造导入器。 +description: 从多工作表原始 Android 测试用例中筛选适用于目标设备且可由 ARTEMIS 自动执行的用例,核实测试环境和用例信息后标记原表副本,并填写七列批量任务模板。用于准备任务文档,不用于直接运行批次或改造导入器。 --- # ARTEMIS 用例准备 -把原始测试用例工作簿转成两份可追溯的文件:保留原有内容并新增“是否选中作为自动化执行”(`是`/`否`)列的原表副本,以及只包含选中用例的六列任务表。优先使用用户提供的模板;未提供时使用 [六列模板](assets/artemis-tasks.xlsx)。不要覆盖输入文件。 +把原始测试用例工作簿转成两份可追溯的文件:保留原有内容并新增“是否选中作为自动化执行”(`是`/`否`)列的原表副本,以及只包含选中用例的七列任务表。优先使用用户提供且符合下述七列表头的模板;未提供时使用 [七列模板](assets/artemis-tasks.xlsx)。不要覆盖输入文件。 ## 先确认适用性,再判断自动化 @@ -13,18 +13,26 @@ description: 从多工作表原始 Android 测试用例中筛选适用于目标 2. 适用性由用户在**原始用例**中完成:核对目标设备及每条用例的“是否适用”标记、标题限定或明确的适用说明;不强制另建设备能力清单。若有空白、缺少行级判定而无法由原文明确判定,或目标设备信息与原文范围无法对应,列出缺失的工作表与行号(可压缩连续行段),提醒用户补齐并**暂停正式转换**。不得把空白当作“不适用”,也不得从型号臆测设备能力。适用性明确为“否”的用例在自动化列标“否”。 3. 对适用用例逐条判断能否由 ARTEMIS 的 Android UI 操作及其可用 ADB/日志观察建立前置条件、完成动作并取得可核验结果。依赖人工观察、实物遮挡/断电、外部设备或 PC 操作、主观音画质量评价,或者前置条件无法建立的用例标“否”,不交给 ARTEMIS 试跑。不能因为有步骤文字就判“是”。“是”表示适合自动化执行,不表示测试已经通过。 原始步骤若有不清晰之处,尤其操作对象、顺序、入口、触发条件或结果判定不明确时,列出来源工作表、行号、原文及具体疑问,向使用者确认后再判定该条用例并定稿 Artemis 提示词。确认前不猜测步骤或界面路径,也不把“否”作为替代澄清的标记;可继续整理其他明确用例,但受影响条目保持待确认,正式任务表待澄清后再交付。 -4. **确认测试任务之前**,明确目标测试 App 的版本(以用户提供或设备上核实的版本标识为准,不用文档日期或设备固件版本代替);版本缺失时只可准备草稿,不称为已确认的任务。**测试开始之前**另须确认设备 SN、秘钥、设备名称、设备型号。用户已明确这四项设备信息在该工作流中可正常流转;相关用例可直接使用已提供的值,不凭空编造。设备信息缺失时明确待补内容,不称为可执行,也不启动测试;不要把 ARTEMIS 的模型 API Key 与设备秘钥混同。 -5. 涉及“与某信息一致/匹配/同步”等断言的用例,**测试前**逐项补齐要比较的字段、可信的预期值或独立参照来源,以及适用设备/账号/版本范围。原文没有给足但可补充时,保留其自动化候选判断,在草稿中列出具体待补项;未补齐不得启动该用例。若确实无法取得独立参照,才判为无法自动核验。不能从被测页面自身反推预期,或把“显示正常”当作一致。 +4. **编写任何 Artemis 提示词之前**,先取得用户提供或明确确认的四项信息:① Android 模拟器名称(不用模拟器时,由用户明确说明“使用真机、不使用模拟器”);②测试 App 名称;③测试 App 版本;④被测设备名称。模拟器是运行 App 的 Android 环境,被测设备是用例操作的设备,两者不可混用;设备型号、固件版本和用例文档日期不能替代 App 版本。已有对话或用户提供的原始资料中有明确值时直接沿用,不重复索取;仍缺任何一项时集中列出缺项并暂停提示词编写,不生成带占位符的草稿提示词。可先分析原表并整理待确认用例。 +5. 逐条检查用例是否足以确定前置条件、操作对象与顺序、触发条件、可观察的预期结果。原文或用户资料不全时,列出来源工作表、行号、原文和具体缺项,请用户补齐后才编写该条提示词;不猜测步骤、界面路径或预期,也不以“否”代替澄清。涉及“一致/匹配/同步”时,还须取得比较字段、独立的预期值或可信参照及适用范围;不能从被测页面自身反推预期。若用户明确无法取得独立参照,才判为无法自动核验。其他信息完整的用例可继续整理,但正式任务表应待全部待确认项处理后交付。 +6. **测试开始之前**,在目标 Android 环境中统一核验一次实际安装的 App 版本并记录结果;同一轮测试的各条用例沿用该结果,不逐条重新核验。若测试过程中安装版本变化,重新核验。另须确认需要使用的设备 SN、秘钥、设备型号等执行信息。用户已明确这些设备信息可在该工作流中正常流转;相关用例可直接使用已提供的值,不凭空编造。若某项信息本身是用例前置条件或断言所必需,应按第 5 条在编写该条提示词前取得。不要把 ARTEMIS 的模型 API Key 与设备秘钥混同。 ## 生成与核验 - 在原表**副本**的用例表增加且只增加所要求的自动化标记列(若已有此列则更新,不重复新增);每条用例填 `是` 或 `否`。先核对目标位置不会覆盖既有数据,保留原工作表、原文、图片、合并、格式及非用例页。若所选表格工具不能保真,停止交付并说明损失,不输出貌似完整的副本。遵循可用的 spreadsheet 工作流进行编辑、渲染与导出检查。 -- 任务表严格沿用 `任务` 页的六列顺序:`用例编号 / 检测项目 / 测试子项 / 测试用例 / 前置约束提取 / Artemis提示词`。只写入适用且自动化列为“是”的用例;其他工作表保持模板原样。编号在任务表内保留原值并附 `〔来源页!行号〕`,以区分重号;原表编号不改。 -- “前置约束提取”写确认的测试 App 版本及原文实际要求的设备、账号、网络和状态;一致性用例还写明比较字段与独立预期值/来源,草稿中可明确标出待补项,但不把未确认条件写成已满足。“Artemis提示词”**必须以 `【原表显示的用例编号】` 紧接原“测试用例”文本开头**,随后接完整执行说明;例如 `【1.1】【声波配网】手动长按重置恢复出厂后首次绑定完成配网流程` 后另起执行说明。这里的连接是文本拼接,不写字面 `+`;提示词前缀不附来源页/行号。执行说明写明在确认的 App 版本上操作、起点、操作意图、必要等待/状态转移、可观察的预期及证据要求;一致性断言须明确实际值与哪个预期值比较。直播页的分辨率切换、全屏、声音开启/关闭等目标控件初次未显示时,可先观察画面、轻点直播画面一次并重新观察可能浮现的控件或二级菜单;声音开关仅以可观察的 UI 状态核验,不把需要人工听音的结果判为自动化可核验。卡回看和云回看可将有颜色区域作为有数据的选时线索、空白区域作为无数据线索;选有数据片段时先选择过去且有颜色的区域,再用回放结果核验,不仅凭颜色判通过,也不设计拖动到未来。**仅移动爱家 App** 的卡回放用例可在点击“云回看”后观察是否出现切换入口。以上均是适用场景的条件性提示,不发明 UI 定位器、页面路径、精确坐标或功能。条件不满足、参照信息缺失或实际安装版本不一致时如实报告阻塞,不声称通过。无可用原编号或测试用例文本时列出来源行请用户补齐,不造编号或标题。更多写法见 [字段与边界](references/workbook-contract.md)。 -- 设置页功能项较多;相关用例在首屏未找到目标时,提示词应允许向上滑动更长距离以查看下方内容,并在每次滑动后重新观察和定位。不要把首屏未见当作功能缺失,也不要规定未经核实的固定坐标、距离或盲滑次数;见 [设置页查找边界](references/workbook-contract.md#提示词与决策)。 -- 核对原表每条真实用例的标记均为 `是`/`否`,任务表数据行数恰等于“是”的数量;逐行检查提示词的编号和用例文本前缀、App 版本是否与本次确认值一致,并抽查一致性用例有独立参照且比较字段明确;再抽查不同表头布局、重复编号、合并/续行和排除项。确认输入文件未改、两份输出的非目标内容未意外变化,且六列表头、提示词与来源可回溯。 +- 任务表严格沿用 `任务` 页的七列顺序:`用例编号 / 检测项目 / 测试子项 / 测试用例 / 前置约束提取 / Artemis提示词 / 任务配置(JSON)`。只写入适用且自动化列为“是”、提示词所需信息已补齐的用例;其他工作表保持模板原样。`用例编号` 只填写原表显示的编号,不附 `(Sheet1!2)`、`〔来源页!行号〕` 等工作表/行号后缀;原表编号不改。重复编号保持原样,处理时另以来源工作表和行号定位用例。`Artemis提示词` 是唯一提交给 AI 的任务正文,其他文本列只作元数据,不自动拼入提示词。 +- `任务配置(JSON)` 可留空,表示继承批次或全局配置;确需逐项覆盖时,只写当前 ARTEMIS 导入器支持的字段和值,使用合法 JSON 对象,不写密钥、占位值或未经确认的设备序列号。模拟器名称和被测设备名称不能当作 `device_serial`;填写前核对实际序列号。字段及导入边界见 [七列契约](references/workbook-contract.md#模板)。 +- “前置约束提取”写目标测试 App 版本及原文实际要求的设备、账号、网络和状态;一致性用例还写明比较字段与独立预期值/来源,草稿中可明确标出待补项,但不把未确认条件写成已满足。“Artemis提示词”**必须以 `【原表显示的用例编号】` 紧接原“测试用例”文本开头**,随后接完整执行说明;例如 `【1.1】【声波配网】手动长按重置恢复出厂后首次绑定完成配网流程` 后另起执行说明。这里的连接是文本拼接,不写字面 `+`;提示词前缀不附来源页/行号。执行说明写明沿用测试开始前统一核验的 App 版本,不要求每条用例再次检查;还须写明起点、操作意图、必要等待/状态转移、可观察的预期及判定方式;一致性断言须明确实际值与哪个预期值比较。直播页的分辨率切换、全屏、声音开启/关闭等目标控件初次未显示时,可先观察画面、轻点直播画面一次并重新观察可能浮现的控件或二级菜单;声音开关仅以可观察的 UI 状态核验,不把需要人工听音的结果判为自动化可核验。卡回看和云回看可将有颜色区域作为有数据的选时线索、空白区域作为无数据线索;选有数据片段时先选择过去且有颜色的区域,再用回放结果核验,不仅凭颜色判通过,也不设计拖动到未来。**仅移动爱家 App** 的卡回放用例可在点击“云回看”后观察是否出现切换入口。以上均是适用场景的条件性提示,不发明 UI 定位器、页面路径、精确坐标或功能。无可用原编号或测试用例文本时列出来源行请用户补齐,不造编号或标题。给 Codex 的通用截图、录屏、证据归档及结论要求不写入“Artemis提示词”;更多写法见 [字段与边界](references/workbook-contract.md)。 +- “前置约束提取”及每条正式“Artemis提示词”都要写明已确认的模拟器名称或真机环境、测试 App 名称与版本、被测设备名称。执行说明沿用测试开始前统一核验的安装版本,不要求逐条再查。用例缺失的操作、前置或预期信息只列在单独的待补清单中;补齐前不写该条提示词,也不将占位内容放进任务表。 +- 每条“Artemis提示词”在完成本用例的操作和结果观察后,要求返回目标 App 内的设备首页并确认首页可见;用例失败或未验证时也应尝试返回。不要把 Android 系统桌面当成设备首页,也不要编造返回路径。若因解绑、页面异常等原因无法返回,说明最终页面和原因。Codex 在开始下一条前核对设备首页已恢复;未恢复时先处理状态问题,避免用例相互干扰。 +- **移动爱家 App** 点击“设置”进入设置页后,先等待页面刷新出实际设置内容并重新观察,确认目标控件属于刷新后的页面,再进行点击或滑动;不能把刚进入时的空白、占位或旧页面当作最终内容。设置页功能项较多;相关用例在已加载的首屏未找到目标时,提示词应允许向上滑动更长距离以查看下方内容,并在每次滑动后重新观察和定位。不要把首屏未见当作功能缺失,也不要规定未经核实的固定等待时间、坐标、距离或盲滑次数;见 [设置页查找边界](references/workbook-contract.md#提示词与决策)。 +- 核对原表每条真实用例的标记均为 `是`/`否`,待确认条目全部处理后,任务表数据行数恰等于“是”的数量;逐行检查编号列只含原表显示的编号、提示词的编号和用例文本前缀,且每条提示词都要求结束时返回 App 内设备首页;核对模拟器或真机环境、App 名称与版本、被测设备名称与用户确认值一致,且提示词没有逐条核验版本、通用截图录屏、证据归档或结论指令。第七列应为空或为可解析、仅含受支持字段的 JSON 对象。抽查一致性用例有独立参照且比较字段明确,再抽查不同表头布局、重复编号、合并/续行和排除项。确认输入文件未改、两份输出的非目标内容未意外变化,且七列表头、提示词与来源可回溯。 -当前所附 ARTEMIS 1.0.1 的原生 Excel 导入器要求另一套固定七列,**不能声称本六列文件已通过导入**。用户明确要保留六列,后续会改 ARTEMIS 实现;本 skill 不擅自生成第七列、改源码、调用 `mobile_batch` 或启动设备。将来用户要求执行时,先按当时服务版本预览校验并取得执行授权;编写外部可执行测试代码则先用 ARTEMIS 探索实际应用。 +本七列模板与当前查看的 ARTEMIS `task_import.py` 表头一致,但不能仅凭表头声称文件已通过导入。用户将来要求执行时,先用当时服务的预览校验,再按执行授权启动;本 skill 不改导入器、不调用 `mobile_batch`、不启动设备。编写外部可执行测试代码则先用 ARTEMIS 探索实际应用。 + +## Codex 执行与证据归档(不写入 Artemis 提示词) + +后续执行测试时,Codex 在关键操作前后截图并保留本任务录屏;记录证据路径,以便归档到工作区“测试佐证”目录。若工具只能保存到 ARTEMIS trace,报告 trace 和证据路径。前置条件不成立、控件未找到或证据不能证明预期时,如实报告阻塞或未验证,不写通过。这些要求由 Codex 处理,不拼入任务表每条“Artemis提示词”。 ## 执行状态显示取消但之后完成 diff --git a/agents/openai.yaml b/agents/openai.yaml index 6aa2a51..7a346f5 100644 --- a/agents/openai.yaml +++ b/agents/openai.yaml @@ -1,3 +1,3 @@ interface: display_name: "ARTEMIS 用例准备" - short_description: "筛选设备适用且可自动化的用例,填写六列任务表" + short_description: "筛选设备适用且可自动化的用例,填写七列任务表" diff --git a/assets/artemis-tasks.xlsx b/assets/artemis-tasks.xlsx index d1e313e116cc8a8ba27802cac39e559c1a50911b..d2da324703ecf27c6c929a8584a1089f57c72054 100644 GIT binary patch literal 6874 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 diff --git a/references/workbook-contract.md b/references/workbook-contract.md index 11f85c8..9d48fb2 100644 --- a/references/workbook-contract.md +++ b/references/workbook-contract.md @@ -1,21 +1,24 @@ -# 六列任务表与判定边界 +# 七列任务表与判定边界 本参考记录用户所附模板与原始用例的非显然结构,供处理这类工作簿时使用。新输入须重新核对表头和适用性,不要把示例页当作通用列号映射。 ## 模板 -`assets/artemis-tasks.xlsx` 来自用户的 `artemis-tasks.xlsx`。`任务!A1:F1` 才是本次约定的输出结构,依次为: +`assets/artemis-tasks.xlsx` 在原有六列后增加 `任务配置(JSON)`,并更新了“填写说明”页。`任务!A1:G1` 是本次约定的输出结构,依次为: | 列 | 内容 | | --- | --- | -| 用例编号 | 原编号加 `〔来源页!行号〕`;编号本身不可用作唯一键。 | +| 用例编号 | 只填原表显示的编号,不附工作表名、行号等来源后缀;重复编号保持原样。处理时用来源工作表和行号区分记录。 | | 检测项目 | 对应原文项目,保留其语义。 | | 测试子项 | 对应原文子项;没有独立子项时不杜撰。 | | 测试用例 | 保留原用例目的与关键动作,必要时压缩冗余但不改变判据。 | -| 前置约束提取 | 本次确认的测试 App 版本、设备适用范围、账号/网络/状态、SN/秘钥等前置;一致性用例还需比较字段及独立预期值/来源;区分已知与待建立。 | +| 前置约束提取 | 用户确认的模拟器名称或真机环境、测试 App 名称和版本、被测设备名称,以及原文要求的账号/网络/状态等前置;一致性用例还需比较字段及独立预期值/来源。 | | Artemis提示词 | 以 `【原表显示的用例编号】` + 原“测试用例”文本开头,再接完整、自包含的执行请求,见下方。 | +| 任务配置(JSON) | 可留空;逐项覆盖时填写合法 JSON 对象,只使用当前导入器支持的字段,不放密钥。 | -模板的 `填写说明` 页混用了“任务名称、任务目标、预期结果”等七列导入术语,和实际六列表头不一致;它是附件内容,不覆盖用户已确认的六列要求。保留该页,不拿它修改 `任务` 页的列数。 +当前查看的 ARTEMIS `task_import.py` 使用同一七列表头。只有 `Artemis提示词` 列作为发送给 AI 的任务正文;`前置约束提取` 与其他描述列是元数据,不自动拼接。`任务配置(JSON)` 可留空,空字段继承批次或全局配置;确需覆盖时,当前允许 `profile`、`model`、`reasoning_effort`、`device_serial`、`verification_level`、`explorer_mode`、`locked_app_package`、`record_video`、`analyze_video`、`request_timeout_seconds`、`max_retries`、`retry_interval_seconds`、`timeout_seconds`。具体取值及限制以执行时导入器为准;未知字段、密钥和非对象 JSON 会被拒绝。模拟器名称或被测设备名称不是 Android `device_serial`,没有已确认的序列号就留空该字段。 + +不要把新增一列当作导入成功证明。执行前用当时的 `mobile_task_file(action="preview")` 检查文件和逐行错误;本 skill 只准备文档,不启动批次。 ## 原始用例 @@ -25,22 +28,30 @@ ## 提示词与决策 -对每条“是”,首字符起按 `【原表显示的用例编号】` + 原“测试用例”文本(仅去首尾多余空白)拼接。保留原文已有的 `【】`,不要再给整段用例标题套一层方括号;不要把任务表编号列中的 `〔来源页!行号〕` 带入前缀,也不要写字面 `+`。例如 `1设备绑定!3` 的前缀是 `【1.1】【声波配网】手动长按重置恢复出厂后首次绑定完成配网流程`。这只是格式示例,该行还需人工复位,不能因此标成自动化“是”。若 Excel 数值编号的显示格式与底层数值不同(如 `1.10`),采用原表显示的编号。 +编写任何提示词之前,先取得用户提供或明确确认的模拟器名称(使用真机时由用户明确说明)、测试 App 名称与版本、被测设备名称。逐条核对原始用例的前置、步骤和预期;缺少关键事实时列出来源页、行号和具体待补项,请用户补齐后再写该条提示词。缺少独立比较参照的一致性用例同样先补齐,不用占位符或猜测代替。 -前缀之后另起完整说明,至少明确:本次确认的测试 App 版本,并在执行时核对实际安装版本;在目标 Android 设备与应用的实际当前状态开始;需要建立的前置条件;依据原文进行的操作;等待**可观察的界面状态**而不是依赖模型思考时间;原文的预期结果及截图/页面文字/日志等可取得的证据;失败、未验证、版本不一致或条件不满足时如实报告。必要的 SN、秘钥、名称、型号可直接写入对应任务,但不能给无关用例灌入这些值。不要把缺失的原文判据补成看似确定的断言。 +同一轮测试开始前,在目标设备上核验一次实际安装的 App 版本并记录结果。各条用例沿用该结果,提示词不写逐条查询版本的动作;若安装版本变化,再重新核验。 + +对每条“是”,首字符起按 `【原表显示的用例编号】` + 原“测试用例”文本(仅去首尾多余空白)拼接。保留原文已有的 `【】`,不要再给整段用例标题套一层方括号;编号列和提示词前缀均不附来源工作表/行号,也不要写字面 `+`。例如来源为 `1设备绑定!3` 的用例,编号列填 `1.1`,提示词前缀是 `【1.1】【声波配网】手动长按重置恢复出厂后首次绑定完成配网流程`。这只是格式示例,该行还需人工复位,不能因此标成自动化“是”。若 Excel 数值编号的显示格式与底层数值不同(如 `1.10`),采用原表显示的编号。 + +前缀之后另起完整说明,至少明确:用户确认的模拟器名称或真机环境、测试 App 名称与版本、被测设备名称;沿用测试开始前统一核验过的安装版本,不要求当前用例再次核对;在目标 Android 环境与应用的实际当前状态开始;需要建立的前置条件;依据原文进行的操作;等待**可观察的界面状态**而不是依赖模型思考时间;原文的预期结果和可观察的判定依据。必要的 SN、秘钥、型号可直接写入对应任务,但不能给无关用例灌入这些值。不要把缺失的原文判据补成看似确定的断言。关键操作前后截图、录屏保留、证据路径及“测试佐证”目录归档、阻塞/未验证结论属于 Codex 的执行与报告要求,不写入“Artemis提示词”。 + +每条用例完成操作与结果观察后,提示 ARTEMIS 返回目标 App 内的设备首页,重新观察并确认首页已显示;即使用例失败或未验证,也尝试完成这一收尾。此处不是 Android 系统桌面,不预设未经核实的导航入口。若用例使设备首页不可达或返回失败,说明当前页面和原因;Codex 在运行下一条用例前确认设备首页已经恢复,未恢复则先处理该状态。 直播画面中的分辨率切换、全屏、声音开启/关闭等控件可能在点击画面后才显示,也可能藏在随之出现的二级菜单。仅当用例操作确实位于直播页且初次观察未找到目标元素时,提示 ARTEMIS 先截取/查看当前页面,轻点不覆盖明显按钮的直播画面区域一次,再观察新的控件或菜单并尝试定位目标。菜单若短暂显示,应在其可见时完成后续操作;若仍不存在,记录观察和截图,报告未找到,不反复盲点或编造菜单位置。声音开关可核对界面呈现的开/关状态、图标或可观察反馈;若预期要求确认实际声音质量或是否听得到,不能以图标变化冒充听音验证。此提示不是对当前 App 实际界面的预先验证,不能套用于设置页等其他场景。 -App 设置页往往较长,目标功能可能在首屏下方。整理设置页用例时,如初次观察未见目标,提示 ARTEMIS 在设置列表中向上滑动较长距离(让下方内容出现),每次滑动后重新查看页面并查找目标;若仍未见,可根据页面变化继续滑动,直到可确认已到列表底部,再记录未找到。不要在未查看新页面时连续盲滑,也不要把用户的“多滑一点”写成未验证的固定像素、次数或坐标。 +**移动爱家 App** 点击“设置”后,设置页可能先显示空白、占位或尚未刷新的内容。提示词应要求等待并重新观察,以真实设置内容出现、目标区域可辨认为继续操作的条件;在此之前不点击疑似目标控件,也不把未出现的功能判为缺失。若刷新后仍不能确认页面内容,记录页面状态与证据并报告未能定位,不以固定秒数的等待代替确认。 + +App 设置页往往较长,目标功能可能在首屏下方。整理设置页用例时,先确认页面已刷新出实际内容;如已加载的首屏未见目标,提示 ARTEMIS 在设置列表中向上滑动较长距离(让下方内容出现),每次滑动后重新查看页面并查找目标;若仍未见,可根据页面变化继续滑动,直到可确认已到列表底部,再记录未找到。不要在未查看新页面时连续盲滑,也不要把用户的“多滑一点”写成未验证的固定像素、次数或坐标。 卡回看和云回看的日期/时间轴上,有颜色的区域通常表示有数据,空白区域通常表示无数据。整理有录像片段的回放用例提示词时,先识别当前选中的回看类型及其有颜色区域,再在已经过去的时间中选取该区域并尝试回放,以实际播放/页面结果验证;不要假设卡与云的有数据区相同,也不要仅凭颜色判定回放成功。若用例本身要检验无数据区域,则按原文选择空白的过去时间并核对无数据反馈,不能拿它作为有录像回放失败的证据。选取回放片段前核对当前设备/App 时间和所选时间的时区及先后,不要求拖到未来时间;不能把未来片段不存在判成回放失败。若原用例专门检验时间轴上界,则观察是否无法选取或播放未来时间,记录界面证据,不假定具体控件反馈。颜色含义是用户提供的一般操作线索,具体 App 界面仍须在执行时观察确认。 **仅移动爱家 App**:卡回放目标入口未见时,可先点击“云回看”,重新观察是否出现云回看/卡回放切换,再选择卡回放。其他 App 不沿用这条入口提示;切换未出现时记录当前页面并报告未找到,不编造固定按钮位置。此路径是用户提供的操作线索,真正编写可执行测试代码前仍须用 ARTEMIS 在目标 App 验证。 -凡要求信息一致、匹配或同步,执行前核对具体比较字段、独立的预期值或可信来源,以及对应设备、账号、App 版本等范围。比如原用例要求“设备型号和厂商提供的一致”,须先取得厂商提供的目标型号,再将 App 中读到的型号与它比较;不能把 App 显示值同时当成预期和实际。缺少参照信息时列明待补项,该用例不可启动,也不可报告通过。 +凡要求信息一致、匹配或同步,编写提示词前核对具体比较字段、独立的预期值或可信来源,以及对应设备、账号、App 版本等范围。比如原用例要求“设备型号和厂商提供的一致”,须先取得厂商提供的目标型号,再将 App 中读到的型号与它比较;不能把 App 显示值同时当成预期和实际。缺少参照信息时列明待补项,等待用户补齐后再编写该条提示词。 例:原文若要求“进入系统设置,修改一个可见开关并确认状态”,提示词应说明识别目标开关、记录初始状态、执行切换、等界面显示目标状态并记录证据;若原文还要求回退,则依原文回退。示例只说明写法,不证明附件中的某条用例具有这些步骤。 排除边界:PC 管理端、外接 console、实物遮挡/断电、需要人工听音/看画质、无法自主建立的网络或硬件状态,不标“是”。长时或重复的 Android 操作不是单凭次数就排除,但需有可测的时间/次数、可恢复前置状态和明确结果;缺任一关键条件则标“否”。ARTEMIS Pro 可观察 ADB/日志,不代表能代替外部硬件、PC 或人的感官。 -截至附带的 ARTEMIS 1.0.1 源码,`task_import.py` 只接受工作表 `任务` 首行严格七列(任务名称、任务目标、预期结果、目标应用、前置条件、输入参数(JSON)、标签)。本六列任务表是供未来导入改造使用的业务模板,不宣称兼容 1.0.1,也不转换成七列。后续执行前核实服务的真实导入契约。 +当前查看的 `task_import.py` 要求 `任务` 页首行严格为上述七列,并禁止公式、宏和外部链接;`填写说明` 页不作为任务导入。实际部署的 ARTEMIS 版本可能不同,后续执行前核实服务的真实导入契约与逐行预览结果。