ca859c4aa4
Standalone-Browser-Port von DOSSIER. Enthaelt das semantische Modell mit Plan-/3D-Ableitung, Zeichen- und Editierwerkzeuge, Rhino-artiges Befehlssystem, dockbares Panel-System, Resource-Manager, DXF/.lin/.pat-Import, i18n (de/en) sowie Projektdokumentation und Probe-Harness.
31 lines
2.6 KiB
JavaScript
31 lines
2.6 KiB
JavaScript
import puppeteer from "puppeteer";
|
|
const URL = process.env.PROBE_URL || "http://localhost:5173/";
|
|
const b = await puppeteer.launch({ headless:"new", args:["--no-sandbox","--use-gl=swiftshader","--enable-unsafe-swiftshader"] });
|
|
const p = await b.newPage();
|
|
await p.setViewport({ width:1200, height:800, deviceScaleFactor:2 });
|
|
await p.emulateMediaFeatures([{ name:"prefers-color-scheme", value:"dark" }]);
|
|
const logs=[]; p.on("pageerror",e=>logs.push(e.message));
|
|
await p.goto(URL,{waitUntil:"networkidle0",timeout:20000}).catch(()=>{});
|
|
await new Promise(r=>setTimeout(r,600));
|
|
// Auf den "Ebenen"-Tab wechseln (TabStrip braucht Pointer-Events).
|
|
await p.evaluate(()=>{ const t=[...document.querySelectorAll(".tab")].find(e=>e.textContent.trim()==="Ebenen"); ["pointerdown","pointerup","click"].forEach(ev=>t.dispatchEvent(new MouseEvent(ev,{bubbles:true}))); });
|
|
await new Promise(r=>setTimeout(r,250));
|
|
const initialActive = await p.evaluate(()=>document.querySelector(".cat-row.active .cat-name")?.textContent ?? null);
|
|
// "Türen/Fenster" anklicken.
|
|
await p.evaluate(()=>{ const r=[...document.querySelectorAll(".cat-name")].find(e=>e.textContent.includes("Türen"))?.closest(".cat-row"); r?.click(); });
|
|
await new Promise(r=>setTimeout(r,250));
|
|
const afterActive = await p.evaluate(()=>document.querySelector(".cat-row.active .cat-name")?.textContent ?? null);
|
|
const statusLayer = await p.evaluate(()=>{ const f=[...document.querySelectorAll(".sb-field")].find(x=>x.textContent.trim().startsWith("EBENE")||x.textContent.includes("Ebene")); return f?.querySelector(".sb-val")?.textContent; });
|
|
// Jetzt eine Linie zeichnen → sollte auf Kategorie 21 (blau #5080c8) landen.
|
|
await p.evaluate(()=>[...document.querySelectorAll("button")].find(x=>x.textContent.trim()==="Linie")?.click());
|
|
await new Promise(r=>setTimeout(r,80));
|
|
const box = await p.evaluate(()=>{const r=document.querySelector(".plan-svg").getBoundingClientRect();return{x:r.x,y:r.y,w:r.width,h:r.height};});
|
|
const cx=box.x+box.w/2, cy=box.y+box.h/2;
|
|
for(const [x,y] of [[cx-120,cy-30],[cx+120,cy+30]]){ await p.mouse.move(x,y); await p.mouse.click(x,y); await new Promise(r=>setTimeout(r,60)); }
|
|
await p.evaluate(()=>[...document.querySelectorAll("button")].find(x=>x.textContent.trim()==="Auswahl")?.click());
|
|
await new Promise(r=>setTimeout(r,80));
|
|
const lineColor = await p.evaluate(()=>document.querySelector(".plan-svg line.draw2d")?.getAttribute("stroke"));
|
|
await p.screenshot({ path:"scripts/probe-layer.png" });
|
|
console.log("initialActive:", initialActive, "afterActive:", afterActive, "statusLayer:", statusLayer, "lineColor(expect #5080c8):", lineColor, logs.length?logs.join("|"):"(no err)");
|
|
await b.close();
|