def _test_view_layer(): from wpyscripts.wetest.element import Element elemA = Element("a/b/c", 1) elemB = Element("x/y/z", 2) elemC = Element("a/b/c", 3) telemA = TouchElem("scene1", elemA) telemB = TouchElem("scene1", elemB) telemC = TouchElem("scene1", elemC) vlayer1 = ViewLayer() vlayer1.add_element(telemA) vlayer1.add_element(telemB) vlayer1.add_element(telemC) vlayer1.sort_elems_by_name() vlayer2 = ViewLayer() vlayer2.add_element(telemC) vlayer2.add_element(telemA) vlayer2.add_element(telemB) vlayer1.sort_elems_by_name() print("vlayer equals? %s" % (vlayer1 == vlayer2)) print("vlayer1: ", vlayer1.fullstr()) print("vlayer2: ", vlayer2.fullstr()) set1 = set() set1.add(vlayer1) set1.add(vlayer2) print(set1)
def find_element(self, name): """ 通过GameObject.Find查找对应的GameObject :param name: GameObject.Find的参数 :Usage: >>>import wpyscripts.manager as manager >>>engine=manager.get_engine() >>>button=engine.find_element('/Canvas/Panel/Button') :return: a instance of Element if find the GameObject,else return None example: {"object_name":"/Canvas/Panel/Button", "instance":4257741} :rtype: Element :raise: """ logger.debug("find_element:{0}".format(name)) ret = self.socket.send_command(Commands.FIND_ELEMENTS, [name]) if ret: ret = ret[0] if ret["instance"] == -1: return None else: return Element(ret["name"], ret["instance"]) else: return None
def _test_touch_elem(): from wpyscripts.wetest.element import Element elemA = Element("a/b/c", 1) elemB = Element("x/y/z", 2) elemC = Element("a/b/c", 3) telemA = TouchElem("scene1", elemA) telemB = TouchElem("scene1", elemB) telemC = TouchElem("scene1", elemC) list1 = [telemA, telemB] print("telemC in list? %s" % (telemC in list1)) set1 = set() set1.add(telemA) set1.add(telemB) set1.add(telemC) print(set1)
def get_touchable_elements(self, params=None): """ 获取当前界面的可点击节点的列表(过期) :return: [(element1,point1),(element2,point2)] [({"object_name":"/Canvas/Panel/Button","Instance":4257741},{"x":250,"y":300}),.....] :raise WeTestRuntimeError """ ret = self.socket.send_command(Commands.GET_UI_INTERACT_STATUS, params) elements = [] for i in range(0, len(ret["elements"])): node = ret["elements"][i] element = Element(node["name"], node["instanceid"]) elements.append((element, {"x": node["bound"]["x"] + node["bound"]["fWidth"] / 2, "y": node["bound"]["y"] + node["bound"]["fHeight"] / 2})) return elements
def find_elements_path(self, path): """ 表达式匹配获取符合的所有节点 第一个节点"/"代表从根节点,如果不是代表可以从任意位置开始 index:代表节点的位置。 parent / \ index[0] index[1] name:代表节点名称,"*"代表任意名称 text:代表节点的文字内容(当前GameObject的挂载的Compenent) img:图片名称,sprite或者texture名称 /Canvas/Panel/Button Canvas[0]{txt="hello"}/Button /Canvas/Panel/*[1]/Button :param path: 需要查找的路径,/Canvas/Button[0]{txt=Button,img=img} :Usage: >>>import wpyscripts.manager as manager >>>engine=manager.get_engine() >>>button=engine.find_elements_path('/Canvas/Panel/Button') >>>button2=engine.find_elements_path('/Canvas/Panel/*[1]/Button') >>>button3=engine.find_elements_path('Canvas/Button{txt=hello}') :return:包含instance的Elements对象列表 example: [{"objectName":"/Canvas/Panel/Button", "Instance":4257741},{"objectName":"/Canvas/Panel/Button", "Instance":4257742}] """ nodeInfos = self._parse_path(path) if nodeInfos is None: raise WeTestInvaildArg("Error path") ret = self.send_command_with_retry(Commands.FIND_ELEMENT_PATH, nodeInfos) elements = [] if ret is None: return [] for e in ret: element = Element(e["name"], e["instance"]) elements.append(element) return elements
def find_elements_by_component(self, name): """ 通过GameObject.FindObjectsOfType(Type.GetType(name))查找对应的GameObject. Type.GetType获取不到的话,默认会尝试name,Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 及name, Assembly-CSharp-firstpass, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null :param name: 查找的类型的,AssemblyQualifiedName,如WetestManager,U3DAutomation, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null :return: 当前界面中所有挂载改界面的 """ ret = self.socket.send_command(Commands.FIND_ELEMENTS_COMPONENT, [name]) elements = [] for e in ret: element = Element(e["name"], e["instance"]) elements.append(element) return elements
def get_touchable_elements_bound(self, params=None): """ 获取当前界面的可点击节点的列表 :Usage: >>>import wpyscripts.manager as manager >>>engine=manager.get_engine() >>>buttons=engine.get_touchable_elements_bound() :return: [(element1,point1),(element2,point2)] [({"object_name":"/Canvas/Panel/Button","Instance":4257741},{"x":250,"y":300}),.....] :raise WeTestRuntimeError """ ret = self.socket.send_command(Commands.GET_UI_INTERACT_STATUS, params) elements = [] for i in range(0, len(ret["elements"])): node = ret["elements"][i] element = Element(node["name"], node["instanceid"]) bound = ElementBound(node["bound"]["x"], node["bound"]["y"], node["bound"]["fWidth"], node["bound"]["fHeight"]) elements.append((element, bound)) return ret["scenename"], elements