You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

25 regels
2.3 KiB

  1. import fs from 'node:fs/promises';
  2. import path from 'node:path';
  3. import {chromium,expect} from '@playwright/test';
  4. import {login} from './role-permissions-live.mjs';
  5. const dir=path.resolve('reports/bridge-controls-review-20260915');await fs.mkdir(dir,{recursive:true});
  6. const signed=await login('root');
  7. const browser=await chromium.launch({channel:'msedge',headless:true,args:['--enable-unsafe-swiftshader']});
  8. const page=await browser.newPage({viewport:{width:1440,height:1000}});
  9. await page.addInitScript(s=>{sessionStorage.setItem('unreal-tran:web:access-token:v1',s.accessToken);sessionStorage.setItem('unreal-tran:web:refresh-token:v1',s.refreshToken);},signed);
  10. await page.route(/\/src\/features\/virtual-training-legacy\/upstream\/views\/training\.js(?:\?|$)/,async route=>{
  11. const response=await route.fetch();await route.fulfill({response,body:await response.text()+`
  12. globalThis.__controlSurvey={
  13. data(){const e=activeTraining;return [...e.parts].filter(([id])=>id.startsWith('front-pump-')).map(([id,o])=>{const b=physicalBounds(o);const meshes=[];o.traverse(n=>{if(n.isMesh&&!n.userData.trainingPickProxy){n.geometry.computeBoundingBox();meshes.push({name:n.name,min:n.geometry.boundingBox.min.toArray(),max:n.geometry.boundingBox.max.toArray(),world:n.matrixWorld.toArray()});}});return {id,center:b.getCenter(new THREE.Vector3()).toArray(),size:b.getSize(new THREE.Vector3()).toArray(),meshes};});},
  14. view(id,direction){const e=activeTraining;e.stopTeacherSpeech();e.teacherEnabled=false;e.teacherPanel.classList.remove('is-open');e.inspection.direction=new THREE.Vector3(...direction).normalize();e.inspection.distance=2.6;e.inspection.focus(e.parts.get(id),{animated:false,enlarge:true});},
  15. };`});
  16. });
  17. try{
  18. await page.goto('http://127.0.0.1:6180/teaching/virtual-training/preview/86');await expect(page.locator('[data-role="loading"]')).toHaveClass(/is-hidden/,{timeout:120000});
  19. await fs.writeFile(path.join(dir,'geometry.json'),JSON.stringify(await page.evaluate(()=>__controlSurvey.data()),null,2));
  20. for(const [name,dirn] of [['positive-z',[0,0,1]],['negative-z',[0,0,-1]],['positive-x',[1,0,0]],['negative-x',[-1,0,0]]]){
  21. await page.evaluate(d=>__controlSurvey.view('front-pump-rescue-switch',d),dirn);await page.waitForTimeout(500);await page.screenshot({path:path.join(dir,name+'.png')});
  22. }
  23. console.log('survey ready');
  24. }finally{await browser.close();}