Initial commit: Receipt Studio desktop application
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
import { createServer } from 'vite'
|
||||
import { build } from 'esbuild'
|
||||
import { _electron as electron,expect } from '@playwright/test'
|
||||
import electronPath from 'electron'
|
||||
import path from 'node:path'
|
||||
import fs from 'node:fs/promises'
|
||||
for(const entry of ['index','preload'])await build({entryPoints:['src/main/'+entry+'.ts'],outfile:'dist/main/'+entry+'.cjs',bundle:true,platform:'node',format:'cjs',external:['electron'],sourcemap:true})
|
||||
const server=await createServer({server:{host:'127.0.0.1',port:5174,strictPort:true}})
|
||||
await server.listen()
|
||||
const profile=path.join(process.cwd(),'.qa','dev-window-profile')
|
||||
await fs.mkdir(profile,{recursive:true})
|
||||
const env={...process.env,ELECTRON_RENDERER_URL:'http://127.0.0.1:5174'}
|
||||
delete env.ELECTRON_RUN_AS_NODE
|
||||
let desktop
|
||||
try{
|
||||
desktop=await electron.launch({executablePath:electronPath,args:['.','--user-data-dir='+profile],cwd:process.cwd(),env,timeout:30000})
|
||||
const page=await desktop.firstWindow();page.setDefaultTimeout(15000)
|
||||
await expect(page.getByText('把表格交给收据工坊')).toBeVisible({timeout:30000})
|
||||
expect(await page.evaluate(()=>typeof window.receipts?.importExcel)).toBe('function')
|
||||
expect(await desktop.evaluate(({BrowserWindow})=>BrowserWindow.getAllWindows()[0].isVisible())).toBe(true)
|
||||
await desktop.evaluate(({BrowserWindow})=>{const w=BrowserWindow.getAllWindows().find(w=>w.webContents.getURL().includes('/index.html'));w.focus();w.webContents.sendInputEvent({type:'keyDown',keyCode:'F12'});w.webContents.sendInputEvent({type:'keyUp',keyCode:'F12'})})
|
||||
await expect.poll(()=>desktop.evaluate(({BrowserWindow})=>BrowserWindow.getAllWindows().find(w=>w.webContents.getURL().includes('/index.html'))?.webContents.isDevToolsOpened())).toBe(true)
|
||||
await desktop.evaluate(({BrowserWindow})=>BrowserWindow.getAllWindows().find(w=>w.webContents.getURL().includes('/index.html'))?.webContents.closeDevTools())
|
||||
await fs.writeFile('.qa/dev-window-result.json',JSON.stringify({passed:true,visible:true,rendererReady:true,desktopApi:true,f12:true},null,2))
|
||||
console.log('Development window verified: visible, ready, desktop bridge and F12.')
|
||||
}finally{if(desktop)await desktop.close();await server.close()}
|
||||
Reference in New Issue
Block a user