133 lines
5.5 KiB
Python
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())
|