feat(android): add UIAutomator hierarchy dump, parsing, and agent tool#251
Open
mlikasam-askui wants to merge 2 commits intomainfrom
Open
feat(android): add UIAutomator hierarchy dump, parsing, and agent tool#251mlikasam-askui wants to merge 2 commits intomainfrom
mlikasam-askui wants to merge 2 commits intomainfrom
Conversation
Add UIElement and UIElementCollection to parse UIAutomator window-dump XML from normalized shell output (bounds, text, resource-id, content-desc, clickable, etc.). Expose get_ui_elements() on Android AgentOs and implement it in the facade and PpAdb path so callers get a flattened hierarchy string. Register AndroidGetUIAutomatorHierarchyTool in the Android tool store for act flows that need structure instead of screenshots. Refresh pdm.lock for the otel dependency group and OpenTelemetry-related package updates.
| self, | ||
| x: int, | ||
| y: int, | ||
| from_agent: bool = True, |
Collaborator
There was a problem hiding this comment.
What does the from_agent mean?
| stopped and the UI has settled. | ||
| """ | ||
| self._check_if_device_is_selected() | ||
| assert self._device is not None |
Collaborator
There was a problem hiding this comment.
Should the assert not be integrated in _check_if_device_is_selected
| assert self._device is not None | ||
| dump_cmd = f"uiautomator dump {self._UIAUTOMATOR_DUMP_PATH}" | ||
| dump_response = self.shell(dump_cmd) | ||
| if "dumped" not in dump_response.lower(): |
Collaborator
There was a problem hiding this comment.
What does the "dumped" mean?
| dump_response = self.shell(dump_cmd) | ||
| if "dumped" not in dump_response.lower(): | ||
| msg = f"Failed to dump UI hierarchy: {dump_response}" | ||
| raise AndroidAgentOsError(msg) |
Collaborator
There was a problem hiding this comment.
Do we have to terminate the Agent Loop or is this error recoverably from the Agent??
| """Collection of UI elements.""" | ||
|
|
||
| def __init__(self, elements: list[UIElement]) -> None: | ||
| self._elements = list(elements) |
Collaborator
There was a problem hiding this comment.
Why parsing to a list?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Dump the current screen with
uiautomator dump, parse the XML into a flat list of views (text, ids, content-desc, bounds, tap centers), and expose it asAndroidGetUIAutomatorHierarchyToolfor agents when screenshots are weak or you want structured UI data.Notes
get_ui_elements()on AndroidAgentOs/PpAdbAgentOsand facade.pdm.lockupdates.