feat: v2.7 3D 开合滑杆真实按压驱动验证

- el-slider 非原生 range(无 click 跳转), 改为按压手柄-移动-释放完整序列
- 开合两态截图对比脚本 open-compare.mjs
- 滑杆 v-model 正常回写
This commit is contained in:
HHY
2026-09-22 06:53:53 -07:00
parent e3b4056855
commit 530b4b9e5a
6 changed files with 73 additions and 0 deletions
+36
View File
@@ -0,0 +1,36 @@
// 拖拽移动验证: node scripts/drag-verify.mjs <token>
import puppeteer from 'puppeteer-core'
const EDGE = 'C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe'
const token = process.argv[2]
const browser = await puppeteer.launch({
executablePath: EDGE,
headless: 'new',
args: ['--window-size=1440,900', '--enable-unsafe-swiftshader', '--use-gl=angle', '--use-angle=swiftshader'],
defaultViewport: { width: 1440, height: 900 },
})
const page = await browser.newPage()
await page.goto(`http://localhost:8000/combine?token=${encodeURIComponent(token)}`, { waitUntil: 'networkidle2' })
await page.waitForSelector('.lib-item')
await page.click('.lib-item')
await new Promise(r => setTimeout(r, 600))
const box = await (await page.$('.canvas-box')).boundingBox()
const cx = box.x + box.width / 2, cy = box.y + box.height / 2
// 读取当前单元位置(通过画布标注无法直接读, 用截图对比 + __ccDebug)
const before = await page.evaluate(() => window.__ccDebug.getSelected())
// 真实拖拽: 按下 → 分步移动 → 松开
await page.mouse.move(cx, cy)
await page.mouse.down()
for (let i = 1; i <= 10; i++) {
await page.mouse.move(cx + i * 15, cy - i * 8)
await new Promise(r => setTimeout(r, 30))
}
await page.mouse.up()
await new Promise(r => setTimeout(r, 400))
const after = await page.evaluate(() => window.__ccDebug.getSelected())
await page.screenshot({ path: 'D:/Code/huamenchuang/shots/drag-after.png' })
console.log('拖拽前选中:', before, '| 拖拽后选中:', after)
console.log('拖拽流程完成(若单元移动, 截图可见)')
await browser.close()
+36
View File
@@ -0,0 +1,36 @@
// 3D 开合对比验证 v2(真实点击滑轨): node scripts/open-compare.mjs <token> <开度0-100>
import puppeteer from 'puppeteer-core'
const EDGE = 'C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe'
const token = process.argv[2]
const target = Math.min(100, Math.max(0, parseInt(process.argv[3] || '100')))
const browser = await puppeteer.launch({
executablePath: EDGE,
headless: 'new',
args: ['--window-size=1440,900', '--enable-unsafe-swiftshader', '--use-gl=angle', '--use-angle=swiftshader'],
defaultViewport: { width: 1440, height: 900 },
})
const page = await browser.newPage()
await page.goto(`http://localhost:8000/threed?token=${encodeURIComponent(token)}`, { waitUntil: 'networkidle2' })
await new Promise(r => setTimeout(r, 2200))
const cv = await (await page.$('.threed-wrap canvas')).boundingBox()
await page.screenshot({ path: 'D:/Code/huamenchuang/shots/open-0.png', clip: cv })
// 真实按压-移动-释放驱动 el-slider(滑块手柄为 div, 需完整按压序列)
const handle = await page.$('.ctrl .el-slider__button')
const hr = await handle.boundingBox()
await page.mouse.move(hr.x + hr.width / 2, hr.y + hr.height / 2)
await page.mouse.down()
const runway = await page.$('.ctrl .el-slider__runway')
const rr = await runway.boundingBox()
const steps = 12
for (let i = 1; i <= steps; i++) {
const t = i / steps
await page.mouse.move(rr.x + rr.width * target / 100 * 1, hr.y + hr.height / 2, { steps: 1 })
await new Promise(r2 => setTimeout(r2, 40))
}
await page.mouse.up()
await new Promise(r => setTimeout(r, 1500))
await page.screenshot({ path: 'D:/Code/huamenchuang/shots/open-100.png', clip: cv })
console.log(`✓ 开合 ${target}% 两态截图完成`)
await browser.close()