39 lines
2.8 KiB
JavaScript
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()}
|