No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 

28 líneas
2.2 KiB

  1. import { chromium } from '@playwright/test'
  2. import fs from 'node:fs'
  3. import { api, localCredentials } from './review-api.mjs'
  4. const login = await api('/api/auth/v1/auth/login', undefined, { ...localCredentials(), roleCode: 'admin', rememberMe: false })
  5. if (login.status !== 200) throw new Error('Probe login failed')
  6. const token = login.data.accessToken
  7. const manifest = JSON.parse(fs.readFileSync('reports/review-20260905/live/cleanup-manifest.json', 'utf8'))
  8. const task = manifest.tasks.find(x => x.code.endsWith('-PHYSICAL'))
  9. const browser = await chromium.launch({ channel: process.env.REVIEW_BROWSER_CHANNEL || undefined })
  10. try {
  11. const context = await browser.newContext({ viewport: { width: 1440, height: 1000 } })
  12. await context.addInitScript(value => sessionStorage.setItem('unreal-tran:web:access-token:v1', value), token)
  13. const page = await context.newPage()
  14. const events = []
  15. page.on('response', response => { if (response.url().includes('.mp4')) events.push({ path: new URL(response.url()).pathname, status: response.status(), type: response.headers()['content-type'] }) })
  16. page.on('requestfailed', request => { if (request.url().includes('.mp4')) events.push({ path: new URL(request.url()).pathname, failed: request.failure()?.errorText }) })
  17. await page.goto(`http://127.0.0.1:6180/teaching/physical-training/preview/${task.id}`)
  18. await page.locator('[data-physical-video="primary"]').waitFor()
  19. await page.waitForTimeout(10000)
  20. const video = await page.locator('[data-physical-video="primary"]').evaluate(element => ({ source: element.getAttribute('src'), currentSrc: element.currentSrc, readyState: element.readyState, networkState: element.networkState, error: element.error ? {code: element.error.code, message: element.error.message} : null, mp4: element.canPlayType('video/mp4; codecs="avc1.42E01E"'), webm: element.canPlayType('video/webm; codecs="vp9"') }))
  21. const result = { video, events }
  22. fs.writeFileSync(`reports/review-20260905/diagnostics/video-probe-${process.env.REVIEW_BROWSER_CHANNEL || 'chromium'}.json`, JSON.stringify(result, null, 2))
  23. console.log(JSON.stringify(result))
  24. } finally {
  25. await browser.close()
  26. await api('/api/auth/v1/auth/logout', token, {})
  27. }