'use strict'; const assert = require('assert'); const { saveErrorScreenshot, saveCheckpointScreenshot, _private } = require('../src/utils/screenshot'); (async () => { let waitCalls = 0; let screenshotCalls = 0; const closedPage = { isClosed: () => true, waitForTimeout: async () => { waitCalls++; }, screenshot: async () => { screenshotCalls++; }, }; assert.strictEqual(await saveErrorScreenshot(closedPage, 'closed@example.com', 'unit'), null); assert.strictEqual(await saveCheckpointScreenshot(closedPage, 'closed@example.com', 'unit'), null); assert.strictEqual(waitCalls, 0, '已关闭页面不能继续等待'); assert.strictEqual(screenshotCalls, 0, '已关闭页面不能继续截图'); assert.strictEqual( _private.isTargetClosedError(new Error('page.waitForTimeout: Target page, context or browser has been closed')), true, ); assert.strictEqual(_private.isTargetClosedError(new Error('disk full')), false); let maskSelector = ''; const maskLocators = _private.getSensitiveMaskLocators({ locator: (selector) => { maskSelector = selector; return { selector }; }, }); assert.strictEqual(maskLocators.length, 1); assert(maskSelector.includes('input[name*="password" i]'), '截图必须遮盖已切换为明文类型的密码输入框'); assert(maskSelector.includes('input[autocomplete="one-time-code"]'), '截图必须遮盖动态验证码输入框'); console.log('screenshot_closed_page.test.js: PASS'); })().catch(error => { console.error(error); process.exit(1); });