# coding=utf-8 """ T1_OpenChat_ActionTest.py - 微信对话框打开测试 (UI Navigation Test) 【核心功能】 - 自动化导航:模拟点击搜索、输入好友名称、进入聊天窗口的完整 UI 流程。 - 环境初始化:执行测试前清理旧的日志和输出文件。 - 容错处理:支持通过 UI 树定位或坐标点击两种方式查找搜索结果。 【使用场景】 - 验证 UIAutomator2 是否能正常驱动微信。 - 当搜索好友功能失效或微信 UI 改版时进行调试。 - 作为自动化巡课流程的第一步(确保机器人处于正确的聊天界面)。 """ import uiautomator2 as u2 import time import logging import sys import os import WxUtil # 添加项目根目录到 sys.path project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) if project_root not in sys.path: sys.path.append(project_root) # 配置日志 log_dir = WxUtil.LOG_DIR if not os.path.exists(log_dir): os.makedirs(log_dir) logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler(os.path.join(log_dir, "T1_OpenChat.log"), encoding='utf-8'), logging.StreamHandler() ] ) logger = logging.getLogger("T1_OpenChat") def open_chat(target_name="糖豆爸爸"): # 运行前清理 Logs 和 Output WxUtil.setup_script_environment() logger.info(f"开始执行 T1: 打开微信并进入 '{target_name}' 的对话框...") # 连接设备 d = WxUtil.connect_device() if not d: return # 1. 启动微信 logger.info("步骤 1: 启动微信...") d.app_start("com.tencent.mm", stop=True) time.sleep(5) # 获取屏幕尺寸 w, h = d.window_size() logger.info(f"屏幕尺寸: {w}x{h}") # 2. 点击搜索按钮 search_x = int(w * 0.84) search_y = int(h * 0.08) logger.info(f"步骤 2: 点击搜索按钮 (坐标: {search_x}, {search_y})...") d.click(search_x, search_y) time.sleep(2) # 3. 输入搜索内容 logger.info(f"步骤 3: 输入搜索内容 '{target_name}'...") try: d.set_input_ime(True) d.click(int(w * 0.4), int(h * 0.08)) time.sleep(1) d.send_keys(target_name) time.sleep(2) d.set_input_ime(False) except Exception as e: logger.error(f"输入文字失败: {e}") try: d(focused=True).set_text(target_name) except: pass # 4. 点击搜索结果 logger.info("步骤 4: 查找并点击搜索结果...") time.sleep(2) found = False if d(text=target_name).exists: logger.info(f"找到文本为 '{target_name}' 的元素,点击...") d(text=target_name).click() found = True else: logger.warning(f"未找到文本为 '{target_name}' 的元素,尝试模糊匹配或坐标点击...") result_x = int(w * 0.5) result_y = int(h * 0.18) logger.info(f"尝试点击第一个搜索结果位置 ({result_x}, {result_y})...") d.click(result_x, result_y) found = True if found: logger.info("✅ T1 执行完成: 已进入对话框。") else: logger.error("❌ T1 执行失败: 未能进入对话框。") if __name__ == "__main__": open_chat()