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().
This commit is contained in:
@@ -1,11 +1,15 @@
|
||||
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,
|
||||
@@ -16,6 +20,12 @@ def describe_screen(
|
||||
) -> Scene:
|
||||
driver = get_driver(device_id, manager=manager)
|
||||
screenshot = driver.screenshot()
|
||||
raw_tree = driver.tree()
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user