98 lines
4.5 KiB
Python
98 lines
4.5 KiB
Python
"""WTP final · Infra Live Widget + V80 drawer · Playwright E2E"""
|
|
import time, json
|
|
from pathlib import Path
|
|
from playwright.sync_api import sync_playwright
|
|
|
|
TS = time.strftime("%Y%m%d-%H%M%S")
|
|
OUT = Path(f"/var/www/html/test-report/wtp-final-{TS}")
|
|
OUT.mkdir(parents=True, exist_ok=True)
|
|
results = {"ts": TS, "tests": []}
|
|
|
|
try:
|
|
with sync_playwright() as p:
|
|
browser = p.chromium.launch(headless=True, args=["--no-sandbox"])
|
|
ctx = browser.new_context(
|
|
viewport={"width":1700,"height":1100},
|
|
ignore_https_errors=True,
|
|
record_video_dir=str(OUT),
|
|
record_video_size={"width":1700,"height":1100}
|
|
)
|
|
page = ctx.new_page()
|
|
page.goto(f"https://weval-consulting.com/weval-technology-platform.html?final={TS}", wait_until="networkidle", timeout=25000)
|
|
time.sleep(8)
|
|
|
|
# Test 1: hero + KPIs
|
|
page.screenshot(path=str(OUT/"01-wtp-hero.png"), full_page=False)
|
|
kpis_hero = page.evaluate("""() => {
|
|
const out = {};
|
|
const getTxt = id => {
|
|
const el = document.getElementById(id);
|
|
return el ? (el.textContent || el.innerText || '').replace(/\\s+/g,' ').trim() : null;
|
|
};
|
|
out.agents = getTxt('vm-gauge-agents');
|
|
out.cov = getTxt('vm-gauge-cov');
|
|
out.ethica = getTxt('vm-gauge-ethica');
|
|
out.sovereign = getTxt('vm-gauge-sovereign');
|
|
return out;
|
|
}""")
|
|
results["tests"].append({"test":"hero_kpis", "data":kpis_hero})
|
|
print(f" ✓ Hero KPIs: {kpis_hero}")
|
|
|
|
# Test 2: V80 drawer
|
|
try:
|
|
page.click("#v80-toggle", timeout=3000)
|
|
time.sleep(3)
|
|
page.screenshot(path=str(OUT/"02-v80-drawer-open.png"), full_page=False)
|
|
nav_items = page.evaluate("[...document.querySelectorAll('#v80-drawer a')].length")
|
|
results["tests"].append({"test":"v80_drawer", "nav_items":nav_items})
|
|
print(f" ✓ V80 drawer: {nav_items} nav items")
|
|
# Close drawer
|
|
page.click(".v80-close", timeout=2000)
|
|
time.sleep(2)
|
|
except Exception as e:
|
|
results["tests"].append({"test":"v80_drawer", "err":str(e)[:100]})
|
|
|
|
# Test 3: scroll to Infrastructure Widget
|
|
page.evaluate("document.getElementById('wtp-infra-live')?.scrollIntoView({behavior:'instant',block:'start'})")
|
|
time.sleep(5) # widget fetches data
|
|
page.screenshot(path=str(OUT/"03-infra-widget.png"), full_page=False)
|
|
infra_data = page.evaluate("""() => ({
|
|
servers: document.getElementById('infra-servers')?.textContent,
|
|
gpus: document.getElementById('infra-gpus')?.textContent,
|
|
blade: document.getElementById('infra-blade')?.textContent,
|
|
docker: document.getElementById('infra-docker')?.textContent,
|
|
subdomains: document.getElementById('infra-subdomains')?.textContent,
|
|
load: document.getElementById('infra-load')?.textContent,
|
|
servers_list: document.getElementById('infra-servers-list')?.textContent,
|
|
blade_info: document.getElementById('infra-blade-info')?.textContent,
|
|
servers_detail_count: document.querySelectorAll('#infra-servers-detail div').length
|
|
})""")
|
|
results["tests"].append({"test":"infra_widget", "data":infra_data})
|
|
print(f" ✓ Infra widget: {infra_data}")
|
|
|
|
# Test 4: Full page
|
|
page.evaluate("window.scrollTo(0, 0)")
|
|
time.sleep(2)
|
|
page.screenshot(path=str(OUT/"04-wtp-full.png"), full_page=True)
|
|
|
|
# Test 5: Zoom on infra
|
|
page.evaluate("document.getElementById('wtp-infra-live')?.scrollIntoView({behavior:'smooth',block:'center'})")
|
|
time.sleep(3)
|
|
page.screenshot(path=str(OUT/"05-infra-centered.png"), full_page=False)
|
|
|
|
ctx.close()
|
|
browser.close()
|
|
|
|
videos = list(OUT.glob("*.webm"))
|
|
results["video"] = videos[0].name if videos else None
|
|
pngs = list(OUT.glob("*.png"))
|
|
results["screenshots"] = {p.name: p.stat().st_size for p in pngs}
|
|
results["total_png_size"] = sum(p.stat().st_size for p in pngs)
|
|
print(f"\n ✓ screenshots={len(pngs)} video={results['video']}")
|
|
|
|
with open(OUT/"results.json","w") as f:
|
|
json.dump(results, f, indent=2, default=str)
|
|
print(json.dumps({"tests_passed": len([t for t in results["tests"] if "err" not in t]), "tests_failed": len([t for t in results["tests"] if "err" in t])}, indent=2))
|
|
except Exception as e:
|
|
print(f"ERR: {e}")
|