1

在自动化测试用例时,我遇到了多个对象在 UiAutomator 中显示相同属性值的情况,除了边界(即显示器上的 x、y 位置)。我不想使用边界来定位对象。

在 AndroidViewClient 中,有一些方法可以找到具有其属性的特定对象。有没有办法在特定层次结构下定位对象。类似于: findViewByHierarchy(attr1:val1, attr2:val2, attr3:val3 ),其中 Id2 是 UI 树中 Id1 的子级,依此类推。如果没有,是否有任何解决方法可以实现相同的目标?

4

1 回答 1

2

所有findView*()方法都接收一个root参数,该参数指示发生搜索的树的根。

例如:

def findViewById(self, viewId, root="ROOT", viewFilter=None):
    '''
    Finds the View with the specified viewId.

    @type viewId: str
    @param viewId: the ID of the view to find
    @type root: str
    @type root: View
    @param root: the root node of the tree where the View will be searched
    @type: viewFilter: function
    @param viewFilter: a function that will be invoked providing the candidate View as a parameter
                       and depending on the return value (C{True} or C{False}) the View will be
                       selected and returned as the result of C{findViewById()} or ignored.
                       This can be C{None} and no extra filtering is applied.

    @return: the C{View} found or C{None}
    '''

此外,您可以使用自己遍历视图树

def traverse(self, root="ROOT", indent="", transform=View.__str__, stream=sys.stdout):
    '''
    Traverses the C{View} tree and prints its nodes.

    The nodes are printed converting them to string but other transformations can be specified
    by providing a method name as the C{transform} parameter.

    @type root: L{View}
    @param root: the root node from where the traverse starts
    @type indent: str
    @param indent: the indentation string to use to print the nodes
    @type transform: method
    @param transform: a method to use to transform the node before is printed
    '''
于 2014-09-12T04:10:48.263 回答