native-environment.spec.ts 3.1 KB

1234567891011121314151617181920
  1. import {test,expect} from '@playwright/test'
  2. import {mkdirSync} from 'node:fs'
  3. test('Web controls the real connected desktop browser and shows native permissions on a narrow viewport',async({page})=>{
  4. const evidence='test-results/native-environment';mkdirSync(evidence,{recursive:true})
  5. await page.goto('/conversations');await page.getByRole('textbox',{name:'账号',exact:true}).fill('fixture');await page.getByRole('textbox',{name:'密码',exact:true}).fill('fixture-pass');await page.getByRole('button',{name:'登录',exact:true}).click()
  6. await page.locator('.desktop-sidebar .sidebar-create-trigger').click();await page.getByRole('menuitem',{name:'新建 Bot',exact:true}).click();const editor=page.getByRole('dialog');await editor.getByRole('textbox',{name:'名称',exact:true}).fill('本机与浏览器验收');await editor.getByRole('button',{name:'保存',exact:true}).click()
  7. await page.getByRole('button',{name:'电脑与定时任务',exact:true}).click()
  8. const panel=page.getByRole('complementary',{name:'机器人电脑面板'})
  9. await expect(panel.getByRole('tab',{name:'本机',exact:true})).toBeEnabled({timeout:15000});await panel.getByRole('tab',{name:'本机',exact:true}).click()
  10. await expect(panel.getByRole('button',{name:'在桌面端授权',exact:true})).toBeVisible();await expect(panel.getByText(/连接电脑:/)).toBeVisible();await page.screenshot({path:evidence+'/desktop-native-permissions.png'})
  11. await panel.getByRole('tab',{name:'仅浏览器',exact:true}).click();await panel.getByRole('button',{name:'打开浏览器',exact:true}).click()
  12. const viewer=page.locator('dialog.computer-panel');await expect(viewer.getByRole('textbox',{name:'浏览器地址',exact:true})).toBeEnabled({timeout:15000})
  13. const url='http://127.0.0.1:18852/__test/browser-page';await viewer.getByRole('textbox',{name:'浏览器地址',exact:true}).fill(url);await viewer.getByRole('button',{name:'前往',exact:true}).click();await expect(viewer.getByRole('tab',{name:'浏览器操作验收',exact:true})).toBeVisible({timeout:15000})
  14. await expect(viewer.locator('.computer-screen img')).toBeVisible();await expect.poll(async()=>(await viewer.locator('.computer-screen img').getAttribute('src'))?.length??0).toBeGreaterThan(14000);await page.screenshot({path:evidence+'/desktop-browser.png'})
  15. await viewer.getByRole('button',{name:'交还并关闭',exact:true}).click()
  16. await page.setViewportSize({width:375,height:812});await page.emulateMedia({colorScheme:'dark',reducedMotion:'reduce'});await panel.getByRole('button',{name:'打开浏览器',exact:true}).scrollIntoViewIfNeeded();await page.screenshot({path:evidence+'/phone-browser-settings.png'})
  17. await panel.getByRole('button',{name:'打开浏览器',exact:true}).click();await expect(viewer.getByRole('textbox',{name:'浏览器地址',exact:true})).toBeEnabled();await expect(viewer.getByRole('textbox',{name:'浏览器地址',exact:true})).toHaveValue(url);await page.screenshot({path:evidence+'/phone-browser.png'})
  18. expect(await viewer.evaluate(el=>el.scrollWidth<=el.clientWidth+2)).toBe(true)
  19. await viewer.getByRole('button',{name:'交还并关闭',exact:true}).click()
  20. })