60 lines
3.0 KiB
JavaScript
60 lines
3.0 KiB
JavaScript
// 格条设计器端到端验证: 订单详情 → 编辑 → 点选玻璃格 → 格条对话框 → 预设应用 → 截图
|
|
// 用法: node verify-decbar.mjs <token>
|
|
import puppeteer from 'puppeteer-core'
|
|
const browser = await puppeteer.launch({
|
|
executablePath: 'C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe',
|
|
headless: 'new',
|
|
args: ['--window-size=1440,900', '--enable-unsafe-swiftshader'],
|
|
defaultViewport: { width: 1440, height: 900 },
|
|
})
|
|
const page = await browser.newPage()
|
|
page.on('pageerror', e => console.log(`[JS异常] ${String(e).slice(0, 200)}`))
|
|
const token = process.argv[2]
|
|
await page.goto(`http://localhost:8000/orders?token=${encodeURIComponent(token)}`, { waitUntil: 'networkidle2' })
|
|
await new Promise(r => setTimeout(r, 1500))
|
|
|
|
// 打开第一行订单图纸
|
|
const rows = await page.$$('.el-table__body-wrapper .el-table__row')
|
|
if (!rows.length) { console.log('✗ 无订单行'); process.exit(1) }
|
|
const btns = await rows[0].$$('button')
|
|
for (const b of btns) {
|
|
const t = await b.evaluate(el => el.textContent.trim())
|
|
if (t === '图纸') { await b.click(); break }
|
|
}
|
|
await new Promise(r => setTimeout(r, 1800))
|
|
|
|
// 进入编辑模式
|
|
const editBtn = await page.evaluateHandle(() => [...document.querySelectorAll('button')].find(b => b.textContent.includes('编辑分格')))
|
|
await editBtn.asElement()?.click()
|
|
await new Promise(r => setTimeout(r, 800))
|
|
|
|
// 点击画布若干位置直到选中玻璃格(格条按钮出现)
|
|
const box = await (await page.$('.canvas-box')).boundingBox()
|
|
const cx = box.x + box.width / 2, cy = box.y + box.height / 2
|
|
const offsets = [[-0.18, -0.15], [0.18, -0.15], [-0.18, 0.15], [0.18, 0.15], [0, 0.2], [0, -0.2], [-0.25, 0], [0.25, 0]]
|
|
let decBtn = null
|
|
for (const [dx, dy] of offsets) {
|
|
await page.mouse.click(cx + box.width * dx, cy + box.height * dy)
|
|
await new Promise(r => setTimeout(r, 500))
|
|
decBtn = await page.evaluateHandle(() => [...document.querySelectorAll('button')].find(b => b.textContent.trim() === '格条'))
|
|
if (await decBtn.asElement()) break
|
|
// 换位置前先取消当前选中(点 HUD 外空白不行, 直接再点别处即可)
|
|
}
|
|
if (!(await decBtn.asElement())) { console.log('✗ 格条按钮未出现(未选中玻璃格)'); await browser.close(); process.exit(1) }
|
|
await decBtn.asElement().click()
|
|
await new Promise(r => setTimeout(r, 800))
|
|
|
|
// 选第 5 个预设(欧式古典 3x3) + 应用
|
|
const presets = await page.$$('.dec-preset')
|
|
if (presets.length < 8) { console.log(`✗ 预设数量异常: ${presets.length}`); process.exit(1) }
|
|
await presets[4].click()
|
|
await new Promise(r => setTimeout(r, 300))
|
|
await page.evaluateHandle(() => [...document.querySelectorAll('.el-dialog button')].find(b => b.textContent.includes('应用'))).then(h => h.asElement()?.click())
|
|
await new Promise(r => setTimeout(r, 800))
|
|
|
|
await page.screenshot({ path: 'D:/Code/huamenchuang/shots/verify-decbar-2d.png', clip: box })
|
|
console.log('✓ 2D 格条渲染截图完成')
|
|
|
|
// 3D 同窗型验证: 打开渲染/3D 页选同样板? 直接验证 2D 即可, 3D 走 validate3d
|
|
await browser.close()
|