def selectImpl(self, cond, multiple, root, maxDepth, onlyVisibleNode, includeRoot):
        """
        Selector internal implementation. 
        TODO: add later.

        .. note:: This doc shows only the outline of the algorithm. Do not call this method in your code as this
         is an internal method.

        Args:
            cond (:obj:`tuple`): query expression
            multiple (:obj:`bool`): whether or not to select multiple nodes. If true, all nodes that matches the given
             condition will return, otherwise, only the first node matches will.
            root (inherited from :py:class:`AbstractNode <poco.sdk.AbstractNode>`): start traversing from the given
             root node
            maxDepth (:obj:`bool`): max traversing depth
            onlyVisibleNode (:obj:`bool`): If True, skip those node which visibility (the value of visible attribute) is
             False.
            includeRoot (:obj:`bool`): whether not not to include the root node if its child(ren) match(es) the node

        Returns:
            :obj:`list` <inherited from :py:class:`AbstractNode <poco.sdk.AbstractNode>`>: The same as
             :py:meth:`select <poco.sdk.Selector.ISelector.select>`.
        """

        result = []
        if not root:
            return result

        op, args = cond

        if op in ('>', '/'):
            # children or offsprings
            # 父子直系相对节点选择
            parents = [root]
            for index, arg in enumerate(args):
                midResult = []
                for parent in parents:
                    if op == '/' and index != 0:
                        _maxDepth = 1
                    else:
                        _maxDepth = maxDepth
                    # 按路径进行遍历一定要multiple为true才不会漏掉
                    _res = self.selectImpl(arg, True, parent, _maxDepth, onlyVisibleNode, False)
                    [midResult.append(r) for r in _res if r not in midResult]
                parents = midResult
            result = parents
        elif op == '-':
            # sibling
            # 兄弟节点选择
            query1, query2 = args
            result1 = self.selectImpl(query1, multiple, root, maxDepth, onlyVisibleNode, includeRoot)
            for n in result1:
                sibling_result = self.selectImpl(query2, multiple, n.getParent(), 1, onlyVisibleNode, includeRoot)
                [result.append(r) for r in sibling_result if r not in result]
        elif op == 'index':
            cond, i = args
            try:
                result = [self.selectImpl(cond, multiple, root, maxDepth, onlyVisibleNode, includeRoot)[i]]
            except IndexError:
                raise NoSuchTargetException(
                    u'Query results index out of range. Index={} condition "{}" from root "{}".'.format(i, cond, root))
        elif op == '^':
            # parent
            # only select parent of the first matched UI element
            query1, _ = args
            result1 = self.selectImpl(query1, False, root, maxDepth, onlyVisibleNode, includeRoot)
            if result1:
                parent_node = result1[0].getParent()
                if parent_node is not None:
                    result = [parent_node]
        else:
            self._selectTraverse(cond, root, result, multiple, maxDepth, onlyVisibleNode, includeRoot)

        return result