be5d5ede90
refactor: 重构后端查询逻辑和API响应处理 fix: 修复用户角色更新和文件上传问题 test: 添加前端性能测试脚本和E2E测试用例 chore: 更新依赖版本和配置文件 docs: 添加环境检查脚本和测试文档 style: 统一表格标签样式和路由命名 perf: 优化前端页面加载速度和响应时间
205 lines
7.1 KiB
TypeScript
205 lines
7.1 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
import { LoginPage } from './pages/LoginPage';
|
|
import { DashboardPage } from './pages/DashboardPage';
|
|
import { FileManagementPage } from './pages/FileManagementPage';
|
|
|
|
test.describe('文件管理 E2E 测试', () => {
|
|
let loginPage: LoginPage;
|
|
let dashboardPage: DashboardPage;
|
|
let fileManagementPage: FileManagementPage;
|
|
|
|
test.beforeEach(async ({ page }) => {
|
|
loginPage = new LoginPage(page);
|
|
dashboardPage = new DashboardPage(page);
|
|
fileManagementPage = new FileManagementPage(page);
|
|
});
|
|
|
|
test('FILE-001: 管理员查看文件列表', async ({ page }) => {
|
|
await test.step('管理员登录', async () => {
|
|
await loginPage.goto();
|
|
await loginPage.login('admin', 'admin123');
|
|
await expect(page).toHaveURL(/.*dashboard/);
|
|
});
|
|
|
|
await test.step('导航到文件管理页面', async () => {
|
|
await page.goto('/files');
|
|
await page.waitForLoadState('networkidle');
|
|
await page.waitForTimeout(3000);
|
|
});
|
|
|
|
await test.step('验证文件列表页面加载', async () => {
|
|
await expect(fileManagementPage.table).toBeVisible();
|
|
const rowCount = await fileManagementPage.getTableRowCount();
|
|
expect(rowCount).toBeGreaterThanOrEqual(0);
|
|
});
|
|
|
|
await test.step('验证文件表格包含必要列', async () => {
|
|
await expect(fileManagementPage.table).toContainText('文件名');
|
|
await expect(fileManagementPage.table).toContainText('文件大小');
|
|
await expect(fileManagementPage.table).toContainText('上传时间');
|
|
await expect(fileManagementPage.table).toContainText('上传人');
|
|
});
|
|
});
|
|
|
|
test('FILE-002: 上传文件', async ({ page }) => {
|
|
await test.step('管理员登录并导航到文件管理', async () => {
|
|
await loginPage.goto();
|
|
await loginPage.login('admin', 'admin123');
|
|
await fileManagementPage.goto();
|
|
});
|
|
|
|
await test.step('上传测试文件', async () => {
|
|
const testFilePath = './e2e/fixtures/test-file.txt';
|
|
|
|
const uploadButton = page.locator('.el-upload');
|
|
await uploadButton.first().click();
|
|
|
|
const fileInput = page.locator('input[type="file"]');
|
|
await fileInput.setInputFiles(testFilePath);
|
|
await page.waitForTimeout(3000);
|
|
|
|
await expect(fileManagementPage.table).toBeVisible();
|
|
});
|
|
});
|
|
|
|
test('FILE-003: 搜索文件', async ({ page }) => {
|
|
await test.step('管理员登录并导航到文件管理', async () => {
|
|
await loginPage.goto();
|
|
await loginPage.login('admin', 'admin123');
|
|
await fileManagementPage.goto();
|
|
});
|
|
|
|
await test.step('搜索特定文件', async () => {
|
|
await fileManagementPage.searchFile('test');
|
|
await page.waitForTimeout(1000);
|
|
});
|
|
|
|
await test.step('清除搜索条件', async () => {
|
|
await fileManagementPage.clearSearch();
|
|
const rowCount = await fileManagementPage.getTableRowCount();
|
|
expect(rowCount).toBeGreaterThanOrEqual(0);
|
|
});
|
|
});
|
|
|
|
test('FILE-004: 下载文件', async ({ page, context }) => {
|
|
await test.step('管理员登录并导航到文件管理', async () => {
|
|
await loginPage.goto();
|
|
await loginPage.login('admin', 'admin123');
|
|
await fileManagementPage.goto();
|
|
});
|
|
|
|
await test.step('下载文件', async () => {
|
|
const rows = await fileManagementPage.table.locator('.el-table__row').count();
|
|
if (rows > 0) {
|
|
const pagePromise = context.waitForEvent('page');
|
|
await fileManagementPage.downloadFile('test');
|
|
const newPage = await pagePromise;
|
|
expect(newPage).toBeDefined();
|
|
await newPage.close();
|
|
}
|
|
});
|
|
});
|
|
|
|
test('FILE-005: 删除文件', async ({ page }) => {
|
|
await test.step('管理员登录并导航到文件管理', async () => {
|
|
await loginPage.goto();
|
|
await loginPage.login('admin', 'admin123');
|
|
await fileManagementPage.goto();
|
|
});
|
|
|
|
await test.step('删除文件', async () => {
|
|
const rows = await fileManagementPage.table.locator('.el-table__row').count();
|
|
if (rows > 0) {
|
|
const firstRow = fileManagementPage.table.locator('.el-table__row').first();
|
|
const fileName = await firstRow.locator('td').nth(1).textContent();
|
|
|
|
if (fileName) {
|
|
await fileManagementPage.deleteFile(fileName);
|
|
await page.waitForTimeout(1000);
|
|
|
|
await expect(fileManagementPage.table).toBeVisible();
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
test('FILE-006: 验证文件权限控制', async ({ page }) => {
|
|
await test.step('普通用户登录', async () => {
|
|
await loginPage.goto();
|
|
await loginPage.login('admin', 'admin123');
|
|
await expect(page).toHaveURL(/.*dashboard/);
|
|
});
|
|
|
|
await test.step('尝试访问文件管理页面', async () => {
|
|
await page.goto('/files');
|
|
await page.waitForTimeout(2000);
|
|
|
|
const currentURL = page.url();
|
|
if (currentURL.includes('/files')) {
|
|
const rows = await fileManagementPage.table.locator('.el-table__row').count();
|
|
if (rows > 0) {
|
|
await expect(fileManagementPage.table).toBeVisible();
|
|
}
|
|
} else {
|
|
await expect(page).toHaveURL(/.*dashboard/);
|
|
}
|
|
});
|
|
});
|
|
|
|
test('FILE-007: 验证文件列表排序', async ({ page }) => {
|
|
await test.step('管理员登录并导航到文件管理', async () => {
|
|
await loginPage.goto();
|
|
await loginPage.login('admin', 'admin123');
|
|
await fileManagementPage.goto();
|
|
});
|
|
|
|
await test.step('验证文件按上传时间排序', async () => {
|
|
const rows = await fileManagementPage.table.locator('.el-table__row').count();
|
|
if (rows > 0) {
|
|
const firstRow = fileManagementPage.table.locator('.el-table__row').first();
|
|
await expect(firstRow).toBeVisible();
|
|
}
|
|
});
|
|
});
|
|
|
|
test('FILE-008: 验证文件大小显示', async ({ page }) => {
|
|
await test.step('管理员登录并导航到文件管理', async () => {
|
|
await loginPage.goto();
|
|
await loginPage.login('admin', 'admin123');
|
|
await fileManagementPage.goto();
|
|
});
|
|
|
|
await test.step('验证文件大小列显示', async () => {
|
|
await expect(fileManagementPage.table).toContainText('文件大小');
|
|
});
|
|
});
|
|
|
|
test('FILE-009: 验证文件上传人信息', async ({ page }) => {
|
|
await test.step('管理员登录并导航到文件管理', async () => {
|
|
await loginPage.goto();
|
|
await loginPage.login('admin', 'admin123');
|
|
await fileManagementPage.goto();
|
|
});
|
|
|
|
await test.step('验证上传人列显示', async () => {
|
|
await expect(fileManagementPage.table).toContainText('上传人');
|
|
});
|
|
});
|
|
|
|
test('FILE-010: 验证文件操作按钮可见性', async ({ page }) => {
|
|
await test.step('管理员登录并导航到文件管理', async () => {
|
|
await loginPage.goto();
|
|
await loginPage.login('admin', 'admin123');
|
|
await fileManagementPage.goto();
|
|
});
|
|
|
|
await test.step('验证表格可见', async () => {
|
|
await expect(fileManagementPage.table).toBeVisible();
|
|
});
|
|
|
|
await test.step('验证搜索功能可用', async () => {
|
|
const searchInput = page.locator('.search-bar input');
|
|
await expect(searchInput).toBeVisible();
|
|
});
|
|
});
|
|
}); |