basic.spec.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import { test, expect } from '@playwright/test';
  2. /**
  3. * 基础页面测试
  4. */
  5. test.describe('基础页面测试', () => {
  6. test('页面加载测试', async ({ page }) => {
  7. await page.goto('/');
  8. // 检查页面标题
  9. await expect(page).toHaveTitle(/若依管理系统/);
  10. // 检查页面是否成功加载
  11. await expect(page.locator('body')).toBeVisible();
  12. });
  13. test('登录页面测试', async ({ page }) => {
  14. await page.goto('/login');
  15. // 检查登录表单元素是否存在
  16. await expect(page.locator('input[type="text"], input[type="username"]')).toBeVisible();
  17. await expect(page.locator('input[type="password"]')).toBeVisible();
  18. await expect(page.locator('button[type="submit"]')).toBeVisible();
  19. });
  20. test('响应式布局测试', async ({ page }) => {
  21. await page.goto('/');
  22. // 测试桌面视图
  23. await page.setViewportSize({ width: 1920, height: 1080 });
  24. await expect(page.locator('body')).toBeVisible();
  25. // 测试平板视图
  26. await page.setViewportSize({ width: 768, height: 1024 });
  27. await expect(page.locator('body')).toBeVisible();
  28. // 测试移动端视图
  29. await page.setViewportSize({ width: 375, height: 667 });
  30. await expect(page.locator('body')).toBeVisible();
  31. });
  32. });
  33. /**
  34. * Cesium 地图测试
  35. */
  36. test.describe('Cesium 地图测试', () => {
  37. test('地图容器加载测试', async ({ page }) => {
  38. await page.goto('/');
  39. // 等待 Cesium 容器加载
  40. await page.waitForSelector('#cesiumContainer, .cesium-viewer, [class*="cesium"]', { timeout: 10000 });
  41. // 检查地图容器是否可见
  42. const cesiumContainer = page.locator('#cesiumContainer, .cesium-viewer, [class*="cesium"]').first();
  43. await expect(cesiumContainer).toBeVisible();
  44. });
  45. test('地图交互测试', async ({ page }) => {
  46. await page.goto('/');
  47. // 等待地图加载
  48. await page.waitForSelector('#cesiumContainer, .cesium-viewer, [class*="cesium"]', { timeout: 10000 });
  49. // 模拟鼠标交互
  50. const cesiumContainer = page.locator('#cesiumContainer, .cesium-viewer, [class*="cesium"]').first();
  51. await cesiumContainer.click({ position: { x: 100, y: 100 } });
  52. // 检查是否有交互响应
  53. await page.waitForTimeout(1000);
  54. });
  55. });
  56. /**
  57. * 性能测试
  58. */
  59. test.describe('性能测试', () => {
  60. test('页面加载性能', async ({ page }) => {
  61. const startTime = Date.now();
  62. await page.goto('/');
  63. await page.waitForLoadState('networkidle');
  64. const loadTime = Date.now() - startTime;
  65. console.log(`页面加载时间: ${loadTime}ms`);
  66. // 页面应该在合理时间内加载完成
  67. expect(loadTime).toBeLessThan(10000);
  68. });
  69. test('资源加载测试', async ({ page }) => {
  70. const failedRequests: string[] = [];
  71. page.on('requestfailed', (request) => {
  72. failedRequests.push(request.url());
  73. });
  74. await page.goto('/');
  75. await page.waitForLoadState('networkidle');
  76. // 检查是否有失败的请求
  77. if (failedRequests.length > 0) {
  78. console.warn('失败的请求:', failedRequests);
  79. }
  80. // 允许少量请求失败,但不能太多
  81. expect(failedRequests.length).toBeLessThan(5);
  82. });
  83. });