• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1import logging
2import re
3
4
5class Layout:
6
7    def __init__(self, json_data):
8        self.element_list = self.parse_attribute_nodes(json_data)
9
10    def parse_attribute_nodes(self, json_obj, attr_list=None):
11        if attr_list is None:
12            attr_list = []
13
14        if isinstance(json_obj, dict):
15            for key, value in json_obj.items():
16                if key == 'attributes' and isinstance(value, dict):
17                    attr_list.append(value)
18                elif isinstance(value, (dict, list)):
19                    self.parse_attribute_nodes(value, attr_list)
20        elif isinstance(json_obj, list):
21            for item in json_obj:
22                self.parse_attribute_nodes(item, attr_list)
23        return attr_list
24
25    def get_elements_by_text(self, text):
26        ems = []
27        for e in self.element_list:
28            if e.get('text') == text:
29                ems.append(e)
30        return ems
31
32    def get_element_by_text(self, text, index=0):
33        ems = self.get_elements_by_text(text)
34        if not ems:
35            return
36        return ems[index]
37
38    def assert_text_exist(self, text):
39        element = self.get_elements_by_text(text)
40        rst = '是' if element else '否'
41        logging.info('检查[文本]="{}"是否存在?[{}]'.format(text, rst))
42        assert element
43
44    def get_elements_by_type(self, _type):
45        ems = []
46        for e in self.element_list:
47            if e.get('type') == _type:
48                ems.append(e)
49        return ems
50
51    def get_element_by_type(self, _type, index=0):
52        ems = self.get_elements_by_type(_type)
53        if not ems:
54            return
55        return ems[index]
56
57    def assert_type_exist(self, _type):
58        element = self.get_elements_by_type(_type)
59        rst = '是' if element else '否'
60        logging.info('检查[type]="{}"是否存在?[{}]'.format(_type, rst))
61        assert element
62
63    def get_elements_by_key(self, key):
64        ems = []
65        for e in self.element_list:
66            if e.get('key') == key:
67                ems.append(e)
68        return ems
69
70    def get_element_by_key(self, key, index=0):
71        ems = self.get_elements_by_key(key)
72        if not ems:
73            return
74        return ems[index]
75
76    def assert_key_exist(self, key):
77        element = self.get_elements_by_key(key)
78        rst = '是' if element else '否'
79        logging.info('检查[key]="{}"是否存在?[{}]'.format(key, rst))
80        assert element
81
82    @staticmethod
83    def center_of_element(e):
84        assert e, '控件不存在'
85        bounds = e.get('bounds')
86        x1, y1, x2, y2 = [int(i) for i in re.findall(r'\d+', bounds)]
87        x = (x1 + x2) // 2
88        y = (y1 + y2) // 2
89        return x, y
90