plugins/navManager:导航 CRUD + 导航分类 CRUD(独立 blueprint) plugins/friendManager:友情链接 CRUD plugins/aboutManager:关于本站 CRUD plugins/siteStats:访问统计主页 + JSON 接口 + /site/* GET 埋点 + nav 卡片点击埋点 applications/view/public/nav.py:导航聚合页 / 分类详情 / JSON 接口,支持 visit_count 注入 applications/view/public/about.py:关于本站公开页 applications/view/public/friend.py:友情链接公开页 templates/public/base.html:响应式首页(搜索框 / 分类抽屉 / 5 主题切换 / footer 隐私小字) templates/public/index.html / category.html:卡片右下角访问次数 templates/public/about.html / friend.html:关于 + 友链前台页 docs/plugins-development.md:插件开发完整指南(生命周期 + 4 个示例 + FAQ + framework 迁移) scripts/:探针与端到端验证脚本(probe_*/verify_*/test_*)
24 lines
1.2 KiB
Python
24 lines
1.2 KiB
Python
"""验收:访问首页与移动端首页,截图检查 visit-count 样式与文字。"""
|
|
from playwright.sync_api import sync_playwright
|
|
|
|
with sync_playwright() as p:
|
|
# 桌面
|
|
desk = p.chromium.launch().new_context(viewport={'width': 1280, 'height': 800})
|
|
page = desk.new_page()
|
|
page.goto('http://127.0.0.1:5000/site/', wait_until='networkidle')
|
|
page.screenshot(path='D:/bwstudio/pear-admin-flask/scripts/_verify_visit_desktop.png', full_page=True)
|
|
# 检查 nav_id=1 卡片右下角文字
|
|
cnt1 = page.evaluate("() => { var c = document.querySelector('.card[data-nav-id=\"1\"] .visit-count'); return c ? c.textContent.trim() : null; }")
|
|
print('nav_id=1 visit-count text:', cnt1)
|
|
cnt2 = page.evaluate("() => { var c = document.querySelector('.card[data-nav-id=\"2\"] .visit-count'); return c ? c.textContent.trim() : null; }")
|
|
print('nav_id=2 visit-count text:', cnt2)
|
|
desk.close()
|
|
|
|
# 移动
|
|
mob = p.chromium.launch().new_context(viewport={'width': 390, 'height': 844}, is_mobile=True)
|
|
page2 = mob.new_page()
|
|
page2.goto('http://127.0.0.1:5000/site/', wait_until='networkidle')
|
|
page2.screenshot(path='D:/bwstudio/pear-admin-flask/scripts/_verify_visit_mobile.png', full_page=True)
|
|
mob.close()
|
|
|
|
print("OK") |