probe-dom-diagnose.mjs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /** 诊断:运行监测模式下,台账分页按钮与异常设备定位入口的真实 DOM 状态。 */
  2. import { cdpLaunch } from '../../../../cockpit-shell-panel-layout/verify/cdp-driver.mjs'
  3. const CHROME = process.env.CHROME_PATH || 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe'
  4. const sleep = (ms) => new Promise((r) => setTimeout(r, ms))
  5. const browser = await cdpLaunch({ executablePath: CHROME, headless: true, width: 1680, height: 950 })
  6. const page = await browser.newPage()
  7. await page.goto('http://127.0.0.1:8000/#/cockpit', { timeout: 60000 })
  8. await sleep(2000)
  9. await page.click('[data-cockpit-intro]').catch(() => {})
  10. await page.waitForFunction(() => ['ready', 'failed', 'disabled'].includes(document.querySelector('.cockpit-shell__map .map-canvas')?.dataset.mapEngine || ''), { timeout: 60000 })
  11. await page.evaluate(() => { [...document.querySelectorAll('button')].find((b) => b.textContent.trim() === '运行监测')?.click() })
  12. await sleep(3000)
  13. const info = await page.evaluate(() => {
  14. const more = document.querySelector('[data-ledger-more]')
  15. const locate = [...document.querySelectorAll('[data-locate-point]')].map((n) => n.dataset.locatePoint)
  16. const cards = [...document.querySelectorAll('[data-ledger-card]')].map((n) => n.dataset.ledgerCard)
  17. const panelIds = [...document.querySelectorAll('[data-panel-id]')].map((n) => n.dataset.panelId)
  18. return {
  19. hasMoreBtn: !!more,
  20. moreText: more?.textContent?.trim() || '',
  21. cards,
  22. locateCodes: locate.slice(0, 20),
  23. panelIds,
  24. ledgerNotes: [...document.querySelectorAll('[data-panel-page-note]')].map((n) => n.textContent.trim()),
  25. }
  26. })
  27. console.log(JSON.stringify(info, null, 2))
  28. // 试一次:点异常设备定位入口(21119740)看能否直接开设备级详情
  29. const clicked = await page.evaluate(() => {
  30. const btn = [...document.querySelectorAll('[data-locate-point]')].find((n) => n.dataset.locatePoint === '21119740')
  31. if (!btn) return 'no-button'
  32. btn.click()
  33. return 'clicked'
  34. })
  35. await sleep(4000)
  36. const after = await page.evaluate(() => {
  37. const card = document.querySelector('[data-point-detail]')
  38. return { clicked: card ? card.dataset.detailLevel : '(none)', device: card?.dataset.deviceCode || '', point: card?.dataset.pointCode || '' }
  39. })
  40. console.log('locate 21119740:', clicked, JSON.stringify(after))
  41. await browser.close()