WeKnora deployment source with the reviewed wiki identity, summary and recovery fixes
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
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
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
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() }
|
||||
}
|
||||
Reference in New Issue
Block a user