Files
aiData/WeiXin/T1_OpenChat_ActionTest.py
HuangHai 54f1b2fb91 'commit'
2026-01-31 07:40:07 +08:00

109 lines
3.3 KiB
Python

# 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()