const { chromium } = require('playwright'); const fs = require('fs'); (async () => { const browser = await chromium.launch({ headless: true, executablePath: 'C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe' }); const page = await browser.newPage({ viewport: { width: 1400, height: 1000 } }); const errors = []; page.on('pageerror', error => errors.push(error.message)); await page.goto('http://127.0.0.1:8931/AI%E5%BF%AB%E9%80%9F%E6%8A%A5%E4%BB%B7_Demo2.html?v=drag-restore-test', { waitUntil: 'load' }); const image = fs.readFileSync('C:/Users/miao/Downloads/494f54100a93c5a6e0c90f404c597514.jpeg').toString('base64'); await page.evaluate(data => { qUploadedDrawing = { name: 'restore-test.jpeg', size: data.length, type: 'image/jpeg' }; qUploadedDrawingUrl = 'data:image/jpeg;base64,' + data; qUploadedDrawingDataUrl = qUploadedDrawingUrl; qStartAnalysis(); }, image); await page.waitForTimeout(600); await page.evaluate(() => { document.querySelectorAll('.q-furniture-tool').forEach(tool => { tool.ondragstart = null; tool.onclick = null; }); const workspace = document.getElementById('q-floorplan-layout-workspace'); workspace.ondrop = null; workspace.ondragover = null; qStartAnalysis(); }); await page.waitForTimeout(100); const tool = page.locator('.q-furniture-tool').filter({ hasText: '玄关柜' }).first(); const drawing = page.locator('#q-ai-cleaned-img'); const workspace = page.locator('#q-floorplan-layout-workspace'); const drawingBox = await drawing.boundingBox(); const workspaceBox = await workspace.boundingBox(); await tool.dragTo(workspace, { targetPosition: { x: drawingBox.x - workspaceBox.x + drawingBox.width * .45, y: drawingBox.y - workspaceBox.y + drawingBox.height * .55 } }); await page.waitForTimeout(200); const placed = await page.evaluate(() => ({ count: qFurnitureLayout.length, type: qFurnitureLayout[0] && qFurnitureLayout[0].type, visible: document.querySelectorAll('.q-furniture-v3').length })); console.log(JSON.stringify({ placed, errors })); await browser.close(); })().catch(error => { console.error(error); process.exit(1); });