source_case: add-friend-wecom status: verified_source_redacted_example surface: windows driver: uiautomation notes: - 选择器显示名 ≠ UIA Name;可见中文常在 Value / 子 Label - 禁止全树第一个 status_layout / wbtn_container - 主窗流程先 maximize;activate 勿无条件 SW_RESTORE elements: - logical_name: main_window purpose: 企业微信主窗口 scope: process_name: WXWork primary_locator: window_class: WeWorkWindow title: 企业微信 expected_count: 1 postcondition: UIA root 可读取;业务需要时已最大化 replace_in_new_skill: true - logical_name: contacts_entry purpose: 打开通讯录 scope: logical_parent: main_window primary_locator: name: org_op_new control_type: TreeItem value_hint: 通讯录 expected_count: 1 postcondition: 出现企业微信-通讯录业务 pane replace_in_new_skill: true - logical_name: contacts_pane purpose: 通讯录业务子层作用域 scope: logical_parent: main_window primary_locator: name_contains: 通讯录 expected_count: 1 postcondition: 可枚举 wlist_view replace_in_new_skill: true - logical_name: new_customer_row purpose: 侧栏进入「新的客户」 scope: logical_parent: contacts_pane ancestor_name: wlist_view primary_locator: row_leaf_name: status_layout child_name: main_chattext child_value: 新的客户 expected_count: 1 postcondition: panel_title_label Value=新的客户 或出现 search_external failure_note: 禁止点全树第一个 status_layout(常为群聊) replace_in_new_skill: true - logical_name: panel_title purpose: 校验已进入新的客户页 scope: logical_parent: contacts_pane primary_locator: name: panel_title_label value: 新的客户 expected_count: 1 replace_in_new_skill: true - logical_name: add_customer_button purpose: 打开添加客户窗口 scope: logical_parent: contacts_pane ancestor_name: search_external primary_locator: name: wbtn_container child_name: ww_btn_text child_value: 添加 expected_count: 1 postcondition: 出现 SearchExternalsWnd failure_note: 禁止点搜索旁 plus_button 下的 wbtn_container replace_in_new_skill: true - logical_name: add_customer_window purpose: 添加客户窗口 scope: process_name: WXWork primary_locator: window_class: SearchExternalsWnd title: 添加客户 expected_count: 1 postcondition: search_input 可定位 replace_in_new_skill: true - logical_name: search_input purpose: 输入待搜索账号 scope: logical_parent: add_customer_window ancestor_name: search_layout primary_locator: name: searchedit expected_count: 1 ready_condition: visible: true enabled: true postcondition: 结果列表或用户不存在弹窗出现 replace_in_new_skill: true - logical_name: verify_message_input purpose: 填写添加验证语 scope: window_class: InputReasonWnd title_any: - 输入认证信息 - 发送添加邀请 primary_locator: name: name_edit expected_count: 1 postcondition: 输入值可读取或发送按钮可用 replace_in_new_skill: true