68 lines
2.4 KiB
Python
Executable File
68 lines
2.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""WEVIA UX Agent v1.0 — Autonomous visual quality checker"""
|
|
import subprocess, json, time, datetime
|
|
|
|
PAGES = [
|
|
'enterprise-model','wevia-meeting-rooms','l99-brain','wevia-cortex',
|
|
'admin','ai-benchmark','oss-discovery','director','sovereign-claude',
|
|
'wevia-master','l99-saas','agents-fleet','agents-valuechain',
|
|
'wevia-vs-opus','realtime-monitor-v3'
|
|
]
|
|
|
|
results = {"timestamp": datetime.datetime.now().isoformat(), "pages": [], "issues": []}
|
|
|
|
for page in PAGES:
|
|
url = f"https://weval-consulting.com/{page}.html"
|
|
try:
|
|
out = subprocess.run([
|
|
"python3", "-c", f"""
|
|
from playwright.sync_api import sync_playwright
|
|
import time
|
|
p=sync_playwright().start()
|
|
b=p.chromium.launch(headless=True)
|
|
pg=b.new_page()
|
|
pg.set_viewport_size({{'width':1440,'height':900}})
|
|
errs=[]
|
|
pg.on('pageerror',lambda e:errs.append(str(e)[:50]))
|
|
pg.goto('{url}',wait_until='domcontentloaded',timeout=10000)
|
|
time.sleep(2)
|
|
# DOM checks
|
|
txt=pg.evaluate('()=>document.body.innerText')
|
|
issues=[]
|
|
if 'undefined' in txt: issues.append('TEXT:undefined')
|
|
if 'NaN' in txt: issues.append('TEXT:NaN')
|
|
if txt.count('0/0')>0: issues.append('TEXT:0/0')
|
|
# Empty badges
|
|
badges=pg.locator('.badge').all_text_contents()
|
|
for b in badges:
|
|
if b.strip() in ['0','?','undefined','null','']: issues.append(f'BADGE_EMPTY:{{b}}')
|
|
# JS errors
|
|
for e in errs: issues.append(f'JS:{{e}}')
|
|
# Screenshot
|
|
pg.screenshot(path='/opt/weval-l99/screenshots/ux-{page}.png')
|
|
import json
|
|
print(json.dumps({{'page':'{page}','js':len(errs),'issues':issues,'size':len(txt)}}))
|
|
b.close();p.stop()
|
|
"""
|
|
], capture_output=True, text=True, timeout=20)
|
|
|
|
if out.stdout.strip():
|
|
data = json.loads(out.stdout.strip())
|
|
results["pages"].append(data)
|
|
if data["issues"]:
|
|
for iss in data["issues"]:
|
|
results["issues"].append({"page": page, "issue": iss})
|
|
except Exception as e:
|
|
results["pages"].append({"page": page, "error": str(e)[:60]})
|
|
|
|
# Summary
|
|
total = len(results["pages"])
|
|
clean = sum(1 for p in results["pages"] if not p.get("issues") and not p.get("error"))
|
|
results["summary"] = {"total": total, "clean": clean, "issues": len(results["issues"])}
|
|
|
|
json.dump(results, open("/opt/weval-l99/ux-agent-results.json","w"), indent=2)
|
|
|
|
print(f"UX AGENT: {clean}/{total} clean | {len(results['issues'])} issues")
|
|
for iss in results["issues"][:10]:
|
|
print(f" {iss['page']}: {iss['issue']}")
|