Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 

65 righe
3.8 KiB

  1. import { captureScreenshot, expect, test } from './fixtures'
  2. const liveAccessToken = process.env.E2E_LIVE_ACCESS_TOKEN?.trim() ?? ''
  3. test.use({ trace: 'off', video: 'off' })
  4. test.describe('教学实施真实环境只读联调', () => {
  5. test.skip(!liveAccessToken, '未配置 E2E_LIVE_ACCESS_TOKEN,跳过真实 API / KingBase 只读联调')
  6. test.beforeEach(async ({ page }) => {
  7. await page.addInitScript((accessToken) => {
  8. localStorage.removeItem('unreal-tran:web:access-token:v1')
  9. localStorage.removeItem('unreal-tran:web:refresh-token:v1')
  10. localStorage.removeItem('unreal-tran:web:remember:v1')
  11. sessionStorage.setItem('unreal-tran:web:access-token:v1', accessToken)
  12. }, liveAccessToken)
  13. })
  14. test('六个教学入口读取真实 UAT 保留数据并生成验收截图', async ({ page }, testInfo) => {
  15. const visitTaskCenter = async (path: string, uatCode: string, screenshotName: string) => {
  16. await page.goto(path)
  17. await expect(page).toHaveURL(new RegExp(`${path.replaceAll('/', '\\/')}$`))
  18. await expect(page.getByTestId('teaching-task-center')).toBeVisible()
  19. await expect(page.locator('.ttc-hero')).toHaveCount(0)
  20. await expect(page.locator('.ttc-assignment-card').first()).toBeVisible()
  21. await expect(page.getByText(uatCode, { exact: false }).first()).toBeVisible()
  22. await expect.poll(async () => page.locator('.ttc-assignment-card img').first().evaluate((image: HTMLImageElement) => image.complete && image.naturalWidth > 0)).toBe(true)
  23. await expect(page.locator('iframe')).toHaveCount(0)
  24. await captureScreenshot(page, testInfo, screenshotName)
  25. }
  26. await visitTaskCenter('/teaching/virtual-training', 'UAT-TEACH-VIRTUAL-001', '真实环境-01-虚拟仿真')
  27. await visitTaskCenter('/teaching/physical-training', 'UAT-TEACH-PHYSICAL-001', '真实环境-02-实装实训')
  28. await visitTaskCenter('/teaching/confrontation', 'UAT-TEACH-CONFRONTATION-001', '真实环境-03-对抗训练')
  29. await page.goto('/teaching/immersive')
  30. await expect(page.locator('.teaching-v2-hero')).toHaveCount(0)
  31. await expect(page.getByTestId('immersive-device-panel')).toBeVisible()
  32. await expect(page.getByTestId('immersive-viewer-panel')).toBeVisible()
  33. await expect(page.locator('.immersive-viewer canvas')).toBeVisible({ timeout: 30_000 })
  34. const previewSelector = page.locator('.xr-v2-selection-row .el-select').first()
  35. await previewSelector.click()
  36. await expect(page.locator('.el-select-dropdown:visible').getByText(/UAT-TEACH-VIRTUAL-00[12]/).first()).toBeVisible()
  37. await page.keyboard.press('Escape')
  38. await page.locator('.route-view').evaluate((element) => element.scrollTo({ top: 0 }))
  39. await expect(page.locator('iframe')).toHaveCount(0)
  40. await captureScreenshot(page, testInfo, '真实环境-04-沉浸交互')
  41. await visitTaskCenter('/teaching/exams', 'UAT-EXAM-VIRTUAL-001', '真实环境-05-考试测评')
  42. await page.goto('/teaching/data-center')
  43. await expect(page.locator('.teaching-v2-hero')).toHaveCount(0)
  44. await expect(page.getByTestId('analytics-workspace')).toBeVisible()
  45. await expect(page.getByTestId('teaching-dashboard-metrics')).toBeVisible()
  46. await expect(page.getByTestId('analytics-channel-summary')).toBeVisible()
  47. await expect(page.getByTestId('analytics-learner-table')).toBeVisible()
  48. await expect(page.getByTestId('analytics-learner-table').locator('tbody tr')).not.toHaveCount(0)
  49. await page.getByTestId('analytics-tab-training').click()
  50. await expect(page.getByText('UAT-TEACH-VIRTUAL-001', { exact: false }).first()).toBeVisible()
  51. await page.locator('.route-view').evaluate((element) => element.scrollTo({ top: 0 }))
  52. await expect(page.locator('iframe')).toHaveCount(0)
  53. await captureScreenshot(page, testInfo, '真实环境-06-教学数据中心')
  54. })
  55. })