Files
xinmi/scripts/workbench_content_browser.cjs
T
yawan f7fc992f57
Anydoc / anydoc parser engine (push) Canceled after 0s
App / Format, vet, test, and build (push) Canceled after 0s
CLI / test (macos-latest / go 1.26) (push) Canceled after 0s
CLI / test (ubuntu-latest / go 1.26) (push) Canceled after 0s
CLI / test (windows-latest / go 1.26) (push) Canceled after 0s
Build and Push Docker Image / build-ui (push) Canceled after 0s
Build and Push Docker Image / build-docreader (push) Canceled after 0s
Build and Push Docker Image / build-sandbox (push) Canceled after 0s
Build and Push Docker Image / build-app (amd64, linux/amd64, ubuntu-latest) (push) Canceled after 0s
Build and Push Docker Image / build-app (arm64, linux/arm64, ubuntu-24.04-arm) (push) Canceled after 0s
DocReader / Python tests and Go client tests (push) Canceled after 0s
Build & Publish (dsh-weknora) / Typecheck, test, pack (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (pinned) (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (latest, advisory) (push) Canceled after 0s
Frontend / Test, type-check, and build (push) Canceled after 0s
Go Lint Cache / warm lint cache (.) (push) Canceled after 0s
Go Lint Cache / warm lint cache (cli) (push) Canceled after 0s
Go Lint Cache / warm lint cache (client) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.10) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.11) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.12) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.13) (push) Canceled after 0s
Build and Push Docker Image / merge (push) Canceled after 0s
Build & Publish (dsh-weknora) / Publish to npm (push) Canceled after 0s
Build & Publish (mcp-server) / Build sdist + wheel (push) Canceled after 0s
Build & Publish (mcp-server) / Publish to PyPI (push) Canceled after 0s
WeKnora deployment source with the reviewed wiki identity, summary and recovery fixes
2026-09-22 16:19:06 +08:00

50 lines
3.3 KiB
JavaScript

const assert = require('node:assert/strict')
const path = require('node:path')
const { chromium } = require('/Users/macclaw/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/node_modules/playwright')
module.exports = async function contentBrowser(auth, directory, map) {
const browser = await chromium.launch({ headless: true, channel: 'chrome' })
let page
const errors=[]
try {
const context=await browser.newContext({viewport:{width:1440,height:1000}})
await context.addInitScript(a=>{
for(const [key,value] of Object.entries({weknora_user:JSON.stringify({...a.user,tenant_id:String(a.user.tenant_id)}),weknora_tenant:JSON.stringify({...a.active_tenant,id:String(a.active_tenant.id)}),weknora_token:a.token,weknora_refresh_token:a.refresh_token,weknora_memberships:JSON.stringify(a.memberships)})) localStorage.setItem(key,value)
},auth)
page=await context.newPage()
page.on('pageerror',error=>errors.push(error.message))
await page.goto(`http://127.0.0.1:15173/platform/training-maps?resource=${map.id}`)
await page.locator('.guide__close').click()
const status=page.locator('.generation-status').first()
const waitDone=()=>status.getByText('已完成',{exact:true}).first().waitFor({timeout:30000})
await page.getByRole('button',{name:'全屏查看',exact:true}).click()
const preview=page.locator('.t-dialog:visible')
await preview.getByRole('button',{name:'批改方案',exact:true}).last().click()
const advice=page.locator('.t-dialog:visible').filter({hasText:'第 2 天的方案批改建议'})
await advice.locator('textarea').fill('保持第一天的先修关系,第二天补充练习框架。')
await advice.getByRole('button',{name:'提交给 AI 修改',exact:true}).click()
await status.locator('.t-progress').waitFor()
await page.reload()
await waitDone()
await page.getByRole('button',{name:'确认方案',exact:true}).click()
await page.getByRole('button',{name:'方案已确认',exact:true}).waitFor({timeout:30000})
const day2=page.locator('.t-collapse-panel').filter({hasText:'第 2 天 · 实际应用'})
await day2.getByRole('button',{name:'生成每日框架',exact:true}).click()
await day2.getByRole('button',{name:'重新生成每日框架',exact:true}).waitFor({timeout:30000})
await waitDone()
await page.screenshot({path:path.join(directory,'training-map-desktop.png')})
await page.getByRole('button',{name:'全屏查看',exact:true}).click()
await page.locator('.t-dialog:visible').getByText('判断依据',{exact:false}).first().waitFor()
await page.screenshot({path:path.join(directory,'training-map-preview.png')})
await page.keyboard.press('Escape')
await page.setViewportSize({width:390,height:844})
await page.screenshot({path:path.join(directory,'training-map-mobile.png')})
assert.ok(await page.evaluate(()=>document.documentElement.scrollWidth<=innerWidth+2),'Training map page overflows mobile')
assert.deepEqual(errors,[],'Browser JavaScript errors')
return '导图真实浏览器全屏批改、刷新恢复任务、确认及第二天框架生成;桌面/手机截图'
} catch(error) {
if(page) await page.screenshot({path:path.join(directory,'training-map-browser-failure.png')})
throw error
} finally { await browser.close() }
}