import { expect, test } from '@playwright/test' /** * 验证去掉分页、默认 1000 行后的 /ocean/booking。 * * 注意:ERP 的 Vite dep 缓存可能是旧包(曾实测缓存里没有 G3Table), * 若行编辑相关断言失败,先确认缓存已刷新再判断是页面问题。 */ test.describe('/ocean/booking(无分页,1000 行)', () => { test.beforeEach(async ({ page }) => { await page.goto('/ocean/booking') await page.waitForTimeout(1500) }) test('页面渲染表格,且分页器已移除', async ({ page }) => { await expect(page.locator('.booking__title')).toHaveText('订舱单') await expect(page.locator('.g3-table')).toBeVisible() // 分页器不该再存在 await expect(page.locator('.g3-pagination')).toHaveCount(0) // 「每页」选择器也不该存在 await expect(page.locator('.booking__field').filter({ hasText: '每页' })).toHaveCount(0) }) test('数据量选择器默认 1000,且只保留一个下拉', async ({ page }) => { const selects = page.locator('.booking__select') await expect(selects).toHaveCount(1) await expect(selects.first()).toHaveValue('1000') }) test('1000 行数据:虚拟滚动开启,DOM 行数远少于 1000', async ({ page }) => { const stk = page.locator('.g3-table .stk-table').first() // 库开启虚拟滚动时会加 .virtual 类 await expect(stk).toHaveClass(/virtual/) const rendered = await page.locator('.stk-tbody-main tr').count() console.log('DOM ROWS (1000 数据): ' + rendered) expect(rendered).toBeGreaterThan(0) expect(rendered).toBeLessThan(200) }) test('可滚动到底部(数据确实有 1000 行)', async ({ page }) => { const info = await page.locator('.g3-table .stk-table').first().evaluate((el) => { const stk = el as HTMLElement return { scrollH: stk.scrollHeight, clientH: stk.clientHeight } }) console.log('SCROLL: ' + JSON.stringify(info)) // 1000 行 * 32px 行高 ≈ 32000,远大于视口 expect(info.scrollH).toBeGreaterThan(10000) }) test('切换数据量到 100 行后虚拟滚动关闭(低于阈值)', async ({ page }) => { await page.locator('.booking__select').first().selectOption('100') await page.waitForTimeout(600) const stk = page.locator('.g3-table .stk-table').first() await expect(stk).not.toHaveClass(/virtual/) // 100 行全量渲染 await expect(page.locator('.stk-tbody-main tr')).toHaveCount(100) }) })