#!/usr/bin/env python3 import json, time, os from playwright.sync_api import sync_playwright results = {'pages':[],'buttons':[],'apis':[],'sso':[],'errors':[]} with sync_playwright() as p: b = p.chromium.launch(headless=True) ctx = b.new_context(record_video_dir='/tmp/pw-deep/', viewport={'width':1920,'height':1080}) pg = ctx.new_page() errs = [] pg.on('pageerror', lambda e: errs.append(str(e)[:80])) # TEST ALL KEY PAGES pages = { 'l99-brain': {'click':'.sug','expect_msgs':True}, 'wevia-master': {'check_cards':True}, 'sovereign-claude': {}, 'claw-chat': {}, 'openclaw': {}, 'wevcode': {}, 'l99-saas': {}, 'enterprise-model': {'check_agents':True}, 'wevia-meeting-rooms': {'check_rooms':True}, 'wevia-console': {}, 'wevia-cortex': {}, 'ai-benchmark': {'check_leaderboard':True}, 'admin': {'check_buttons':True}, 'oss-discovery': {}, 'realtime-monitor-v3': {}, } for name, opts in pages.items(): try: errs.clear() pg.goto(f'https://weval-consulting.com/{name}.html', wait_until='domcontentloaded', timeout=10000) time.sleep(1.5) je = len(errs) title = pg.title()[:40] body = len(pg.content()) r = {'name':name,'title':title,'js_errors':je,'body_size':body,'status':'PASS'} # Click test if opts.get('click'): sel = opts['click'] cnt = pg.locator(sel).count() r['buttons'] = cnt if cnt > 0: pg.locator(sel).first.click() time.sleep(5) if opts.get('expect_msgs'): msgs = pg.locator('.msg').count() r['msgs_after_click'] = msgs r['click_works'] = msgs > 0 # Enterprise agents if opts.get('check_agents'): ag = pg.evaluate('() => typeof AG !== "undefined" ? AG.length : 0') r['agents'] = ag # Meeting rooms if opts.get('check_rooms'): rooms = pg.evaluate('() => typeof rooms !== "undefined" ? rooms.length : (typeof RM !== "undefined" ? RM.length : 0)') r['rooms'] = rooms # AI Benchmark leaderboard if opts.get('check_leaderboard'): has_err = pg.locator('text=TypeError').count() has_obj = pg.locator('text=[object Object]').count() r['leaderboard_clean'] = has_err == 0 and has_obj == 0 # Admin buttons if opts.get('check_buttons'): btns = pg.locator('button').count() r['total_buttons'] = btns # Check cards (WEVIA Master) if opts.get('check_cards'): cards = pg.locator('.card, [class*=card]').count() r['cards'] = cards if je > 0: r['status'] = 'WARN' r['errors'] = [e[:60] for e in errs[:3]] results['pages'].append(r) pg.screenshot(path=f'/tmp/pw-deep/ss-{name}.png') except Exception as e: results['pages'].append({'name':name,'status':'FAIL','error':str(e)[:60]}) ctx.close() b.close() # Summary p = sum(1 for x in results['pages'] if x['status'] in ('PASS','WARN')) f = sum(1 for x in results['pages'] if x['status'] == 'FAIL') w = sum(1 for x in results['pages'] if x['status'] == 'WARN') total = len(results['pages']) print(f'DEEP TEST: {p}/{total} PASS | {w} WARN | {f} FAIL') for r in results['pages']: s = '✅' if r['status']=='PASS' else '⚠️' if r['status']=='WARN' else '❌' extras = [] if 'buttons' in r: extras.append(f"{r['buttons']}btns") if 'msgs_after_click' in r: extras.append(f"{r['msgs_after_click']}msgs") if 'agents' in r: extras.append(f"{r['agents']}ag") if 'leaderboard_clean' in r: extras.append('LB:'+('clean' if r['leaderboard_clean'] else 'DIRTY')) if 'total_buttons' in r: extras.append(f"{r['total_buttons']}btns") ex = ' | '.join(extras) print(f" {s} {r['name']}: {r.get('js_errors',0)}err {r.get('body_size',0)//1024}KB {ex}") with open('/var/www/html/api/l99-deep-test.json','w') as f: json.dump(results, f, indent=2)