| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /**
- * 对照实验:不注入任何 localStorage,直接访问远程 SPA
- * 目的:判断"启动即崩"是部署本身的 bug,还是测试注入方式触发
- * 流程:
- * 1. /admin/login → 登录页应正常渲染(不依赖 token)
- * 2. /admin/dashboard → 无 token 应重定向 /login
- * 3. UI 真实登录(填账号密码 + 滑块)→ 看登录后是否也崩
- */
- const { test, expect } = require('@playwright/test');
- var BASE_URL = 'http://cfc.iwintrue.com';
- test('CONTROL: 无注入访问 login + dashboard', async ({ page }) => {
- var consoleMessages = [];
- var pageErrors = [];
- page.on('console', function (msg) {
- consoleMessages.push('[' + msg.type() + '] ' + msg.text().substring(0, 200));
- });
- page.on('pageerror', function (err) {
- pageErrors.push(String(err) + '\nSTACK: ' + (err.stack || '').substring(0, 400));
- });
- // --- 1. login 页 ---
- await page.goto(BASE_URL + '/admin/login', { waitUntil: 'domcontentloaded', timeout: 60000 });
- await page.waitForTimeout(6000);
- console.log('STEP1_LOGIN URL=' + page.url());
- var loginHtml = await page.evaluate(function () {
- var app = document.getElementById('app');
- return app ? app.innerHTML.substring(0, 400) : 'NO #app';
- });
- console.log('STEP1_LOGIN APP_HTML=' + loginHtml);
- var loginVisible = await page.locator('.login-container, .el-form, input[type=password]').count();
- console.log('STEP1_LOGIN_FORM_ELTS=' + loginVisible);
- await page.screenshot({ path: 'test-artifacts/control-1-login.png' });
- // --- 2. dashboard 无 token ---
- await page.goto(BASE_URL + '/admin/dashboard', { waitUntil: 'domcontentloaded', timeout: 60000 });
- await page.waitForTimeout(6000);
- console.log('STEP2_DASH URL=' + page.url());
- await page.screenshot({ path: 'test-artifacts/control-2-dashboard-notoken.png' });
- // --- 3. UI 真实登录 ---
- var inputCount = await page.locator('input').count();
- console.log('STEP3_INPUT_COUNT=' + inputCount);
- // 若在登录页,尝试填表
- var hasPhone = await page.locator('input[placeholder*="手机"], input[placeholder*="账号"], input[type=text]').first().isVisible().catch(function () { return false; });
- console.log('STEP3_HAS_INPUT=' + hasPhone);
- if (await page.locator('input').count() > 0) {
- var inputs = page.locator('input');
- var n = await inputs.count();
- for (var k = 0; k < n; k++) {
- console.log('INPUT_' + k + ' placeholder=' + await inputs.nth(k).getAttribute('placeholder'));
- }
- }
- await page.screenshot({ path: 'test-artifacts/control-3-login-form.png' });
- console.log('--- PAGE ERRORS (' + pageErrors.length + ') ---');
- pageErrors.forEach(function (e) { console.log('ERR: ' + e.substring(0, 500)); });
- console.log('--- CONSOLE (' + consoleMessages.length + ') ---');
- consoleMessages.forEach(function (m) { console.log('CON: ' + m.substring(0, 300)); });
- expect(true).toBeTruthy();
- });
|