tape-sides.mjs (1813B)
1 // Cassettes à plusieurs faces : badge dans la bibliothèque, bouton 📼 « Face B » dans la barre après lancement, 2 // insertion à chaud (dsp_web_tape_load) avec message d'état. 3 // node test/tape-sides.mjs [bout de titre] [base-url] 4 import { open, sleep } from './cdp.mjs'; 5 6 const want = (process.argv[2] ?? 'arcade').toLowerCase(); 7 const base = process.argv[3] ?? 'http://127.0.0.1:8196'; 8 const page = await open(base + '/', { width: 900, height: 900 }); 9 await page.evaluate('location.reload()'); 10 await sleep(7000); 11 const row = await page.evaluate(`(() => { 12 const b = [...document.querySelectorAll('.pg')].find((b) => b.dataset.type === 'tape' && b.dataset.search.includes(${JSON.stringify(want)}) && b.querySelector('.pg-side')); 13 if (!b) return null; 14 const sides = [...b.querySelectorAll('.pg-side')].map((x) => x.textContent); 15 b.click(); 16 return { title: b.dataset.title, sides, rows: [...document.querySelectorAll('.pg')].filter((r) => r.dataset.search.includes(${JSON.stringify(want)})).length }; 17 })()`); 18 console.log('entrée :', JSON.stringify(row)); 19 await sleep(6000); 20 const buttons = await page.evaluate("[...document.querySelectorAll('#tape-sides button')].map((b) => b.textContent)"); 21 console.log('boutons de la barre :', JSON.stringify(buttons)); 22 await page.evaluate("document.querySelector('#tape-sides button').click()"); 23 await sleep(500); 24 const after = await page.evaluate("({ status: document.getElementById('status').textContent, pick: document.getElementById('pick').textContent, buttons: [...document.querySelectorAll('#tape-sides button')].map((b) => b.textContent) })"); 25 console.log('après insertion :', JSON.stringify(after)); 26 console.log(buttons.length && /dans le lecteur/.test(after.status) && after.buttons.join() !== buttons.join() ? 'OK' : 'PROBLÈME'); 27 page.close();