Double toucher sans coup évident : un toucher simple ; tests navigateur adaptés aux raccourcis

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Pierre MARTIN
2026-11-12 10:26:30 +01:00
co-authored by Claude Opus 5.5
parent 0aec6cb7b1
commit 094f535c84
2 changed files with 66 additions and 34 deletions
+11 -2
View File
@@ -353,7 +353,8 @@ async function checkStable(when) {
}
/** Les boutons visibles d'une page dont le texte passe à la ligne : un
* bouton tient sur une ligne et fait 48 px de haut (charte). Un bouton plus
* bouton tient sur une ligne et fait 48 px de haut (charte), touche de son
* raccourci comprise. Un bouton plus
* haut que 48 px n'est refusé que si son texte occupe plusieurs lignes ;
* un texte coupé par le bord (white-space: nowrap) est refusé aussi. */
async function wrappedButtons(target) {
@@ -368,7 +369,9 @@ async function wrappedButtons(target) {
const tops = new Set();
const walker = document.createTreeWalker(el, NodeFilter.SHOW_TEXT);
for (let node = walker.nextNode(); node !== null; node = walker.nextNode()) {
if (node.textContent.trim() === "") {
// La touche du raccourci (kbd, quand un clavier est détecté)
// est un badge en coin, pas une ligne du libellé.
if (node.textContent.trim() === "" || node.parentElement?.closest("kbd.shortcut")) {
continue;
}
const range = document.createRange();
@@ -1193,6 +1196,7 @@ let resumed = false;
let landscapeTurn = false;
let rotatedChecked = false;
let vibrationsChecked = false;
let lastTouch = 0;
let tracesSeen = 0;
let replays = 0;
let skips = 0;
@@ -1496,9 +1500,14 @@ for (let actions = 0; ; actions++) {
check(!(await page.isVisible("#menu")), "Échap ne ferme pas le menu");
}
const vibrationsBefore = (await vibrations()).length;
// Deux touchers rapprochés sur la même pile seraient un double
// toucher (coup évident, tests/browser/plateau.mjs) : ici, un
// toucher à la fois, un demi-coup à la fois.
await sleep(Math.max(0, lastTouch + 500 - Date.now()));
// Un pion à destination unique avance dès qu'on le touche ; sinon,
// ses cases d'arrivée s'allument. Le premier toucher est mesuré :
// l'écran répond dans le gestionnaire du toucher.
lastTouch = Date.now();
const ms = await page.evaluate(() => {
const hit = document.querySelector(".hit.can-move");
const t0 = performance.now();