#!/usr/bin/env python3 """Full-page screenshots of the application in defined states (Playwright/Chromium). Requires the app to be served (e.g. python3 -m http.server 8765 --directory app) or a file:// URL.""" import sys, time from playwright.sync_api import sync_playwright BASE = sys.argv[1] if len(sys.argv) > 1 else 'http://localhost:8765/HierarchicalFractureLab.html' SHOTS = [ ('app_01_initial_structure.png', '?color=level', None), ('app_02_after_run_replay_end.png', '?autorun=1&replay=1', 'run'), ('app_03_run_failure_sequence_colouring.png', '?autorun=1&replay=1&color=failOrder', 'run'), ('app_04_3D_plate_isometric.png', '?extrude=1&view=iso&color=level', None), ('app_05_ordered_preset_run_peak.png', '?preset=B2_ref_ord&autorun=1&replay=0.999&color=util', 'run'), ('app_06_level_selective_preset_run.png', '?preset=E4_L3_dis0.35_rt0.6&autorun=1&replay=1&color=N', 'run'), ('app_07_validation_panel.png', '?color=level', 'validation'), ] with sync_playwright() as p: browser = p.chromium.launch(args=['--use-angle=swiftshader', '--enable-unsafe-swiftshader', '--ignore-gpu-blocklist']) page = browser.new_page(viewport={'width': 1680, 'height': 1000}) for name, q, wait in SHOTS: page.goto(BASE + q); page.wait_for_selector('#geomBadge') if wait == 'run': page.wait_for_selector('body[data-run-done="1"]', timeout=600000) time.sleep(1.0) elif wait == 'validation': page.wait_for_function("document.getElementById('valBadge').textContent.includes('PASS')", timeout=300000) page.evaluate("document.querySelectorAll('#left details').forEach((d,i)=>{ d.open = (i===6); }); document.getElementById('left').scrollTop = 0;") time.sleep(0.5) else: time.sleep(2.5) page.screenshot(path=name); print('saved', name) browser.close()