Files
DOSSIER-STANDALONE/scripts/probe-array.mjs
T
karim ca859c4aa4 Browser-BIM (cad): semantisches Modell, abgeleitete 2D/3D-Sichten, Zeichenwerkzeuge
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.
2026-06-30 20:52:27 +02:00

31 lines
2.1 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 page = await b.newPage();
await page.setViewport({ width: 1200, height: 800, deviceScaleFactor: 2 });
const logs = []; page.on("pageerror", e => logs.push(e.message));
page.on("dialog", async d => { await d.accept("3"); });
await page.goto(URL, { waitUntil: "networkidle0", timeout: 20000 }).catch(()=>{});
await new Promise(r=>setTimeout(r,600));
const clickTool = l => page.evaluate(x => [...document.querySelectorAll("button")].find(b=>b.textContent.trim()===x)?.click(), l);
const click = async (x,y)=>{ await page.mouse.move(x,y); await page.mouse.click(x,y); await new Promise(r=>setTimeout(r,70)); };
const nLines = () => page.evaluate(()=>document.querySelectorAll(".plan-svg line.draw2d").length);
const box = await page.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;
await clickTool("Linie"); await new Promise(r=>setTimeout(r,80));
const A=[cx-120,cy-140], B=[cx+20,cy-140];
await click(...A); await click(...B);
await clickTool("Auswahl"); await new Promise(r=>setTimeout(r,60));
await click((A[0]+B[0])/2, A[1]); // select midpoint
const sel = await page.evaluate(()=>document.querySelectorAll(".plan-svg .plan-grip").length);
await page.keyboard.press("m"); await new Promise(r=>setTimeout(r,80));
await page.keyboard.press("o"); await new Promise(r=>setTimeout(r,200));
const mode = await page.evaluate(()=>document.querySelector(".transform-bar .tf-mode.active .tf-mode-label")?.textContent);
await click(A[0], A[1]); // base
await click(A[0], A[1]+70); // dest (down by ~70px each step)
await new Promise(r=>setTimeout(r,150));
const n = await nLines();
await page.screenshot({ path:"scripts/probe-array.png" });
console.log("selectedGrips:", sel, "activeMode:", mode, "lines(expect 4):", n, logs.length?logs.join("|"):"(no err)");
await b.close();