2
0

test-setup.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import { test as base, type Browser, type Page } from '@playwright/test';
  2. import { readFileSync } from 'fs';
  3. import { join, dirname } from 'path';
  4. import { fileURLToPath } from 'url';
  5. import { AdminLoginPage } from '../pages/admin/login.page';
  6. import { DashboardPage } from '../pages/admin/dashboard.page';
  7. import { UserManagementPage } from '../pages/admin/user-management.page';
  8. import { DisabilityPersonManagementPage } from '../pages/admin/disability-person.page';
  9. import { RegionManagementPage } from '../pages/admin/region-management.page';
  10. import { OrderManagementPage } from '../pages/admin/order-management.page';
  11. import { PlatformManagementPage } from '../pages/admin/platform-management.page';
  12. import { CompanyManagementPage } from '../pages/admin/company-management.page';
  13. import { ChannelManagementPage } from '../pages/admin/channel-management.page';
  14. import { EnterpriseMiniPage } from '../pages/mini/enterprise-mini.page';
  15. import { TalentMiniPage } from '../pages/mini/talent-mini.page';
  16. const __filename = fileURLToPath(import.meta.url);
  17. const __dirname = dirname(__filename);
  18. const testUsers = JSON.parse(readFileSync(join(__dirname, '../fixtures/test-users.json'), 'utf-8'));
  19. type Fixtures = {
  20. browser: Browser;
  21. // 跨端测试专用 fixtures(使用独立的 browser context)
  22. adminPage: Page;
  23. talentMiniPage: Page;
  24. // 原有的 Page Object fixtures
  25. adminLoginPage: AdminLoginPage;
  26. dashboardPage: DashboardPage;
  27. userManagementPage: UserManagementPage;
  28. disabilityPersonPage: DisabilityPersonManagementPage;
  29. regionManagementPage: RegionManagementPage;
  30. orderManagementPage: OrderManagementPage;
  31. platformManagementPage: PlatformManagementPage;
  32. companyManagementPage: CompanyManagementPage;
  33. channelManagementPage: ChannelManagementPage;
  34. enterpriseMiniPage: EnterpriseMiniPage;
  35. talentMiniPageObj: TalentMiniPage;
  36. testUsers: typeof testUsers;
  37. };
  38. export const test = base.extend<Fixtures>({
  39. browser: async ({ browser }, use) => {
  40. await use(browser);
  41. },
  42. // 跨端测试专用 fixtures - 使用独立的 browser context
  43. adminPage: async ({ browser }, use) => {
  44. const context = await browser.newContext();
  45. const page = await context.newPage();
  46. await use(page);
  47. await context.close();
  48. },
  49. talentMiniPage: async ({ browser }, use) => {
  50. const context = await browser.newContext();
  51. const page = await context.newPage();
  52. await use(page);
  53. await context.close();
  54. },
  55. // 原有的 Page Object fixtures(保持兼容性)
  56. adminLoginPage: async ({ page }, use) => {
  57. await use(new AdminLoginPage(page));
  58. },
  59. dashboardPage: async ({ page }, use) => {
  60. await use(new DashboardPage(page));
  61. },
  62. userManagementPage: async ({ page }, use) => {
  63. await use(new UserManagementPage(page));
  64. },
  65. disabilityPersonPage: async ({ page }, use) => {
  66. await use(new DisabilityPersonManagementPage(page));
  67. },
  68. regionManagementPage: async ({ page }, use) => {
  69. await use(new RegionManagementPage(page));
  70. },
  71. orderManagementPage: async ({ page }, use) => {
  72. await use(new OrderManagementPage(page));
  73. },
  74. platformManagementPage: async ({ page }, use) => {
  75. await use(new PlatformManagementPage(page));
  76. },
  77. companyManagementPage: async ({ page }, use) => {
  78. await use(new CompanyManagementPage(page));
  79. },
  80. channelManagementPage: async ({ page }, use) => {
  81. await use(new ChannelManagementPage(page));
  82. },
  83. enterpriseMiniPage: async ({ page }, use) => {
  84. await use(new EnterpriseMiniPage(page));
  85. },
  86. // 重命名为 talentMiniPageObj 以避免与新的 talentMiniPage fixture 冲突
  87. talentMiniPageObj: async ({ page }, use) => {
  88. await use(new TalentMiniPage(page));
  89. },
  90. // 自定义 fixture 不需要依赖其他 fixtures 时,使用空对象解构参数
  91. // eslint-disable-next-line no-empty-pattern
  92. testUsers: async ({}, use) => {
  93. await use(testUsers);
  94. },
  95. });
  96. // 在所有测试前设置测试模式标志
  97. test.beforeEach(async ({ page }) => {
  98. await page.addInitScript(() => {
  99. (window as Window & { __PLAYWRIGHT_TEST__?: boolean }).__PLAYWRIGHT_TEST__ = true;
  100. });
  101. });
  102. export { expect } from '@playwright/test';