Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

63 linhas
3.9 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, heading: string, uatCode: string, screenshotName: string) => {
  16. await page.goto(path)
  17. await expect(page).toHaveURL(new RegExp(`${path.replaceAll('/', '\\/')}$`))
  18. await expect(page.getByRole('heading', { name: heading, exact: true })).toBeVisible()
  19. await expect(page.locator('.ttc-assignment-card').first()).toBeVisible()
  20. await expect(page.getByText(uatCode, { exact: false }).first()).toBeVisible()
  21. await expect.poll(async () => page.locator('.ttc-assignment-card img').first().evaluate((image: HTMLImageElement) => image.complete && image.naturalWidth > 0)).toBe(true)
  22. await expect(page.locator('iframe')).toHaveCount(0)
  23. await captureScreenshot(page, testInfo, screenshotName)
  24. }
  25. await visitTaskCenter('/teaching/virtual-training', '虚拟仿真任务管理', 'UAT-TEACH-VIRTUAL-001', '真实环境-01-虚拟仿真')
  26. await visitTaskCenter('/teaching/physical-training', '实装实训任务管理', 'UAT-TEACH-PHYSICAL-001', '真实环境-02-实装实训')
  27. await visitTaskCenter('/teaching/confrontation', '对抗训练任务管理', 'UAT-TEACH-CONFRONTATION-001', '真实环境-03-对抗训练')
  28. await page.goto('/teaching/immersive')
  29. await expect(page.getByRole('heading', { name: '沉浸交互与外设联调', exact: true })).toBeVisible()
  30. await expect(page.getByTestId('immersive-device-panel')).toBeVisible()
  31. await expect(page.getByTestId('immersive-viewer-panel')).toBeVisible()
  32. await expect(page.locator('.immersive-viewer canvas')).toBeVisible({ timeout: 30_000 })
  33. const previewSelector = page.locator('.xr-v2-selection-row .el-select').first()
  34. await previewSelector.click()
  35. await expect(page.locator('.el-select-dropdown:visible').getByText(/UAT-TEACH-VIRTUAL-00[12]/).first()).toBeVisible()
  36. await page.keyboard.press('Escape')
  37. await page.locator('.route-view').evaluate((element) => element.scrollTo({ top: 0 }))
  38. await expect(page.locator('iframe')).toHaveCount(0)
  39. await captureScreenshot(page, testInfo, '真实环境-04-沉浸交互')
  40. await visitTaskCenter('/teaching/exams', '考试测评', 'UAT-EXAM-VIRTUAL-001', '真实环境-05-考试测评')
  41. await page.goto('/teaching/data-center')
  42. await expect(page.getByRole('heading', { name: '教学数据中心', exact: true })).toBeVisible()
  43. await expect(page.getByTestId('teaching-dashboard-metrics')).toBeVisible()
  44. await expect(page.getByTestId('analytics-channel-summary')).toBeVisible()
  45. await expect(page.getByTestId('analytics-learner-table')).toBeVisible()
  46. await expect(page.getByTestId('analytics-learner-table').locator('tbody tr')).not.toHaveCount(0)
  47. await page.getByTestId('analytics-tab-training').click()
  48. await expect(page.getByText('UAT-TEACH-VIRTUAL-001', { exact: false }).first()).toBeVisible()
  49. await page.locator('.route-view').evaluate((element) => element.scrollTo({ top: 0 }))
  50. await expect(page.locator('iframe')).toHaveCount(0)
  51. await captureScreenshot(page, testInfo, '真实环境-06-教学数据中心')
  52. })
  53. })