Die Seite springt nicht mehr -- und die Kachel zaehlt mit

Zwei Meldungen von Filipe, und sie gehoeren zusammen: Er hat beides am
selben Klick gemerkt.

  "immer wenn ich auf was drücke dan geht das fenster wieder hoch. die
   seite soll sich nicht immer wieder bewegen wenn ich auf was drücke."

  "und wieso steht bei vanvan 0 von 28 obwohl ich alle durch habe."

DER SPRUNG: In karte() stand ein scrollIntoView OHNE Bedingung -- und
die Funktion wird an vier Stellen gerufen. Beim Oeffnen einer Person
ist es richtig; nach dem ersten Klick auf einen Punkt, beim Aufklappen
aller Kategorien und nach dem Anlegen eines Schritts ist es falsch. Man
tippt unten auf "Läuft" und steht wieder ganz oben. `springen` ist
jetzt Vorgabe NEIN, und genau eine Stelle sagt ja.

Und selbst ohne Sprung bewegte sich die Seite: Der Neuaufbau aendert
die Hoehe der Karte (eine Zeile "Schritt läuft" kommt dazu), der
Browser behaelt nur die Pixelzahl. Die Hoehe wird deshalb gehalten.

"Alle aufklappen" holt die Karte gar nicht mehr neu -- Aufklappen ist
eine Sache der Anzeige, dafuer braucht es den Server nicht.

DIE NULL: Die Kachel kommt aus /entwicklung/lage -- EINMAL, beim Laden
der Seite. Die Karte holt ihren Stand bei jedem Oeffnen neu. Wer 28
Punkte durchklickt, sieht in der Karte 28 von 28 und auf der Kachel
darueber die Zahl von vorhin. Zwei Wahrheiten auf einem Bildschirm, und
die falsche steht oben.

Die Liste NICHT neu zu holen ist Absicht -- jeder Neuaufbau bewegt die
Seite, und darueber ging die andere Meldung. Stattdessen wandert die
Zahl mit, zusammen mit dem Kopf der Karte und den Koepfen der
Kategorien ("3 / 7", "2 x hakt").

WAS DIE PRUEFUNG AN MIR SELBST GEFUNDEN HAT, dreimal:

  - Sie mass nach dem Sprung aufs Aufgabenbrett weiter und verglich
    zwei leere Texte. Zwei leere Texte sind gleich und beweisen nichts
    -- gemeldet hat es die Zahl in der Bedingung daneben.
  - Danach verglich sie Fridas Kachel mit Riekes Karte und meldete
    einen Unterschied zwischen zwei verschiedenen Menschen. Beinahe
    haette ich einen Fehler gesucht, den es nicht gab.
  - Und "wo etwas hakt, steht es im Kopf" waere ab heute auch ueber
    vier VERSTECKTEN Hinweisen gruen gewesen: Der Hinweis steht jetzt
    immer im Baum, damit er nachgezogen werden kann, ohne den Kopf neu
    zu bauen. Jetzt wird auf sichtbar geprueft, nicht auf vorhanden.

  server/pruef-schritt.mjs   65 Pruefungen (vorher 57), 0 Fehler
  Beide Meldungen werden am selben Klick nachgestellt: Hoehe und Zahl
  vorher merken, EINMAL druecken, beides nachsehen. Mit Gegenprobe --
  auf eine Person zu druecken DARF springen, sonst hiesse "springt
  nicht" nur, dass gar nichts mehr scrollt.

  pruef-css-klassen, pruef-entwicklung 43, pruef-neue-seiten 93 -- 0 Fehler

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-15 17:25:29 +02:00
co-authored by Claude Opus 5
parent 45f5a35afe
commit 5707e22b45
33 changed files with 597 additions and 383 deletions
+97 -3
View File
@@ -356,7 +356,8 @@ melde("=== 8. Im Browser ===");
offen: b.filter((x) => x.dataset.offen === "ja").length,
schalter: document.querySelectorAll(".e-block__schalter").length,
staende: [...document.querySelectorAll(".e-block__stand")].map((x) => x.textContent.trim()),
hakt: [...document.querySelectorAll(".e-block__hakt")].map((x) => x.textContent.trim()),
hakt: [...document.querySelectorAll(".e-block__hakt")]
.filter((x) => !x.hidden).map((x) => x.textContent.trim()),
versteckt: b.filter((x) => x.querySelector(".e-block__koerper")?.hidden).length,
alleKnopf: document.querySelector(".e-bloecke__alle")?.textContent.trim() || "",
};
@@ -372,8 +373,11 @@ melde("=== 8. Im Browser ===");
ok(bloecke.staende.length === bloecke.anzahl
&& bloecke.staende.every((x) => x.includes(' / ')),
`jeder Kopf sagt, wie weit er ist (${bloecke.staende.join(", ")})`);
ok(bloecke.hakt.some((x) => /hakt/.test(x)),
`und wo etwas hakt, steht es im Kopf (${bloecke.hakt.join(", ") || "nichts"})`);
/* SICHTBAR, nicht bloß vorhanden. Seit dem 15.09. steht der Hinweis
immer im Baum (damit er nachgezogen werden kann, ohne den Kopf neu
zu bauen) -- „es gibt ihn“ wäre damit über vier versteckten grün. */
ok(bloecke.hakt.length === 1 && /hakt/.test(bloecke.hakt[0]),
`und NUR wo etwas hakt, steht es im Kopf (${bloecke.hakt.join(", ") || "nirgends"})`);
ok(/Alle aufklappen/.test(bloecke.alleKnopf),
`daneben einer für alle auf einmal („${bloecke.alleKnopf}“)`);
@@ -434,6 +438,96 @@ melde("=== 8. Im Browser ===");
`das Brett sagt, was es zeigt: „${sprung.leiste}“`);
ok(sprung.marke === "1", `und es ist genau eine (${sprung.marke})`);
/* =====================================================================
ZWEI FEHLER, DIE FILIPE GEMELDET HAT (15.09.2026)
Ein Fehler, der nur behoben ist, ist beim naechsten Umbau wieder da.
Beide werden deshalb nachgestellt, nicht beschrieben.
===================================================================== */
/* ZURÜCK AUF DIE ENTWICKLUNGSSEITE. Der Abschnitt davor ist zum
Aufgabenbrett gesprungen -- mein erster Entwurf maß danach auf dem
Brett weiter und fand dort weder Punkte noch eine Karte. Gemeldet
hat das die Prüfung selbst: „Kachel und Karte nennen dieselbe Zahl
(„“ / „“)" -- zwei leere Texte sind gleich und beweisen nichts.
Genau dafür steht die Zahl in der Bedingung daneben. */
await seite.goto(`http://127.0.0.1:${PORT}/workspace/entwicklung.html`,
{ waitUntil: "networkidle" });
await seite.waitForTimeout(800);
await seite.click('.e-person:has-text("Frida")');
await seite.waitForTimeout(1000);
await seite.click(".e-bloecke__alle");
await seite.waitForTimeout(400);
/* (1) und (2) IN EINEM DURCHGANG -- sie gehören zusammen.
Filipe hat beides am selben Klick gemerkt: Die Seite sprang hoch,
UND die Zahl auf der Kachel blieb stehen. Also wird auch beides am
selben Klick gemessen: Vorher die Zahl und die Höhe merken, EINMAL
drücken, beides nachsehen. */
await seite.evaluate(() => window.scrollTo({ top: 600, behavior: "instant" }));
await seite.waitForTimeout(250);
const vorDemKlick = await seite.evaluate(() => {
const name = document.querySelector("#karte .e-karte__name")?.textContent.trim() || "";
const kachel = [...document.querySelectorAll(".e-person")]
.find((x) => x.querySelector(".e-person__name")?.textContent.trim() === name);
return {
name,
y: Math.round(window.scrollY),
kachel: kachel?.querySelector(".e-person__zahl")?.textContent.trim() || "",
kopf: document.querySelector("#karte .e-karte__stand")?.textContent.trim() || "",
};
});
ok(vorDemKlick.name === "Frida", `Fridas Karte ist offen (${vorDemKlick.name})`);
const zahlAus = (t) => Number((t.match(/^(\d+) von/) || [])[1] ?? -1);
ok(zahlAus(vorDemKlick.kachel) >= 0,
`vorher steht auf ihrer Kachel „${vorDemKlick.kachel}“`);
/* Ein Punkt, der noch NICHT gesetzt ist -- genau der löst den
Neuaufbau aus, und genau da sprang die Seite. */
const gedrueckt = await seite.evaluate(() => {
const p = [...document.querySelectorAll(".e-punkt")]
.find((x) => !x.dataset.stufe && x.offsetParent);
if (!p) return false;
p.querySelector('.e-wahl__knopf[data-stufe="laeuft"]')?.click();
return true;
});
ok(gedrueckt, "ein noch nicht gesetzter Punkt wird angeklickt");
await seite.waitForTimeout(1400);
const nachDemKlick = await seite.evaluate(() => {
const name = document.querySelector("#karte .e-karte__name")?.textContent.trim() || "";
const kachel = [...document.querySelectorAll(".e-person")]
.find((x) => x.querySelector(".e-person__name")?.textContent.trim() === name);
return {
y: Math.round(window.scrollY),
kachel: kachel?.querySelector(".e-person__zahl")?.textContent.trim() || "",
kopf: document.querySelector("#karte .e-karte__stand")?.textContent.trim() || "",
};
});
/* (1) „immer wenn ich auf was drücke dan geht das fenster wieder hoch." */
ok(Math.abs(nachDemKlick.y - vorDemKlick.y) <= 4,
`die Seite bleibt stehen, wo sie stand (${vorDemKlick.y} -> ${nachDemKlick.y})`);
/* (2) „wieso steht bei vanvan 0 von 28 obwohl ich alle durch habe." */
ok(zahlAus(nachDemKlick.kachel) === zahlAus(vorDemKlick.kachel) + 1,
`die Kachel zählt sofort mit (${vorDemKlick.kachel} -> ${nachDemKlick.kachel})`);
ok(nachDemKlick.kachel === nachDemKlick.kopf,
`und nennt dieselbe Zahl wie die Karte („${nachDemKlick.kopf}“)`);
ok(zahlAus(nachDemKlick.kachel) > 0,
"es ist eine echte Zahl, keine Null — sonst wäre die Gleichheit wertlos");
/* GEGENPROBE ZUM SPRUNG: Auf eine PERSON zu drücken DARF springen --
dort will man zur Karte. Ohne diese Zeile hieße „springt nicht“
vielleicht nur, dass gar nichts mehr scrollt. */
await seite.evaluate(() => window.scrollTo({ top: 900, behavior: "instant" }));
await seite.waitForTimeout(200);
await seite.evaluate(() => document.querySelector(".e-person")?.click());
await seite.waitForTimeout(1400);
const beiPerson = await seite.evaluate(() => Math.round(window.scrollY));
ok(beiPerson !== 900, `beim Öffnen einer Person springt sie sehr wohl (${beiPerson})`);
ok(konsole.length === 0,
konsole.length ? "Fehler im Browser: " + konsole[0].slice(0, 90) : "keine Fehler im Browser");
await browser.close();