test(probe): teach the layout probe about <details>, and guard the flag parser
THE PROBE. A control inside a CLOSED <details> is laid out but sits outside its collapsed parent's box, so elementFromPoint at its centre returns an ancestor and it reports OCCLUDED — 23 of them on sindra-set, every one a false positive. Verified both ways before believing it: closed, elementFromPoint returns div.gallery; opened, the button itself, and a real trial click lands on it. Opening every <details> rather than skipping them is the deliberate choice. Skipping would make the probe quiet by declaring put-away controls out of scope, and the add-note button inside details.item-addnote is exactly the class of control this instrument exists to check. Fourth false-positive class this probe has grown a guard for; the other three are already in its header. THE FLAG PARSER. Three cases that silently break and are cheap to pin: the flags on either side of the glob (a session should not have to remember which), a why carrying quotes, an em-dash, a newline and non-ASCII, and --why with no value after it, which must produce usage rather than eating the booth name and creating a booth called nothing. 313 tests.
This commit is contained in:
@@ -69,6 +69,24 @@ def probe(page, url: str) -> list[str]:
|
||||
card.hover(timeout=1500)
|
||||
except Exception:
|
||||
pass
|
||||
# ⚠ OPEN EVERY <details> FIRST. A control inside a CLOSED one is laid out
|
||||
# but sits outside its collapsed parent's box, so `elementFromPoint` at its
|
||||
# centre returns an ancestor and it reports OCCLUDED — 23 of them on
|
||||
# `sindra-set`, every one a false positive, because the only way an operator
|
||||
# reaches that button is by opening the disclosure first. Verified both
|
||||
# ways: closed -> elementFromPoint returns div.gallery; opened -> the button
|
||||
# itself, and a real trial click lands on it.
|
||||
#
|
||||
# Opening rather than SKIPPING is deliberate. Skipping would make the probe
|
||||
# quiet by declaring put-away controls out of scope, and the add-note button
|
||||
# inside `details.item-addnote` is exactly the kind of control this
|
||||
# instrument exists to check. Open it and ask the real question.
|
||||
for d in page.locator("details:not([open])").all():
|
||||
try:
|
||||
d.evaluate("(el) => el.open = true")
|
||||
except Exception:
|
||||
pass
|
||||
page.wait_for_timeout(150)
|
||||
for el in page.locator("button, a.dl-link, a.thumb").all():
|
||||
try:
|
||||
# ⚠ elementFromPoint is VIEWPORT-relative. Without scrolling first,
|
||||
|
||||
Reference in New Issue
Block a user