Files
skill-template/tools/ui_inspector/smoke_check.py
chendelian 46bc573777
All checks were successful
技能自动化发布 / release (push) Successful in 10s
Release v1.0.66: table default_sort_json for data management
2026-08-02 12:17:55 +08:00

133 lines
5.5 KiB
Python

"""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": "陈德炼<c #99ffffff>@微信</c>",
},
{"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": "陈德炼<c #99ffffff>@微信</c>",
},
{"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())