"""验证点击卡片触发 sendBeacon,数据库 +1。""" from playwright.sync_api import sync_playwright from app import app from applications.extensions import db from applications.models import NavClick with app.app_context(): before = db.session.query(db.func.count(NavClick.id)).filter(NavClick.nav_id == 1).scalar() print('before click:', before) with sync_playwright() as p: browser = p.chromium.launch() ctx = browser.new_context(viewport={'width': 1280, 'height': 800}) page = ctx.new_page() page.goto('http://127.0.0.1:5000/site/', wait_until='networkidle') # 拦截请求,看是不是 POST reqs = [] page.on('request', lambda r: reqs.append(r) if '/site/nav/1/click' in r.url else None) # 点击第一张卡片 card = page.locator('.card[data-nav-id="1"]').first card.click(modifiers=['Meta']) # 按住 Meta 打开新标签,保持当前页 page.wait_for_timeout(500) print('captured requests:', [(r.method, r.url) for r in reqs]) browser.close() with app.app_context(): after = db.session.query(db.func.count(NavClick.id)).filter(NavClick.nav_id == 1).scalar() print('after click:', after) assert after == before + 1, f"Expected {before+1}, got {after}" print('PASS: beacon recorded click')