# -*- coding: utf-8 -*- """验证 demo/index.html(file:// 双击打开)加载时 console/page 错误与失败请求。""" import io import sys sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') from playwright.sync_api import sync_playwright URL = 'file:///D:/code/crm-backend-matt/.scratch/opportunity-e2e/demo/index.html' SHOT = r'D:\code\crm-backend-matt\.scratch\opportunity-e2e\verify-demo-open.png' console_msgs, page_errors, failed = [], [], [] with sync_playwright() as p: browser = p.chromium.launch(headless=True) page = browser.new_page() page.on('console', lambda m: console_msgs.append((m.type, m.text)) if m.type in ('error', 'warning') else None) page.on('pageerror', lambda e: page_errors.append(str(e))) page.on('requestfailed', lambda r: failed.append( (r.url, (r.failure or '?') if isinstance(r.failure, str) else (r.failure and r.failure.get('errorText')) or '?'))) page.on('response', lambda r: failed.append((r.url, 'HTTP %d' % r.status)) if r.status >= 400 else None) page.goto(URL) page.wait_for_load_state('networkidle') page.wait_for_timeout(2500) page.screenshot(path=SHOT, full_page=False) browser.close() print('== console error/warning:', len(console_msgs)) for t, x in console_msgs[:20]: print(' [%s] %s' % (t, x[:300])) print('== page errors:', len(page_errors)) for e in page_errors[:10]: print(' ', e[:300]) print('== failed requests (>=400 或网络失败):', len(failed)) for u, f in failed[:20]: print(' ', f, '←', u[:200]) print('截图:', SHOT)