Files
workdsh/workdsh-web/scripts/probe-composer-theme.mjs
T
techflag 748234a317 Add 'workdsh-web/' from commit '03b63ea143747b6c75e1f60bace0d9f338918455'
git-subtree-dir: workdsh-web
git-subtree-mainline: d3a7b2143d
git-subtree-split: 03b63ea143
2026-09-26 10:26:35 +08:00

11 lines
2.6 KiB
JavaScript

import {readFile,mkdir,writeFile} from 'node:fs/promises';
import assert from 'node:assert/strict';
import {chromium} from '@playwright/test';
let login;for(let i=0;i<150;i++){login=(await readFile('.test-runtime/upgrade-017/preview-server.log','utf8')).match(/http:\/\/127\.0\.0\.1:18989\/\?token=[\w-]+/)?.[0];if(login)break;await new Promise(r=>setTimeout(r,1000))}assert.ok(login);
const browser=await chromium.launch();const evidence=[];
try{const p=await browser.newPage({viewport:{width:1440,height:1000},colorScheme:'light'});await p.goto(login);await p.getByText('Settings',{exact:true}).click();await p.getByRole('button',{name:'System',exact:true}).click();await p.getByRole('button',{name:'Close',exact:true}).click();
const projects=await p.evaluate(async()=> (await(await fetch('/api/workdsh-projects',{method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify({endpoint:'list',payload:{}})})).json()).value);const project=projects.find(x=>x.name==='Host持久化验证');assert.ok(project);await p.goto('http://127.0.0.1:18989/?workdsh-view=projects&project='+project.id);await p.locator('.wd-p-task-row').first().click();await p.locator('.wd-connector-trigger').waitFor();await mkdir('.artifacts/composer-theme',{recursive:true});
for(const theme of ['light','dark','light']){await p.emulateMedia({colorScheme:theme});await p.waitForTimeout(200);await p.locator('.wd-library-picker-trigger').hover();const hover=await p.locator('.wd-library-picker-trigger').evaluate(e=>{const s=getComputedStyle(e);const span=document.createElement('span');span.style.color='var(--dsw-alias-label-primary)';document.body.append(span);const expected=getComputedStyle(span).color;span.remove();return{color:s.color,expected,bg:s.backgroundColor}});assert.equal(hover.color,hover.expected);await p.screenshot({path:'.artifacts/composer-theme/library-'+theme+'.png'});await p.locator('.wd-connector-trigger').click();await p.locator('.wd-connector-popover').waitFor();const colors=await p.locator('.wd-connector-popover').evaluate(e=>({bg:getComputedStyle(e).backgroundColor,fg:getComputedStyle(e).color}));await p.locator('.wd-connector-popover .picker-row').first().hover();await p.screenshot({path:'.artifacts/composer-theme/connectors-'+theme+'.png'});evidence.push({theme,hover,...colors});await p.locator('.wd-connector-trigger').click();}
assert.notEqual(evidence[0].bg,evidence[1].bg);assert.deepEqual(evidence[0],evidence[2]);await writeFile('.artifacts/composer-theme/result.json',JSON.stringify(evidence,null,2));console.log('PASS native conversation connector surface and library hover light/dark/light');
}finally{await browser.close()}