Best Python code snippet using ATX
android_layout.py
Source:android_layout.py  
...239            return choices[0][-1], choices[0][-2], choices[0][-3]240241        # TODO242        # # try if its non-clickable parent243        # def is_decendant(n1, n2):244        #     '''check if n1 is decandant of n2'''245        #     for c in n2.children:246        #         if c == n1 or is_decendant(n1, c):247        #             return True248        #     return False249        #250        # p = node.parent251        # while p and not p.clickable:252        #     pd, porder = self.get_node_selector(p)253        #     if porder is None:254        #         print 'parent node', p.className255        #         for i in range(len(p.children)):256        #             c = p.children[i]257        #             if c == node or is_decendant(node, c):258        #                 print 'child', i, c==node, c.className, c.resourceId, c.text259        #         return pd, porder260        #     p = p.parent261262        return node, d, order263264    def __find_selector_by_attrbutes(self, node):265        # avoid repeat over same attr266267        def attrs(n, name):268            '''get node attribute values'''269            res = set()270            v = getattr(n, name)271            if v: res.add(v)272            for subn in n.children:273                if subn.clickable: continue274                res.update(attrs(subn, name))275            return res276277        def is_decendant(n1, n2):278            '''check if n1 is decandant of n2'''279            for c in n2.children:280                if c == n1 or is_decendant(n1, c):281                    return True282            return False283284        candidates = {}285        def try_attr(top, attr, ignore_filter=None):286            for value in attrs(top, attr):287                if ignore_filter and ignore_filter(value):288                    continue289                tmp = self._filter_nodes({attr:value})290                if len(tmp) == 1:291                    return tmp[0], {attr:value}292                # save candidates293                for n in tmp:294                    if n == top or is_decendant(n, top):295                        candidates.setdefault(n, {})[attr] = len(tmp)296            return None, None297298        # try className299        n, cond = try_attr(node, 'className')300        if n:301            return n, cond, None302303        # try anything with a resourceId304        n, cond = try_attr(node, 'resourceId')305        if n:306            return n, cond, None307308        # try anything with a text
...validate_three_nodes.py
Source:validate_three_nodes.py  
...39    if node.value < ancestor.value:40        return is_ancestor(ancestor.left, node)41    return is_ancestor(ancestor.right, node)42"""NOT required..."""43# def is_decendant(decendant, node):44# 	if not node: return False45# 	if node == decendant: return True46# 	if decendant.value < node.value:47# 		return is_decendant(decendant, node.left)48# 	return is_decendant(decendant, node.right)49	50def validateThreeNodes(nodeOne, nodeTwo, nodeThree):51    is_nodeOne_ancestor = is_ancestor(nodeOne, nodeTwo)52    is_nodeThree_ancestor = is_ancestor(nodeThree, nodeTwo)53    # XOR: (T, T) => F and (F, F) => F54    if not (is_nodeOne_ancestor ^ is_nodeThree_ancestor): return False55    if is_nodeOne_ancestor:56        return is_ancestor(nodeTwo, nodeThree)...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
