fix: Status-Text-Suche liest auch das AT-SPI-Text-Interface
Der 'wird ueberprueft'-Text wurde trotz sichtbar auf dem Screenshot nie gefunden - GtkLabel exponiert seinen Text ueblicherweise nicht ueber .name/.description (bleiben oft leer), sondern nur ueber das separate Text-Interface (queryText().getText(0, -1)). _node_text() sammelt jetzt alle drei Quellen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
4bf1992eb9
commit
dfb8c2fc72
@ -117,8 +117,41 @@ VALIDATION_TEXT_MARKERS = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def _node_text(node):
|
||||||
|
"""Sammelt allen aus einem Accessible auslesbaren Text: .name,
|
||||||
|
.description UND (falls unterstuetzt) das separate Text-Interface.
|
||||||
|
WICHTIG (real beim Testen entdeckt, 29.08.2026): ein einfaches GtkLabel
|
||||||
|
exponiert seinen sichtbaren Text ueblicherweise NICHT ueber .name/
|
||||||
|
.description (die bleiben dort oft leer) sondern ausschliesslich ueber
|
||||||
|
das AT-SPI-Text-Interface (queryText().getText(0, -1)) - ohne diesen
|
||||||
|
dritten Zugriffsweg fand find_showing_text() den sichtbar angezeigten
|
||||||
|
Status-Text nie, obwohl er laut Screenshot die ganze Zeit auf dem Schirm
|
||||||
|
stand."""
|
||||||
|
parts = []
|
||||||
|
try:
|
||||||
|
if node.name:
|
||||||
|
parts.append(node.name)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
if node.description:
|
||||||
|
parts.append(node.description)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
text_iface = node.queryText()
|
||||||
|
content = text_iface.getText(0, -1)
|
||||||
|
if content:
|
||||||
|
parts.append(content)
|
||||||
|
except NotImplementedError:
|
||||||
|
pass
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
return " ".join(parts).strip().lower()
|
||||||
|
|
||||||
|
|
||||||
def find_showing_text(node, needle, depth=0):
|
def find_showing_text(node, needle, depth=0):
|
||||||
"""Sucht ein sichtbares Accessible, dessen Name ODER Beschreibung den
|
"""Sucht ein sichtbares Accessible, dessen Text (siehe _node_text()) den
|
||||||
Suchtext enthaelt - unabhaengig von seiner Rolle (Label/Expander/...),
|
Suchtext enthaelt - unabhaengig von seiner Rolle (Label/Expander/...),
|
||||||
da Ubiquitys Status-Panel-Text nicht zuverlaessig unter derselben Rolle
|
da Ubiquitys Status-Panel-Text nicht zuverlaessig unter derselben Rolle
|
||||||
exponiert sein muss. Bei Unsicherheit ueber den Sichtbarkeitsstatus
|
exponiert sein muss. Bei Unsicherheit ueber den Sichtbarkeitsstatus
|
||||||
@ -126,15 +159,7 @@ def find_showing_text(node, needle, depth=0):
|
|||||||
Klick mitten in die Pruefung setzen)."""
|
Klick mitten in die Pruefung setzen)."""
|
||||||
if node is None or depth > MAX_DEPTH:
|
if node is None or depth > MAX_DEPTH:
|
||||||
return False
|
return False
|
||||||
try:
|
if needle in _node_text(node):
|
||||||
name = (node.name or "").strip().lower()
|
|
||||||
except Exception:
|
|
||||||
name = ""
|
|
||||||
try:
|
|
||||||
desc = (node.description or "").strip().lower()
|
|
||||||
except Exception:
|
|
||||||
desc = ""
|
|
||||||
if needle in name or needle in desc:
|
|
||||||
try:
|
try:
|
||||||
state = node.getState()
|
state = node.getState()
|
||||||
return state.contains(pyatspi.STATE_SHOWING)
|
return state.contains(pyatspi.STATE_SHOWING)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user