Files
aiData/WeiXin/T1_OpenChat_ActionTest.py

109 lines
3.3 KiB
Python
Raw Permalink Normal View History

2026-01-25 09:21:48 +08:00
# coding=utf-8
2026-01-31 07:40:07 +08:00
"""
T1_OpenChat_ActionTest.py - 微信对话框打开测试 (UI Navigation Test)
核心功能
- 自动化导航模拟点击搜索输入好友名称进入聊天窗口的完整 UI 流程
- 环境初始化执行测试前清理旧的日志和输出文件
- 容错处理支持通过 UI 树定位或坐标点击两种方式查找搜索结果
使用场景
- 验证 UIAutomator2 是否能正常驱动微信
- 当搜索好友功能失效或微信 UI 改版时进行调试
- 作为自动化巡课流程的第一步确保机器人处于正确的聊天界面
"""
2026-01-25 09:21:48 +08:00
import uiautomator2 as u2
import time
import logging
import sys
import os
2026-01-26 09:15:45 +08:00
import WxUtil
2026-01-25 09:21:48 +08:00
# 添加项目根目录到 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)
# 配置日志
2026-01-26 09:42:25 +08:00
log_dir = WxUtil.LOG_DIR
2026-01-25 09:21:48 +08:00
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="糖豆爸爸"):
2026-01-26 09:42:25 +08:00
# 运行前清理 Logs 和 Output
WxUtil.setup_script_environment()
2026-01-25 09:21:48 +08:00
logger.info(f"开始执行 T1: 打开微信并进入 '{target_name}' 的对话框...")
# 连接设备
2026-01-26 09:15:45 +08:00
d = WxUtil.connect_device()
if not d:
2026-01-25 09:21:48 +08:00
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()