feat(web-platform): release V0.5.2 前端优化
This commit is contained in:
@@ -43,8 +43,8 @@ test('显示中文平台骨架并加载单文件模型', async ({page}) => {
|
||||
page.on('response', (response) => { if (response.status() >= 400 || response.url().endsWith('.wasm')) console.log(`[browser:response] ${response.status()} ${response.url()} ${response.headers()['content-type'] ?? ''}`); });
|
||||
await page.goto('/');
|
||||
await page.setViewportSize({width:1024,height:768});
|
||||
const toolBox=await page.getByRole('toolbar',{name:'视口交互模式'}).boundingBox(),playBox=await page.getByRole('button',{name:'▶ 播放'}).boundingBox();
|
||||
expect(toolBox&&playBox&&toolBox.x+toolBox.width<=playBox.x).toBeTruthy();
|
||||
const resetCameraBox=await page.getByRole('button',{name:'相机复位'}).boundingBox(),playBox=await page.getByRole('button',{name:'▶ 播放'}).boundingBox();
|
||||
expect(resetCameraBox&&playBox&&resetCameraBox.x+resetCameraBox.width<=playBox.x).toBeTruthy();
|
||||
await page.getByRole('button',{name:'更多工作台操作'}).click();await expect(page.getByRole('menuitem',{name:'工作台设置'})).toBeVisible();await page.keyboard.press('Escape');
|
||||
await page.setViewportSize({width:1440,height:900});
|
||||
await expect(page.getByRole('heading', {name: 'MuJoCo Web 仿真平台'})).toBeVisible();
|
||||
@@ -77,6 +77,9 @@ test('显示中文平台骨架并加载单文件模型', async ({page}) => {
|
||||
});
|
||||
|
||||
await expect(page.getByText('WASM 已加载')).toBeVisible({timeout: 30_000});
|
||||
await page.getByRole('button',{name:'显示设置'}).click();
|
||||
const displayDialog=page.getByRole('dialog',{name:'视图显示设置'});await expect(displayDialog).toBeVisible();await expect(displayDialog.getByRole('switch')).toHaveCount(7);
|
||||
const centerOfMassSwitch=displayDialog.getByRole('switch',{name:/^质心/});await centerOfMassSwitch.click();await expect(centerOfMassSwitch).toHaveAttribute('aria-checked','true');await page.keyboard.press('Escape');await expect(displayDialog).toBeHidden();
|
||||
await page.getByRole('button',{name:'通知中心'}).click();await expect(page.getByRole('dialog',{name:'通知中心'})).toContainText('模型加载完成');await page.getByText('事件日志').click();await expect(page.getByRole('dialog',{name:'诊断与事件日志'})).toBeVisible();await page.keyboard.press('Escape');
|
||||
await page.getByRole('button',{name:/FPS .*物理/}).click();
|
||||
await expect(page.getByRole('dialog',{name:'性能详情'})).toBeVisible();
|
||||
@@ -102,6 +105,28 @@ test('显示中文平台骨架并加载单文件模型', async ({page}) => {
|
||||
await expect(page.getByRole('button',{name:'▶ 播放'})).toBeVisible();
|
||||
});
|
||||
|
||||
test('窄视口默认保留完整视口并可按需打开侧栏',async({page})=>{
|
||||
await page.setViewportSize({width:800,height:700});
|
||||
await page.goto('/');
|
||||
await expect(page.getByRole('main')).toBeInViewport();
|
||||
await expect(page.getByRole('button',{name:'显示工程面板'})).toBeVisible();
|
||||
await expect(page.getByRole('button',{name:'显示属性面板'})).toBeVisible();
|
||||
await page.getByRole('button',{name:'显示属性面板'}).click();
|
||||
await expect(page.getByRole('complementary').filter({hasText:'导入模型后显示属性'})).toBeVisible();
|
||||
});
|
||||
|
||||
test('工作区布局与视口显示偏好在刷新后保留',async({page})=>{
|
||||
await page.setViewportSize({width:1440,height:900});
|
||||
await page.goto('/');
|
||||
await page.getByRole('button',{name:'隐藏工程面板'}).click();
|
||||
await page.getByRole('button',{name:'显示设置'}).click();
|
||||
await page.getByRole('switch',{name:/^坐标系/}).click();
|
||||
await page.reload();
|
||||
await expect(page.getByRole('button',{name:'显示工程面板'})).toBeVisible();
|
||||
await page.getByRole('button',{name:'显示设置'}).click();
|
||||
await expect(page.getByRole('switch',{name:/^坐标系/})).toHaveAttribute('aria-checked','true');
|
||||
});
|
||||
|
||||
test('转换后的 MJCF 可编辑并重新载入', async ({page}) => {
|
||||
await page.goto('/');
|
||||
await page.locator('input[type="file"]').first().setInputFiles({name:'model.xml',mimeType:'text/xml',buffer:Buffer.from(SIMPLE_MODEL)});
|
||||
@@ -120,6 +145,24 @@ test('转换后的 MJCF 可编辑并重新载入', async ({page}) => {
|
||||
await expect(page.getByRole('button',{name:'导出 MJCF'})).toHaveCount(0);
|
||||
});
|
||||
|
||||
test('关闭已修改的 MJCF 前要求确认',async({page})=>{
|
||||
await page.goto('/');
|
||||
await page.locator('input[type="file"]').first().setInputFiles({name:'model.xml',mimeType:'text/xml',buffer:Buffer.from(SIMPLE_MODEL)});
|
||||
await expect(page.getByText('WASM 已加载')).toBeVisible({timeout:30_000});
|
||||
await page.getByRole('button',{name:'源代码'}).click();
|
||||
const editorDialog=page.getByRole('dialog',{name:'转换后的 MJCF 编辑器'});
|
||||
await editorDialog.locator('.monaco-editor').click({position:{x:240,y:120}});
|
||||
await page.keyboard.press('Control+End');await page.keyboard.insertText('\n');
|
||||
await editorDialog.getByRole('button',{name:'关闭源代码编辑器'}).click();
|
||||
const confirm=page.getByRole('dialog',{name:'放弃未保存的修改?'});
|
||||
await expect(confirm).toBeVisible();
|
||||
await confirm.getByRole('button',{name:'继续编辑'}).click();
|
||||
await expect(editorDialog).toBeVisible();
|
||||
await editorDialog.getByRole('button',{name:'关闭源代码编辑器'}).click();
|
||||
await page.getByRole('dialog',{name:'放弃未保存的修改?'}).getByRole('button',{name:'放弃修改'}).click();
|
||||
await expect(editorDialog).toHaveCount(0);
|
||||
});
|
||||
|
||||
test('加载包含 include、OBJ、STL 与 PNG 的工程', async ({page}) => {
|
||||
await page.goto('/');
|
||||
await page.locator('input[type="file"]').first().setInputFiles([
|
||||
@@ -150,7 +193,7 @@ test('加载引用 OBJ 的 URDF 工程', async ({page}) => {
|
||||
await expect(page.getByLabel('URDF 基座类型')).toHaveValue('floating');
|
||||
await page.getByRole('button',{name:'通知中心'}).click();
|
||||
const notifications=page.getByRole('dialog',{name:'通知中心'});
|
||||
await expect(notifications).toContainText('URDF 兼容处理');
|
||||
await expect(notifications).toContainText(/模型已加载 · \d+ 项兼容调整/);
|
||||
await expect(notifications).toContainText(/URDF 已转换为 MJCF(浮动基座),并整体平移/);
|
||||
await page.keyboard.press('Escape');
|
||||
await expect(page.getByLabel('显示碰撞几何')).not.toBeChecked();
|
||||
|
||||
Reference in New Issue
Block a user