Skip to content

Commit 84708cd

Browse files
committed
feat: sort the element keys
1 parent 68505eb commit 84708cd

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

uiviewer/parser/android_hierarchy.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def _parse_uiautomator_node(node):
6363
return attributes
6464

6565

66-
def get_android_hierarchy(page_xml: bytes) -> Dict:
66+
def get_android_hierarchy(page_xml: str) -> Dict:
6767
dom = xml.dom.minidom.parseString(page_xml)
6868
root = dom.documentElement
6969

@@ -72,9 +72,20 @@ def travel(node):
7272
return
7373
json_node = _parse_uiautomator_node(node)
7474
json_node['_id'] = str(uuid.uuid4())
75+
json_node.pop("package", None)
7576
if node.childNodes:
76-
children = [travel(n) for n in node.childNodes if travel(n)]
77+
children = []
78+
for n in node.childNodes:
79+
child = travel(n)
80+
if child:
81+
children.append(child)
7782
json_node['children'] = children
78-
return json_node
83+
84+
# Sort the keys
85+
keys_order = ['_type', 'resourceId', 'text', 'description']
86+
sorted_node = {k: json_node[k] for k in keys_order if k in json_node}
87+
sorted_node.update({k: json_node[k] for k in json_node if k not in keys_order})
88+
89+
return sorted_node
7990

8091
return travel(root)

uiviewer/parser/ios_hierarchy.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,20 @@ def convert_ios_hierarchy(data: Dict, scale: int) -> Dict:
99
def __travel(node):
1010
node['_id'] = str(uuid.uuid4())
1111
node['_type'] = node.pop('type', "null")
12+
node['id'] = node.pop('rawIdentifier', "null")
1213
if 'rect' in node:
1314
rect = node['rect']
1415
node['rect'] = {k: v * scale for k, v in rect.items()}
15-
for child in node.get('children', []):
16-
__travel(child)
17-
return node
16+
17+
# Recursively process children nodes
18+
if 'children' in node:
19+
node['children'] = [__travel(child) for child in node['children']]
20+
21+
# Sort the keys
22+
keys_order = ['_type', 'label', 'name', 'id', 'value']
23+
sorted_node = {k: node[k] for k in keys_order if k in node}
24+
sorted_node.update({k: node[k] for k in node if k not in keys_order})
25+
26+
return sorted_node
1827

1928
return __travel(data)

0 commit comments

Comments
 (0)