membership-system.spec.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /**
  2. * ================================================================
  3. * 场景:会员体系全流程 E2E 测试
  4. * ================================================================
  5. * 用户故事:用户购买/试用会员,管理员配置会员费用
  6. *
  7. * 流程步骤:
  8. * 1. 查看会员等级
  9. * 2. 购买会员
  10. * 3. 领取试用会员
  11. *
  12. * 关键里程碑:
  13. * - [Milestone-1] 会员激活成功
  14. * ================================================================
  15. *
  16. * 运行:npx playwright test tests/e2e/membership-system.spec.js
  17. */
  18. const { test, expect } = require('@playwright/test');
  19. test.describe('【场景流程】会员体系全流程', () => {
  20. // ===== 场景1:查看会员等级 =====
  21. test('[场景1] 查看会员等级 - 期望返回等级列表', async ({ page }) => {
  22. // ========== Given:用户进入会员页 ==========
  23. await page.goto('/#/pages/profile/membership');
  24. await page.waitForLoadState('networkidle');
  25. // ========== When:查看会员等级 ==========
  26. await page.waitForSelector('.level-list, .membership-card', { timeout: 10000 });
  27. // ========== Then:返回等级列表 ========
  28. const levelCards = page.locator('.level-card, .membership-level');
  29. const count = await levelCards.count();
  30. expect(count).toBeGreaterThan(0);
  31. // 验证包含权益信息
  32. const firstCard = levelCards.first();
  33. const benefitTag = firstCard.locator('.benefit-tag, .benefit');
  34. if (await benefitTag.isVisible()) {
  35. const benefitText = await benefitTag.textContent();
  36. expect(benefitText).toBeTruthy();
  37. }
  38. });
  39. // ===== 场景2:购买会员 =====
  40. test('[场景2] 购买会员 - 期望会员激活', async ({ page }) => {
  41. // ========== Given:用户选择会员等级 ==========
  42. await page.goto('/#/pages/profile/membership');
  43. await page.waitForLoadState('networkidle');
  44. // ========== When:购买会员 ==========
  45. await page.waitForSelector('.level-card', { timeout: 10000 });
  46. // 点击购买按钮
  47. const buyBtn = page.locator('.buy-btn, .purchase-btn').first();
  48. if (await buyBtn.isVisible()) {
  49. await buyBtn.click();
  50. }
  51. // 选择支付方式
  52. const payMethod = page.locator('.pay-method:has-text("微信")');
  53. if (await payMethod.isVisible()) {
  54. await payMethod.click();
  55. }
  56. // 确认支付
  57. await page.click('.confirm-btn, .pay-btn');
  58. // ========== Then:Milestone-1 - 会员激活 ========
  59. await page.waitForSelector('.success-tip, .activate-success, .toast-success', { timeout: 15000 });
  60. expect(await page.locator('.success-tip, .activate-success').isVisible()).toBeTruthy();
  61. });
  62. // ===== 场景3:领取试用会员 =====
  63. test('[场景3] 领取试用会员 - 期望试用激活', async ({ page }) => {
  64. // ========== Given:用户进入会员页 ==========
  65. await page.goto('/#/pages/profile/membership');
  66. await page.waitForLoadState('networkidle');
  67. // ========== When:领取试用 ==========
  68. const trialBtn = page.locator('.trial-btn, .free-trial-btn');
  69. if (await trialBtn.isVisible()) {
  70. await trialBtn.click();
  71. }
  72. // 确认领取
  73. const confirmBtn = page.locator('.van-dialog__confirm, .dialog-confirm');
  74. if (await confirmBtn.isVisible()) {
  75. await confirmBtn.click();
  76. }
  77. // ========== Then:试用激活 ========
  78. await page.waitForSelector('.success-tip, .trial-success, .toast-success', { timeout: 10000 });
  79. expect(await page.locator('.success-tip, .trial-success').isVisible()).toBeTruthy();
  80. });
  81. });