feat(admin): 添加用户管理相关文件

添加用户管理视图、API和状态管理文件
This commit is contained in:
张翔
2026-03-28 14:37:29 +08:00
commit 08ea5fbe98
1643 changed files with 255646 additions and 0 deletions
@@ -0,0 +1,118 @@
"""
截图辅助工具模块
提供测试截图功能,支持多种截图模式。
"""
import os
from pathlib import Path
from typing import Optional
from datetime import datetime
from playwright.sync_api import Page
class ScreenshotHelper:
"""截图辅助工具"""
def __init__(self, screenshot_dir: str = "reports/screenshots"):
self.screenshot_dir = Path(screenshot_dir)
self.screenshot_dir.mkdir(parents=True, exist_ok=True)
def take_screenshot(
self,
page: Page,
name: str,
full_page: bool = False,
selector: Optional[str] = None,
) -> str:
"""
截取页面截图
Args:
page: Playwright页面对象
name: 截图文件名
full_page: 是否截取整个页面
selector: 特定元素选择器
Returns:
截图文件路径
"""
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"{name}_{timestamp}.png"
filepath = self.screenshot_dir / filename
try:
if selector:
# 截取特定元素
element = page.locator(selector)
element.screenshot(path=str(filepath))
else:
# 截取页面
page.screenshot(path=str(filepath), full_page=full_page)
print(f"📸 截图已保存: {filepath}")
return str(filepath)
except Exception as e:
print(f"❌ 截图失败: {e}")
return ""
def take_screenshot_on_failure(
self, page: Page, test_name: str, full_page: bool = True
) -> str:
"""
测试失败时截取截图
Args:
page: Playwright页面对象
test_name: 测试名称
full_page: 是否截取整个页面
Returns:
截图文件路径
"""
return self.take_screenshot(
page, f"{test_name}_failed", full_page=full_page
)
def take_comparison_screenshot(
self, page: Page, name: str, baseline_dir: str = "screenshots/baseline"
) -> tuple:
"""
截取对比截图
Args:
page: Playwright页面对象
name: 截图名称
baseline_dir: 基线截图目录
Returns:
(当前截图路径, 基线截图路径)
"""
current_path = self.take_screenshot(page, name, full_page=True)
baseline_path = Path(baseline_dir) / f"{name}.png"
return current_path, str(baseline_path)
def cleanup_old_screenshots(self, days: int = 7) -> int:
"""
清理旧截图
Args:
days: 保留天数
Returns:
删除的文件数量
"""
import time
deleted_count = 0
cutoff_time = time.time() - (days * 24 * 60 * 60)
for file_path in self.screenshot_dir.glob("*.png"):
if file_path.stat().st_mtime < cutoff_time:
file_path.unlink()
deleted_count += 1
print(f"🗑️ 已清理 {deleted_count} 个旧截图文件")
return deleted_count