testFixture.ts 1.93 KB
import { test as base, Page } from '@playwright/test';
import { LoginPage } from '../pages/loginPage';
import { ProductPage } from '../pages/productPage';
import { SalePage } from '../pages/salePage';
import { ConsignmentPage } from '../pages/consignmentPage';

/**
 * 页面对象夹具类型定义
 */
export type PageFixtures = {
  /**
   * 登录页面
   */
  loginPage: LoginPage;
  
  /**
   * 商品管理页面
   */
  productPage: ProductPage;
  
  /**
   * 销售开单页面
   */
  salePage: SalePage;
  
  /**
   * 代销入库页面
   */
  consignmentPage: ConsignmentPage;
};

/**
 * 扩展的测试对象,包含所有页面对象夹具
 */
export const test = base.extend<PageFixtures>({
  // 登录页面
  loginPage: async ({ page }, use) => {
    await use(new LoginPage(page));
  },
  
  // 商品管理页面
  productPage: async ({ page }, use) => {
    await use(new ProductPage(page));
  },
  
  // 销售开单页面
  salePage: async ({ page }, use) => {
    await use(new SalePage(page));
  },
  
  // 代销入库页面
  consignmentPage: async ({ page }, use) => {
    await use(new ConsignmentPage(page));
  },
});

/**
 * 导出 expect 以便在测试中使用
 */
export { expect } from '@playwright/test';

/**
 * 创建一个同时包含认证和页面对象的完整测试夹具
 */
import { test as authTest } from './authFixture';

type FullFixtures = PageFixtures & {
  authenticatedPage: Page;
  authFilePath: string;
};

export const fullTest = authTest.extend<PageFixtures>({
  loginPage: async ({ authenticatedPage }, use) => {
    await use(new LoginPage(authenticatedPage));
  },
  
  productPage: async ({ authenticatedPage }, use) => {
    await use(new ProductPage(authenticatedPage));
  },
  
  salePage: async ({ authenticatedPage }, use) => {
    await use(new SalePage(authenticatedPage));
  },
  
  consignmentPage: async ({ authenticatedPage }, use) => {
    await use(new ConsignmentPage(authenticatedPage));
  },
});