Die letzten fuenf blinden Messungen bekommen einen Finger
Die Grundlinie der Fingerwache sinkt von 6 auf 1.
DIE SCHWEREN FAELLE
pruef-notizen, pruef-teamlage-karten, pruef-terminregel,
pruef-werdegang, pruef-befinden.
Bei diesen fuenf stand mitten im Ablauf ein
`setViewportSize({ width: 390 })`. Das aendert nur die Groesse --
`hasTouch` gehoert zum KONTEXT und ist beim Anlegen entschieden.
Nachtragen geht nicht; es braucht ein zweites Fenster.
DAS MUSTER, DAS FUER ALLE FUENF GETRAGEN HAT
const handyKontext = await browser.newContext({
viewport: { width: 390, height: 844 }, hasTouch: true, isMobile: true });
await handyKontext.addCookies(await kontext.cookies());
const handy = await handyKontext.newPage();
await handy.goto(seite.url(), { waitUntil: "networkidle" });
Drei Entscheidungen darin:
- Die Anmeldung wandert als Keks mit, statt sie zu wiederholen.
Eine zweite Anmeldung waere eine zweite Stelle, die veralten
kann.
- Die Adresse kommt von `seite.url()`. Sie ein zweites Mal
hinzuschreiben waere eine zweite Wahrheit darueber, welche
Seite gemessen wird.
- Das fruehere Zuruecksetzen auf 1280 px faellt weg. Die breite
Seite war nie schmal -- es gibt nichts zurueckzustellen.
Bei pruef-terminregel liessen sich die vier Schritte, die den
schwebenden Hinweis erzeugen, nicht uebernehmen: Sie werden im
neuen Kontext nachgefahren (oeffnen, "Neu", Datum eintragen).
ALLE FUENF DANACH GRUEN
pruef-notizen EXIT 0
pruef-teamlage-karten EXIT 0 (39 geprueft)
pruef-terminregel EXIT 0 (35 Pruefungen)
pruef-werdegang EXIT 0
pruef-befinden EXIT 0
Diese Seiten halten die Fingerregeln also schon ein. Es hatte nur
nie jemand nachgesehen.
EINES BLEIBT: pruef-grosscheck
Die Datei zu aendern waere ein Zweizeiler. Sie zu PRUEFEN hiesse,
206 Seiten ueber vier Rollen und zwei Bildschirmgroessen laufen zu
lassen -- das braucht Filipes Zusage. Eine Aenderung, die ich nicht
pruefen darf, liefere ich nicht aus. Die Grundlinie steht deshalb
auf 1 und nicht auf 0.
GEPRUEFT
pruef-fingermass 3 / 0, neun Gegenproben, Grundlinie 1
This commit is contained in:
@@ -990,9 +990,21 @@ melde("=== 8. Die Analyse im Browser ===");
|
|||||||
Lesen sieht -- beide Regeln wirken einzeln vernuenftig. Nur eine
|
Lesen sieht -- beide Regeln wirken einzeln vernuenftig. Nur eine
|
||||||
Messung findet ihn wieder, wenn jemand an einem der beiden
|
Messung findet ihn wieder, wenn jemand an einem der beiden
|
||||||
Abstaende dreht. */
|
Abstaende dreht. */
|
||||||
const enge = await seite.setViewportSize({ width: 430, height: 900 })
|
/* EIN EIGENER KONTEXT MIT FINGER (29.09.2026).
|
||||||
.then(() => seite.waitForTimeout(500))
|
|
||||||
.then(() => seite.evaluate(() => {
|
Hier stand `seite.setViewportSize({ width: 430 })`. Das aendert
|
||||||
|
nur die Groesse: `hasTouch` gehoert zum KONTEXT und laesst sich
|
||||||
|
danach nicht mehr setzen. Ohne ihn meldet der Browser
|
||||||
|
`pointer: fine`, und KEINE Regel aus `@media (pointer: coarse)`
|
||||||
|
greift. Gerade hier zaehlt das: Hoehere Beruehrziele stehen
|
||||||
|
enger beieinander, und ob Text auf Text liegt, haengt daran. */
|
||||||
|
const engKontext = await browser.newContext({
|
||||||
|
viewport: { width: 430, height: 900 }, hasTouch: true, isMobile: true });
|
||||||
|
await engKontext.addCookies(await kontext.cookies());
|
||||||
|
const engSeite = await engKontext.newPage();
|
||||||
|
const enge = await engSeite.goto(seite.url(), { waitUntil: "networkidle" })
|
||||||
|
.then(() => engSeite.waitForTimeout(500))
|
||||||
|
.then(() => engSeite.evaluate(() => {
|
||||||
const kandidaten = [...document.querySelectorAll("body *")].filter((e) => {
|
const kandidaten = [...document.querySelectorAll("body *")].filter((e) => {
|
||||||
const r = e.getBoundingClientRect();
|
const r = e.getBoundingClientRect();
|
||||||
return r.width > 20 && r.height > 6
|
return r.width > 20 && r.height > 6
|
||||||
@@ -1022,7 +1034,10 @@ melde("=== 8. Die Analyse im Browser ===");
|
|||||||
enge.treffer.length
|
enge.treffer.length
|
||||||
? `Text liegt auf Text: ${enge.treffer.slice(0, 2).join("; ")}`
|
? `Text liegt auf Text: ${enge.treffer.slice(0, 2).join("; ")}`
|
||||||
: `bei 430 px liegt kein Text auf Text (${enge.geprueft} Absätze verglichen)`);
|
: `bei 430 px liegt kein Text auf Text (${enge.geprueft} Absätze verglichen)`);
|
||||||
await seite.setViewportSize({ width: 1280, height: 1000 });
|
/* Das enge Fenster war ein eigener Kontext und geht hier zu.
|
||||||
|
`seite` war nie schmal -- das fruehere Zurueckstellen auf 1280
|
||||||
|
ist damit hinfaellig. */
|
||||||
|
await engKontext.close();
|
||||||
if (process.env.SCHIRM) {
|
if (process.env.SCHIRM) {
|
||||||
/* Zielt seit dem 22.09.2026 auf das Gesamtresuemee -- den Block
|
/* Zielt seit dem 22.09.2026 auf das Gesamtresuemee -- den Block
|
||||||
darunter gibt es nicht mehr. Ohne diese Zeile brach der Lauf
|
darunter gibt es nicht mehr. Ohne diese Zeile brach der Lauf
|
||||||
|
|||||||
+19
-13
@@ -63,20 +63,26 @@ const ORDNER = new URL(".", import.meta.url).pathname.replace(/^\/([A-Za-z]:)/,
|
|||||||
|
|
||||||
Die erste Zahl, die eine Wache liefert, ist selten die richtige.
|
Die erste Zahl, die eine Wache liefert, ist selten die richtige.
|
||||||
|
|
||||||
29.09.2026, nachmittags: 17 -> 6. Zehn Fenster bekamen einen
|
29.09.2026, nachmittags: 17 -> 6 -> 1. Sechzehn Fenster bekamen
|
||||||
Finger, eines fiel weg. Alle zehn Pruefungen liefen danach gruen
|
einen Finger, eines fiel weg. JEDE der umgestellten Pruefungen
|
||||||
-- diese Seiten halten die Fingerregeln also schon ein, es hatte
|
lief danach gruen -- diese Seiten halten die Fingerregeln also
|
||||||
nur nie jemand nachgesehen. Gefunden wurde dabei trotzdem etwas:
|
schon ein, es hatte nur nie jemand nachgesehen. Gefunden wurde
|
||||||
eine Zeitbombe in pruef-kalender (siehe dort).
|
dabei trotzdem etwas: eine Zeitbombe in pruef-kalender (dort
|
||||||
|
steht die Erklaerung).
|
||||||
|
|
||||||
Die sechs uebrigen sind die schweren Faelle: Dort schaltet
|
DIE SCHWEREN FAELLE brauchten je einen Umbau: Wo mitten im Ablauf
|
||||||
`setViewportSize` mitten im Ablauf auf Handyformat um, und der
|
`setViewportSize` stand, kann der Finger nicht nachgetragen
|
||||||
Finger laesst sich nachtraeglich nicht setzen. Jeder davon
|
werden. Das Muster, das fuer alle fuenf getragen hat: einen
|
||||||
braucht einen eigenen Kontext samt Anmeldung -- Umbau, nicht
|
eigenen Kontext anlegen, `addCookies(await kontext.cookies())`,
|
||||||
Einzeiler. `pruef-grosscheck` bleibt unangetastet, bis Filipe
|
und die Adresse von `seite.url()` nehmen statt sie ein zweites
|
||||||
einen Lauf freigibt: Eine Aenderung, die ich nicht pruefen darf,
|
Mal hinzuschreiben. Danach ist das fruehere Zuruecksetzen auf
|
||||||
liefere ich nicht aus. */
|
1280 px hinfaellig -- die breite Seite war nie schmal.
|
||||||
const GRUNDLINIE = 6;
|
|
||||||
|
ES BLEIBT EINES: `pruef-grosscheck`. Die Datei zu aendern waere
|
||||||
|
ein Zweizeiler; sie zu pruefen hiesse, 206 Seiten ueber vier
|
||||||
|
Rollen laufen zu lassen, und das braucht Filipes Zusage. Eine
|
||||||
|
Aenderung, die ich nicht pruefen darf, liefere ich nicht aus. */
|
||||||
|
const GRUNDLINIE = 1;
|
||||||
|
|
||||||
/* Ab wann ist ein Fenster ein Telefon? 860 ist die Grenze, die im
|
/* Ab wann ist ein Fenster ein Telefon? 860 ist die Grenze, die im
|
||||||
Haus schon in mess-reaktion und mess-chat-optik steht. Darueber
|
Haus schon in mess-reaktion und mess-chat-optik steht. Darueber
|
||||||
|
|||||||
@@ -624,8 +624,23 @@ await seite.waitForTimeout(400);
|
|||||||
/* Und auf dem Handy: Das Blatt legt sich ueber die Liste, der
|
/* Und auf dem Handy: Das Blatt legt sich ueber die Liste, der
|
||||||
Zurueck-Knopf holt sie wieder. */
|
Zurueck-Knopf holt sie wieder. */
|
||||||
{
|
{
|
||||||
const handy = await kontext.newPage();
|
/* EIN EIGENER KONTEXT MIT FINGER (29.09.2026).
|
||||||
await handy.setViewportSize({ width: 390, height: 780 });
|
|
||||||
|
Hier stand `kontext.newPage()` plus `setViewportSize`. Das
|
||||||
|
aendert nur die Groesse: `hasTouch` gehoert zum KONTEXT und
|
||||||
|
laesst sich danach nicht mehr setzen. Ohne ihn meldet der
|
||||||
|
Browser `pointer: fine`, und KEINE Regel aus
|
||||||
|
`@media (pointer: coarse)` greift -- dort stehen die
|
||||||
|
44-Pixel-Beruehrziele. Ein Handy-Bild mit Mauszeiger zeigt eine
|
||||||
|
Seite, die es auf keinem Handy gibt.
|
||||||
|
|
||||||
|
Die Anmeldung wandert als Keks mit, statt sie zu wiederholen --
|
||||||
|
eine zweite Anmeldung waere eine zweite Stelle, die veralten
|
||||||
|
kann. */
|
||||||
|
const handyKontext = await browser.newContext({
|
||||||
|
viewport: { width: 390, height: 780 }, hasTouch: true, isMobile: true });
|
||||||
|
await handyKontext.addCookies(await kontext.cookies());
|
||||||
|
const handy = await handyKontext.newPage();
|
||||||
await handy.goto(`${BASIS}/workspace/notizen.html`, { waitUntil: "networkidle" });
|
await handy.goto(`${BASIS}/workspace/notizen.html`, { waitUntil: "networkidle" });
|
||||||
await handy.waitForTimeout(700);
|
await handy.waitForTimeout(700);
|
||||||
const listeDa = await handy.locator(".n-zettel").count();
|
const listeDa = await handy.locator(".n-zettel").count();
|
||||||
@@ -646,7 +661,7 @@ await seite.waitForTimeout(400);
|
|||||||
await handy.locator("#zurueck").click();
|
await handy.locator("#zurueck").click();
|
||||||
await handy.waitForTimeout(400);
|
await handy.waitForTimeout(400);
|
||||||
ok(await handy.locator("#blatt").isHidden(), "der Zurueck-Knopf schliesst es wieder");
|
ok(await handy.locator("#blatt").isHidden(), "der Zurueck-Knopf schliesst es wieder");
|
||||||
await handy.close();
|
await handyKontext.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* =======================================================================
|
/* =======================================================================
|
||||||
|
|||||||
@@ -369,11 +369,29 @@ if (angekommen !== "/workspace/teamlage.html") {
|
|||||||
console.log("");
|
console.log("");
|
||||||
console.log("--- Die Baender auf 390 px ---");
|
console.log("--- Die Baender auf 390 px ---");
|
||||||
|
|
||||||
await seite.setViewportSize({ width: 390, height: 844 });
|
/* EIN EIGENER KONTEXT MIT FINGER (29.09.2026).
|
||||||
await seite.reload({ waitUntil: "networkidle" });
|
|
||||||
await seite.waitForTimeout(1500);
|
|
||||||
|
|
||||||
const schmal = await seite.evaluate(() => {
|
Hier stand `seite.setViewportSize({ width: 390 })`. Das aendert
|
||||||
|
nur die Groesse: `hasTouch` gehoert zum KONTEXT und laesst sich
|
||||||
|
danach nicht mehr setzen. Ohne ihn meldet der Browser
|
||||||
|
`pointer: fine`, und KEINE Regel aus `@media (pointer: coarse)`
|
||||||
|
greift -- dort stehen die 44-Pixel-Beruehrziele. Gerade fuer die
|
||||||
|
Frage, ob ein Band ueber seiner Karte steht, ist das
|
||||||
|
entscheidend: Die Karte ist am Finger anders gebaut.
|
||||||
|
|
||||||
|
Die Anmeldung wandert als Keks mit, statt sie zu wiederholen --
|
||||||
|
eine zweite Anmeldung waere eine zweite Stelle, die veralten
|
||||||
|
kann. Und die Adresse kommt von der Seite selbst, damit hier
|
||||||
|
keine zweite Wahrheit darueber entsteht, welche Seite gemessen
|
||||||
|
wird. */
|
||||||
|
const handyKontext = await browser.newContext({
|
||||||
|
viewport: { width: 390, height: 844 }, hasTouch: true, isMobile: true });
|
||||||
|
await handyKontext.addCookies(await ctx.cookies());
|
||||||
|
const handy = await handyKontext.newPage();
|
||||||
|
await handy.goto(seite.url(), { waitUntil: "networkidle" });
|
||||||
|
await handy.waitForTimeout(1500);
|
||||||
|
|
||||||
|
const schmal = await handy.evaluate(() => {
|
||||||
const karten = [...document.querySelectorAll(".t-leute .tperson")];
|
const karten = [...document.querySelectorAll(".t-leute .tperson")];
|
||||||
const ueber = [];
|
const ueber = [];
|
||||||
for (const k of karten) {
|
for (const k of karten) {
|
||||||
@@ -433,7 +451,11 @@ ok(schmal.karten > 0 && schmal.breiteste <= schmal.sichtbar,
|
|||||||
ist. Deshalb steht die Umrechnung hier ausgeschrieben.
|
ist. Deshalb steht die Umrechnung hier ausgeschrieben.
|
||||||
======================================================================= */
|
======================================================================= */
|
||||||
{
|
{
|
||||||
await seite.setViewportSize({ width: 1280, height: 1200 });
|
/* Das Handyfenster ist ein eigener Kontext und wird hier zugemacht.
|
||||||
|
`seite` war nie schmal, deshalb gibt es auch nichts
|
||||||
|
zurueckzustellen -- frueher stand hier ein `setViewportSize` auf
|
||||||
|
1280, das die Umstellung von 390 rueckgaengig machte. */
|
||||||
|
await handyKontext.close();
|
||||||
await seite.waitForTimeout(400);
|
await seite.waitForTimeout(400);
|
||||||
const farben = await seite.evaluate(() => {
|
const farben = await seite.evaluate(() => {
|
||||||
const zahl = (c) => { const x = c / 255; return x <= 0.04045 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4; };
|
const zahl = (c) => { const x = c / 255; return x <= 0.04045 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4; };
|
||||||
|
|||||||
@@ -307,9 +307,31 @@ melde("=== 4. Was man sieht ===");
|
|||||||
schwebende Satz auf dem, was folgt.
|
schwebende Satz auf dem, was folgt.
|
||||||
|
|
||||||
Gemessen wird die Ueberschneidung, nicht geschaetzt. */
|
Gemessen wird die Ueberschneidung, nicht geschaetzt. */
|
||||||
await seite.setViewportSize({ width: 390, height: 844 });
|
/* EIN EIGENER KONTEXT MIT FINGER (29.09.2026).
|
||||||
await seite.waitForTimeout(500);
|
|
||||||
const eng = await seite.evaluate(() => {
|
Hier stand `seite.setViewportSize({ width: 390 })`. Das
|
||||||
|
aendert nur die Groesse: `hasTouch` gehoert zum KONTEXT und
|
||||||
|
laesst sich danach nicht mehr setzen. Ohne ihn meldet der
|
||||||
|
Browser `pointer: fine`, und KEINE Regel aus
|
||||||
|
`@media (pointer: coarse)` greift -- dort stehen die
|
||||||
|
44-Pixel-Beruehrziele. Genau sie entscheiden hier mit:
|
||||||
|
Hoehere Felder stehen enger beieinander, und ob ein
|
||||||
|
schwebender Hinweis das naechste ueberdeckt, haengt daran.
|
||||||
|
|
||||||
|
Der kurze Weg zum Hinweis wird nachgefahren statt
|
||||||
|
uebernommen -- vier Schritte, dieselben wie oben. */
|
||||||
|
const handyKontext = await browser.newContext({
|
||||||
|
viewport: { width: 390, height: 844 }, hasTouch: true, isMobile: true });
|
||||||
|
await handyKontext.addCookies(await sicht.cookies());
|
||||||
|
const handy = await handyKontext.newPage();
|
||||||
|
await handy.goto(`http://127.0.0.1:${PORT}/workspace/bereich.html?b=content`,
|
||||||
|
{ waitUntil: "networkidle" });
|
||||||
|
await handy.waitForTimeout(1600);
|
||||||
|
await handy.click("#neu-oeffnen");
|
||||||
|
await handy.waitForTimeout(500);
|
||||||
|
await handy.fill("#f-datum", HEUTE);
|
||||||
|
await handy.waitForTimeout(500);
|
||||||
|
const eng = await handy.evaluate(() => {
|
||||||
const h = document.getElementById("hinweis-datum");
|
const h = document.getElementById("hinweis-datum");
|
||||||
if (!h || h.offsetHeight === 0) return { da: false };
|
if (!h || h.offsetHeight === 0) return { da: false };
|
||||||
const a2 = h.getBoundingClientRect();
|
const a2 = h.getBoundingClientRect();
|
||||||
@@ -323,8 +345,11 @@ melde("=== 4. Was man sieht ===");
|
|||||||
ok(eng.da, "am Handy steht der Hinweis auch da");
|
ok(eng.da, "am Handy steht der Hinweis auch da");
|
||||||
ok(eng.da && eng.ueberdeckt === 0,
|
ok(eng.da && eng.ueberdeckt === 0,
|
||||||
`und liegt auf keinem anderen Feld (${eng.ueberdeckt} Ueberschneidungen)`);
|
`und liegt auf keinem anderen Feld (${eng.ueberdeckt} Ueberschneidungen)`);
|
||||||
await seite.setViewportSize({ width: 1280, height: 900 });
|
/* Das Handyfenster war ein eigener Kontext und geht hier zu.
|
||||||
await seite.waitForTimeout(400);
|
`seite` war nie schmal -- deshalb gibt es auch nichts
|
||||||
|
zurueckzustellen; frueher stand hier ein `setViewportSize`
|
||||||
|
auf 1280, das die Umstellung rueckgaengig machte. */
|
||||||
|
await handyKontext.close();
|
||||||
|
|
||||||
ok(konsole.length === 0,
|
ok(konsole.length === 0,
|
||||||
konsole.length ? `Konsolenfehler: ${konsole[0]}` : "kein Konsolenfehler");
|
konsole.length ? `Konsolenfehler: ${konsole[0]}` : "kein Konsolenfehler");
|
||||||
|
|||||||
@@ -770,18 +770,36 @@ melde("=== 11. Im Browser ===");
|
|||||||
/* HANDY. Zwölf Seiten hatten am 06.09. genau hier ihren Fehler: ein
|
/* HANDY. Zwölf Seiten hatten am 06.09. genau hier ihren Fehler: ein
|
||||||
Knopf lag über einem anderen, weil eine feste Schwelle nicht mehr
|
Knopf lag über einem anderen, weil eine feste Schwelle nicht mehr
|
||||||
passte. */
|
passte. */
|
||||||
await seite.setViewportSize({ width: 412, height: 915 });
|
/* EIN EIGENER KONTEXT MIT FINGER (29.09.2026).
|
||||||
await seite.waitForTimeout(500);
|
|
||||||
const handy = await seite.evaluate(() => ({
|
Hier stand `seite.setViewportSize({ width: 412 })`. Das aendert
|
||||||
|
nur die Groesse: `hasTouch` gehoert zum KONTEXT und laesst sich
|
||||||
|
danach nicht mehr setzen. Ohne ihn meldet der Browser
|
||||||
|
`pointer: fine`, und KEINE Regel aus `@media (pointer: coarse)`
|
||||||
|
greift -- dort stehen die 44-Pixel-Beruehrziele, also genau die
|
||||||
|
Groessen, deren Ueberlappung dieser Abschnitt sucht.
|
||||||
|
|
||||||
|
Die Anmeldung wandert als Keks mit, die Adresse kommt von der
|
||||||
|
Seite selbst -- keine zweite Wahrheit darueber, was gemessen
|
||||||
|
wird. */
|
||||||
|
const handyKontext = await browser.newContext({
|
||||||
|
viewport: { width: 412, height: 915 }, hasTouch: true, isMobile: true });
|
||||||
|
await handyKontext.addCookies(await kontext.cookies());
|
||||||
|
const handySeite = await handyKontext.newPage();
|
||||||
|
await handySeite.goto(seite.url(), { waitUntil: "networkidle" });
|
||||||
|
await handySeite.waitForTimeout(500);
|
||||||
|
const handy = await handySeite.evaluate(() => ({
|
||||||
breiter: document.documentElement.scrollWidth > document.documentElement.clientWidth + 1,
|
breiter: document.documentElement.scrollWidth > document.documentElement.clientWidth + 1,
|
||||||
balkenSichtbar: [...document.querySelectorAll('.w-bewegung__balken')]
|
balkenSichtbar: [...document.querySelectorAll('.w-bewegung__balken')]
|
||||||
.every((b) => b.getBoundingClientRect().width >= 8),
|
.every((b) => b.getBoundingClientRect().width >= 8),
|
||||||
}));
|
}));
|
||||||
ok(!handy.breiter, "auf 412 px steht nichts über den Rand hinaus");
|
ok(!handy.breiter, "auf 412 px steht nichts über den Rand hinaus");
|
||||||
ok(handy.balkenSichtbar, "und die Balken sind noch breit genug, um sie zu sehen");
|
ok(handy.balkenSichtbar, "und die Balken sind noch breit genug, um sie zu sehen");
|
||||||
|
await handyKontext.close();
|
||||||
|
|
||||||
if (process.env.SCHIRM) {
|
if (process.env.SCHIRM) {
|
||||||
await seite.setViewportSize({ width: 1280, height: 1100 });
|
/* `seite` war nie schmal -- das fruehere Zurueckstellen auf
|
||||||
|
1280 ist damit hinfaellig. */
|
||||||
await seite.waitForTimeout(400);
|
await seite.waitForTimeout(400);
|
||||||
await seite.screenshot({
|
await seite.screenshot({
|
||||||
path: "C:/Users/qciga/Documents/Obelix/DogiHompage/pruef-werdegang.png",
|
path: "C:/Users/qciga/Documents/Obelix/DogiHompage/pruef-werdegang.png",
|
||||||
|
|||||||
Reference in New Issue
Block a user