"""Smoke test for flow document API + step labeling + kit_wake helpers (v0.8.0).""" from __future__ import annotations import sys import tempfile from pathlib import Path _HERE = Path(__file__).resolve().parent if str(_HERE) not in sys.path: sys.path.insert(0, str(_HERE)) import artifacts as art import kit_wake def _assert_kit_wake_detect() -> None: assert kit_wake.looks_like_wecom(class_name="WeWorkWindow", title="企业微信") assert kit_wake.resolve_wake_profile(class_name="SearchResultWindow2") == "wecom_search" assert not kit_wake.looks_like_wecom(class_name="Chrome_WidgetWin_1", title="Google") r = kit_wake.auto_ensure_if_wecom(class_name="NotWeCom", title="x") assert r.get("skipped") and r.get("reason") == "not_wecom" print("OK kit_wake detect") def _assert_label() -> None: msg_page = [ {"control_type": "TreeItemControl", "name": "groupbuddyname", "value": "某群"}, {"control_type": "TreeItemControl", "name": "send_rich_edit", "value": "你好"}, {"control_type": "TreeItemControl", "name": "con_op", "value": "消息"}, ] searching = [ {"control_type": "TreeItemControl", "name": "groupbuddyname", "value": "徐书建"}, {"control_type": "TreeControl", "name": "searchedit", "value": "陈德炼"}, {"control_type": "TreeItemControl", "name": "send_rich_edit", "value": "陈德炼"}, ] selected = [ { "control_type": "TreeItemControl", "name": "groupbuddyname", "value": "陈德炼@微信", }, {"control_type": "TreeItemControl", "name": "send_rich_edit", "value": "您好"}, ] contacts = [ {"control_type": "TreeItemControl", "name": "panel_title_label", "value": "RPA之家"}, {"control_type": "TreeItemControl", "name": "main_chattext", "value": "新的客户"}, ] new_customer = [ {"control_type": "TreeItemControl", "name": "panel_title_label", "value": "新的客户"}, {"control_type": "TreeItemControl", "name": "ww_btn_text", "value": "添加"}, ] add_empty = [ {"control_type": "TreeItemControl", "name": "title", "value": "添加客户"}, {"control_type": "TreeControl", "name": "searchedit", "value": ""}, {"control_type": "WindowControl", "name": "添加客户", "value": ""}, ] add_result = [ {"control_type": "TreeItemControl", "name": "title", "value": "添加客户"}, {"control_type": "TreeControl", "name": "searchedit", "value": "13316463772"}, {"control_type": "TreeItemControl", "name": "main_chattext", "value": "Nancy"}, {"control_type": "TreeItemControl", "name": "ww_btn_text", "value": "添加为"}, {"control_type": "TreeControl", "name": "search_result", "value": ""}, ] a = art.derive_step_label(window_title="企业微信", locatable=msg_page) b = art.derive_step_label(window_title="企业微信", locatable=searching) c = art.derive_step_label(window_title="企业微信", locatable=selected) d = art.derive_step_label(window_title="企业微信", locatable=contacts) e = art.derive_step_label(window_title="企业微信", locatable=new_customer) f = art.derive_step_label(window_title="添加客户", locatable=add_empty) g = art.derive_step_label(window_title="添加客户", locatable=add_result) assert "输入你好" in a or "某群" in a, a assert "搜索陈德炼" in b, b assert "陈德炼" in c and "输入您好" in c, c assert "RPA之家" in d, d assert "新的客户" in e and "添加" in e, e assert f.startswith("添加客户"), f assert "13316463772" in g or "搜索13316463772" in g, g assert "会话列表" not in a and "会话列表" not in b and "会话列表" not in c print(f"OK labels:\n {a}\n {b}\n {c}\n {d}\n {e}\n {f}\n {g}") def main() -> int: _assert_kit_wake_detect() _assert_label() with tempfile.TemporaryDirectory(prefix="ui_flow_smoke_") as tmp: root = Path(tmp) flow_dir = art.create_flow(root, flow_name="demo-flow") flow = art.load_flow(flow_dir) loc = [ { "control_type": "TreeItemControl", "name": "groupbuddyname", "value": "陈德炼@微信", }, {"control_type": "TreeItemControl", "name": "send_rich_edit", "value": "您好"}, ] label = art.resolve_step_label( flow, window_title="企业微信", window_class="WeWorkWindow", locatable=loc ) step_dir, idx, name = art.add_step_dir( flow_dir, flow, window_title="企业微信", window_class="WeWorkWindow", locatable=loc, label=label, ) assert idx == 1 assert "陈德炼" in name, name art.write_json(step_dir / "meta.json", {"ok": True}) art.register_step( flow_dir, flow, step_index=idx, step_name=name, window={"title": "企业微信", "class_name": "WeWorkWindow", "pid": 1, "hwnd": 2}, stats={"findall_count": 10, "locatable_count": 5, "nodes_kept": 3, "uia_sparse": False}, label=label, ) flow = art.end_flow(flow_dir, art.load_flow(flow_dir)) assert flow["status"] == "ended" print(f"OK flow={flow_dir.name} step={name}") print("OK ui_inspector flow smoke passed") return 0 if __name__ == "__main__": raise SystemExit(main())