LazyBoy2/tests/desktop_controls_live_ui.mjs

39 lines
2.8 KiB
JavaScript

// Opt-in: inspect the real desktop without typing or changing its clipboard.
import { chromium } from '../tools/playwright/node_modules/playwright/index.mjs';
import assert from 'node:assert/strict';
const browser=await chromium.launch({headless:true,args:["--disable-features=LocalNetworkAccessChecks"]});
try {
const page=await browser.newPage({viewport:{width:1440,height:900},hasTouch:true});page.setDefaultTimeout(15000);page.on("pageerror",e=>console.error(e.message));
await page.goto(process.env.LAZYBOY_TEST_UI_URL||'http://127.0.0.1:8787');
const iframe=page.locator('iframe.desktop-frame');await iframe.waitFor({timeout:30000});
const frame=await (await iframe.elementHandle()).contentFrame();
await frame.waitForFunction(async()=>{const {default:ui}=await import('./app/ui.js');return ui.rfb?._rfbConnectionState==='connected'},undefined,{timeout:30000});
await page.waitForTimeout(2000);
const live=page.frameLocator('iframe.desktop-frame');
await page.screenshot({path:'.run/desktop-controls-inspect.png'});
assert.equal(await live.locator('#noVNC_container').evaluate(el=>getComputedStyle(el).borderBottomRightRadius),'0px');
assert.equal(await live.locator('#lazyboy-tools').isVisible(),false);
await page.screenshot({path:'.run/desktop-controls-desktop.png'});
await page.locator('.computer-expand').click();
await page.setViewportSize({width:390,height:844});
const mobile=page.frameLocator('iframe.desktop-frame');
await page.locator('.computer-overlay .computer-hud').waitFor({state:'hidden',timeout:30000});
await mobile.locator('canvas').waitFor();
await mobile.locator('#lazyboy-trackpad').waitFor();
const before=await mobile.locator('canvas').boundingBox();
await mobile.getByRole('button',{name:'放大',exact:true}).click();
const after=await mobile.locator('canvas').boundingBox();assert.ok(after.width>before.width*1.2);
await page.screenshot({path:'.run/desktop-mobile-trackpad.png'});
await mobile.getByRole('button',{name:'剪貼簿 / 輸入'}).click();
await page.screenshot({path:'.run/desktop-controls-mobile.png'});
await page.evaluate(()=>document.documentElement.dataset.theme='light');
await mobile.locator('html[data-theme=light]').waitFor();
assert.equal(await mobile.locator('#lazyboy-tools').evaluate(el=>getComputedStyle(el).backgroundColor),'rgb(247, 247, 248)');
await page.screenshot({path:'.run/desktop-controls-mobile-light.png'});
await mobile.getByRole('button',{name:'關閉',exact:true}).click();
await page.setViewportSize({width:844,height:390});
await mobile.locator('html[data-landscape=true]').waitFor();
await page.screenshot({path:'.run/desktop-mobile-landscape.png'});
console.log('PASS desktop without toolbar, real noVNC zoom, phone trackpad, landscape left controls and theme sync');
}finally{await Promise.all(browser.contexts().map(c=>c.unrouteAll({behavior:"ignoreErrors"})));await browser.close()}