72 lines
2.7 KiB
JavaScript
72 lines
2.7 KiB
JavaScript
/**
|
||
* 宽屏回归:窄屏修复不能把桌面布局改坏。
|
||
*
|
||
* 特别是两个只该在窄屏生效的东西:
|
||
* - `.tap` 的伪元素命中区(桌面密排工具栏里会互相重叠)
|
||
* - `BackButton`(宽屏列表与详情并排,返回没有意义)
|
||
*
|
||
* 用法:ADMIN_PW=<密码> node client/electron/test/manual/wide-regression.mjs
|
||
*/
|
||
import { openApp, WIDE } from './narrow-probe-helper.mjs';
|
||
|
||
const { browser, page, issues } = await openApp(WIDE);
|
||
const failed = [];
|
||
const chk = (n, ok, note = '') => {
|
||
console.log(` ${ok ? '通过' : '失败'} ${n}${note ? ' — ' + note : ''}`);
|
||
if (!ok) failed.push(n);
|
||
};
|
||
|
||
console.log('宽屏回归(1280px):');
|
||
|
||
const cols = await page.evaluate(() => {
|
||
const root = document.querySelector('#root > div');
|
||
return { n: root?.children.length, first: root?.children[0]?.className?.toString().slice(0, 30) };
|
||
});
|
||
chk('仍是三栏并排', cols.n === 3, `栏数=${cols.n} 首栏=${cols.first}`);
|
||
|
||
// 常驻侧栏是宽屏唯一的退出入口(账号页也有,两处都要在)
|
||
const side = await page.evaluate(() => {
|
||
const s = document.querySelector('#root > div > div');
|
||
const btns = s
|
||
? [...s.querySelectorAll('button')].map(b =>
|
||
(b.getAttribute('title') || b.textContent || '').trim().slice(0, 12)
|
||
)
|
||
: [];
|
||
return { w: s ? Math.round(s.getBoundingClientRect().width) : 0, btns };
|
||
});
|
||
chk('常驻侧栏仍有退出登录', side.btns.some(b => b.includes('退出')), `宽=${side.w}`);
|
||
|
||
// 宽屏不该出现返回按钮
|
||
// 邮件行是 <button class="w-full text-left ...">
|
||
const rows = page.locator('button.w-full.text-left');
|
||
if ((await rows.count()) > 0) await rows.first().click();
|
||
await page.waitForTimeout(1000);
|
||
const backN = await page.locator('button[aria-label="返回"], button[aria-label="会话"]').count();
|
||
chk('没有返回按钮', backN === 0, `${backN} 个`);
|
||
|
||
// .tap 只在 max-width:767px 生效
|
||
const tapWide = await page.evaluate(() => {
|
||
const b = [...document.querySelectorAll('.tap')].find(x => x.getBoundingClientRect().height > 0);
|
||
if (!b) return null;
|
||
const cs = getComputedStyle(b, '::after');
|
||
return { content: cs.content, w: cs.width, h: cs.height };
|
||
});
|
||
chk(
|
||
'.tap 伪元素在宽屏不生效',
|
||
!tapWide || tapWide.content === 'none' || tapWide.w === 'auto',
|
||
JSON.stringify(tapWide)
|
||
);
|
||
|
||
const of = await page.evaluate(() => ({
|
||
d: document.documentElement.clientWidth,
|
||
s: document.documentElement.scrollWidth
|
||
}));
|
||
chk('无横向溢出', of.s <= of.d, `doc=${of.d} scroll=${of.s}`);
|
||
|
||
console.log('\nissues:', issues.length ? issues : '无');
|
||
console.log(failed.length === 0 ? '\n宽屏回归:全部通过' : `\n宽屏回归:${failed.length} 项失败`);
|
||
|
||
await page.close();
|
||
await browser.close();
|
||
process.exit(failed.length === 0 ? 0 : 1);
|