Tests / Test passed: 858
driver.tree() failures (WDA/Appium session errors) previously raised uncaught, killing describe_screen() before OCR ever ran. Malformed tree content (invalid XML) had the same problem inside parse_ui_tree(). Both are now caught and logged, falling back to an empty ui_elements list so the scene degrades to OCR-only, mirroring the existing OCR-failure fallback in run_ocr().
32 lines
977 B
Python
32 lines
977 B
Python
from __future__ import annotations
|
|
|
|
import logging
|
|
|
|
from core.models import Scene
|
|
from device.manager import DeviceManager
|
|
from perception.ocr import PaddleOCREngine
|
|
from perception.provider import DefaultPerceptionProvider, PerceptionProvider
|
|
from tools._device import get_driver
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def describe_screen(
|
|
device_id: str | None = None,
|
|
*,
|
|
manager: DeviceManager | None = None,
|
|
ocr_engine: PaddleOCREngine | None = None,
|
|
perception_provider: PerceptionProvider | None = None,
|
|
) -> Scene:
|
|
driver = get_driver(device_id, manager=manager)
|
|
screenshot = driver.screenshot()
|
|
try:
|
|
raw_tree = driver.tree()
|
|
except Exception:
|
|
logger.warning(
|
|
"UI tree retrieval failed; continuing without UI tree", exc_info=True
|
|
)
|
|
raw_tree = None
|
|
provider = perception_provider or DefaultPerceptionProvider(ocr_engine=ocr_engine)
|
|
return provider.build_scene(screenshot, raw_tree)
|