capture-supplements.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /* eslint-disable */
  2. // B 类补截:每张图独立 try-catch
  3. const { chromium } = require('playwright')
  4. const path = require('path')
  5. const BASE = 'http://localhost:8080'
  6. const OUT_DIR = path.resolve(__dirname, '../../prd/汇丰银行/screenshots')
  7. async function shot(page, name, full = false) {
  8. await page.screenshot({ path: path.join(OUT_DIR, name + '.png'), fullPage: full })
  9. console.log('✓', name)
  10. }
  11. async function safe(label, fn) {
  12. try { await fn() } catch (e) { console.log('✗', label, '—', e.message.split('\n')[0]) }
  13. }
  14. ;(async () => {
  15. const browser = await chromium.launch({ headless: true })
  16. const context = await browser.newContext({ viewport: { width: 1800, height: 1125 }, deviceScaleFactor: 2 })
  17. const page = await context.newPage()
  18. await page.goto(BASE + '/#/login', { waitUntil: 'domcontentloaded' })
  19. await page.evaluate(() => {
  20. localStorage.setItem('token', 'mock-token-' + Date.now())
  21. localStorage.setItem('username', 'admin')
  22. })
  23. // ---- 详情页(3 张)----
  24. for (const item of [
  25. { name: 'crowd-task-view', url: '/#/customization/hsbc/crowd-tasks/view/00000120251224' },
  26. { name: 'rule-group-view', url: '/#/customization/hsbc/rule-groups/view/RG20260401001' },
  27. { name: '4-grant-campaign-view', url: '/#/customization/hsbc/equity-grant-campaign/view/P000001' }
  28. ]) {
  29. await safe(item.name, async () => {
  30. await page.goto(BASE + item.url, { waitUntil: 'domcontentloaded' })
  31. await page.waitForTimeout(1200)
  32. await shot(page, item.name, true)
  33. })
  34. }
  35. // ---- 添加权益 4 个分支 ----
  36. const goAdd = async () => {
  37. await page.goto(BASE + '/#/customization/hsbc/equity-products/add', { waitUntil: 'domcontentloaded' })
  38. await page.waitForTimeout(800)
  39. }
  40. await safe('2-2-equity-add-source-rongshu', async () => {
  41. await goAdd()
  42. await page.locator('label.el-radio:has-text("荣数商品")').first().click()
  43. await page.waitForTimeout(400)
  44. await shot(page, '2-2-equity-add-source-rongshu', true)
  45. })
  46. await safe('2-2-equity-add-third-list', async () => {
  47. await goAdd()
  48. await page.locator('label.el-radio:has-text("第三方")').first().click()
  49. await page.waitForTimeout(400)
  50. await shot(page, '2-2-equity-add-third-list', true)
  51. })
  52. await safe('2-2-equity-add-third-detail', async () => {
  53. await goAdd()
  54. await page.locator('label.el-radio:has-text("第三方")').first().click()
  55. await page.waitForTimeout(300)
  56. await page.locator('label.el-radio-button:has-text("有")').first().click()
  57. await page.waitForTimeout(400)
  58. await shot(page, '2-2-equity-add-third-detail', true)
  59. })
  60. await safe('2-2-equity-add-third-miniprogram', async () => {
  61. await goAdd()
  62. await page.locator('label.el-radio:has-text("第三方")').first().click()
  63. await page.waitForTimeout(300)
  64. await page.locator('.el-form-item:has-text("外部权益链接") .el-select').click()
  65. await page.waitForTimeout(300)
  66. await page.locator('.el-select-dropdown__item:has-text("小程序链接")').click()
  67. await page.waitForTimeout(400)
  68. await shot(page, '2-2-equity-add-third-miniprogram', true)
  69. })
  70. // ---- 关键弹窗 ----
  71. // 下架确认(权益A 已上架 + 审核通过)
  72. await safe('dialog-offshelf-confirm', async () => {
  73. await page.goto(BASE + '/#/customization/hsbc/equity-products', { waitUntil: 'domcontentloaded' })
  74. await page.waitForTimeout(1000)
  75. // 通过权益A 这一行的"下架"按钮
  76. await page.locator('tr:has-text("权益A") button:has-text("下架")').first().click({ force: true })
  77. await page.waitForTimeout(500)
  78. await shot(page, 'dialog-offshelf-confirm', false)
  79. await page.locator('.el-message-box__btns button:has-text("取消")').click({ force: true }).catch(() => {})
  80. await page.waitForTimeout(300)
  81. })
  82. // 删除确认(权益F 草稿状态)
  83. await safe('dialog-delete-confirm', async () => {
  84. await page.goto(BASE + '/#/customization/hsbc/equity-products', { waitUntil: 'domcontentloaded' })
  85. await page.waitForTimeout(1000)
  86. await page.locator('tr:has-text("权益F(草稿)") button.el-button--text:has(i.el-icon-more)').first().click({ force: true })
  87. await page.waitForTimeout(500)
  88. await page.evaluate(() => {
  89. const el = [...document.querySelectorAll('.more-actions-item')]
  90. .find(e => e.textContent.trim() === '删除' && e.offsetParent !== null)
  91. el && el.click()
  92. })
  93. await page.waitForTimeout(500)
  94. await shot(page, 'dialog-delete-confirm', false)
  95. await page.locator('.el-message-box__btns button:has-text("取消")').click({ force: true }).catch(() => {})
  96. await page.waitForTimeout(300)
  97. })
  98. // 调整顺序气泡(权益A 行)
  99. await safe('popover-adjust-order', async () => {
  100. await page.goto(BASE + '/#/customization/hsbc/equity-products', { waitUntil: 'domcontentloaded' })
  101. await page.waitForTimeout(1000)
  102. await page.locator('tr:has-text("权益A") button.el-button--text:has(i.el-icon-more)').first().click({ force: true })
  103. await page.waitForTimeout(500)
  104. await page.evaluate(() => {
  105. const el = [...document.querySelectorAll('.more-actions-item')]
  106. .find(e => e.textContent.trim() === '调整显示顺序' && e.offsetParent !== null)
  107. el && el.click()
  108. })
  109. await page.waitForTimeout(500)
  110. await shot(page, 'popover-adjust-order', false)
  111. // 关闭:点空白处
  112. await page.mouse.click(10, 10).catch(() => {})
  113. await page.waitForTimeout(300)
  114. })
  115. // 设置显示页面对话框(信用卡列表)
  116. await safe('dialog-show-pages', async () => {
  117. await page.goto(BASE + '/#/customization/hsbc/credit-card-equity', { waitUntil: 'domcontentloaded' })
  118. await page.waitForTimeout(1000)
  119. await page.locator('button:has-text("设置显示页面")').first().click({ force: true })
  120. await page.waitForTimeout(700)
  121. await shot(page, 'dialog-show-pages', false)
  122. await page.locator('.el-dialog__footer button:has-text("取消")').click({ force: true }).catch(() => {})
  123. await page.waitForTimeout(300)
  124. })
  125. // 生成链接弹窗
  126. await safe('dialog-equity-link', async () => {
  127. await page.goto(BASE + '/#/customization/hsbc/equity-products', { waitUntil: 'domcontentloaded' })
  128. await page.waitForTimeout(1000)
  129. await page.locator('tr:has-text("权益A") button.el-button--text:has(i.el-icon-more)').first().click({ force: true })
  130. await page.waitForTimeout(500)
  131. await page.evaluate(() => {
  132. const el = [...document.querySelectorAll('.more-actions-item')]
  133. .find(e => e.textContent.trim() === '生成链接' && e.offsetParent !== null)
  134. el && el.click()
  135. })
  136. await page.waitForTimeout(700)
  137. await shot(page, 'dialog-equity-link', false)
  138. await page.locator('.el-dialog__headerbtn').click({ force: true }).catch(() => {})
  139. await page.waitForTimeout(300)
  140. })
  141. // 荣数商品选择弹窗
  142. await safe('dialog-rongshu-product', async () => {
  143. await page.goto(BASE + '/#/customization/hsbc/equity-products/add', { waitUntil: 'domcontentloaded' })
  144. await page.waitForTimeout(1000)
  145. await page.locator('label.el-radio:has-text("荣数商品")').first().click()
  146. await page.waitForTimeout(500)
  147. await page.locator('button:has-text("选择")').first().click({ force: true })
  148. await page.waitForTimeout(800)
  149. await shot(page, 'dialog-rongshu-product', false)
  150. })
  151. await browser.close()
  152. console.log('\nB 类截图完成。')
  153. })()