import { captureScreenshot, expect, test } from './fixtures' const liveAccessToken = process.env.E2E_LIVE_ACCESS_TOKEN?.trim() ?? '' test.use({ trace: 'off', video: 'off' }) test.describe('教学实施真实环境只读联调', () => { test.skip(!liveAccessToken, '未配置 E2E_LIVE_ACCESS_TOKEN,跳过真实 API / KingBase 只读联调') test.beforeEach(async ({ page }) => { await page.addInitScript((accessToken) => { localStorage.removeItem('unreal-tran:web:access-token:v1') localStorage.removeItem('unreal-tran:web:refresh-token:v1') localStorage.removeItem('unreal-tran:web:remember:v1') sessionStorage.setItem('unreal-tran:web:access-token:v1', accessToken) }, liveAccessToken) }) test('六个教学入口读取真实 UAT 保留数据并生成验收截图', async ({ page }, testInfo) => { const visitTaskCenter = async (path: string, uatCode: string, screenshotName: string) => { await page.goto(path) await expect(page).toHaveURL(new RegExp(`${path.replaceAll('/', '\\/')}$`)) await expect(page.getByTestId('teaching-task-center')).toBeVisible() await expect(page.locator('.ttc-hero')).toHaveCount(0) await expect(page.locator('.ttc-assignment-card').first()).toBeVisible() await expect(page.getByText(uatCode, { exact: false }).first()).toBeVisible() await expect.poll(async () => page.locator('.ttc-assignment-card img').first().evaluate((image: HTMLImageElement) => image.complete && image.naturalWidth > 0)).toBe(true) await expect(page.locator('iframe')).toHaveCount(0) await captureScreenshot(page, testInfo, screenshotName) } await visitTaskCenter('/teaching/virtual-training', 'UAT-TEACH-VIRTUAL-001', '真实环境-01-虚拟仿真') await visitTaskCenter('/teaching/physical-training', 'UAT-TEACH-PHYSICAL-001', '真实环境-02-实装实训') await visitTaskCenter('/teaching/confrontation', 'UAT-TEACH-CONFRONTATION-001', '真实环境-03-对抗训练') await page.goto('/teaching/immersive') await expect(page.locator('.teaching-v2-hero')).toHaveCount(0) await expect(page.getByTestId('immersive-device-panel')).toBeVisible() await expect(page.getByTestId('immersive-viewer-panel')).toBeVisible() await expect(page.locator('.immersive-viewer canvas')).toBeVisible({ timeout: 30_000 }) const previewSelector = page.locator('.xr-v2-selection-row .el-select').first() await previewSelector.click() await expect(page.locator('.el-select-dropdown:visible').getByText(/UAT-TEACH-VIRTUAL-00[12]/).first()).toBeVisible() await page.keyboard.press('Escape') await page.locator('.route-view').evaluate((element) => element.scrollTo({ top: 0 })) await expect(page.locator('iframe')).toHaveCount(0) await captureScreenshot(page, testInfo, '真实环境-04-沉浸交互') await visitTaskCenter('/teaching/exams', 'UAT-EXAM-VIRTUAL-001', '真实环境-05-考试测评') await page.goto('/teaching/data-center') await expect(page.locator('.teaching-v2-hero')).toHaveCount(0) await expect(page.getByTestId('analytics-workspace')).toBeVisible() await expect(page.getByTestId('teaching-dashboard-metrics')).toBeVisible() await expect(page.getByTestId('analytics-channel-summary')).toBeVisible() await expect(page.getByTestId('analytics-learner-table')).toBeVisible() await expect(page.getByTestId('analytics-learner-table').locator('tbody tr')).not.toHaveCount(0) await page.getByTestId('analytics-tab-training').click() await expect(page.getByText('UAT-TEACH-VIRTUAL-001', { exact: false }).first()).toBeVisible() await page.locator('.route-view').evaluate((element) => element.scrollTo({ top: 0 })) await expect(page.locator('iframe')).toHaveCount(0) await captureScreenshot(page, testInfo, '真实环境-06-教学数据中心') }) })