android自动化测试Uiautomator API分析之二

这篇博客详细探讨了Android自动化测试中Uiautomator API的应用,特别是针对控件操作的`findAccessibilityNodeInfo`和`longTapNoSync`方法。`findAccessibilityNodeInfo`通过`getRootNode`获取根节点,并使用`translateCompoundSelector`遍历控件树以定位目标。而`longTapNoSync`方法涉及`touchDown`和`touchUp`,通过注入MotionEvent实现长按事件。文章深入到UiAutomation和AccessibilityInteractionClient层面,揭示了事件注入的底层流程。
摘要由CSDN通过智能技术生成

对控件的操作,主要在UiObject中。例如各种点击事件。

以长按事件来论述详细的流程。

UiObject的longClick方法如下,

public boolean longClick() throws UiObjectNotFoundException  {
        Tracer.trace();
        AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout());
        if(node == null) {
            throw new UiObjectNotFoundException(getSelector().toString());
        }
        Rect rect = getVisibleBounds(node);
        return getInteractionController().longTapNoSync(rect.centerX(), rect.centerY());
    }

首先调用findAccessibilityNodeInfo方法在当前屏幕重新查找该控件,

然后调用InteractionController 的longTapNoSync方法写入事件。

1.1 findAccessibilityNodeInfo

protected AccessibilityNodeInfo findAccessibilityNodeInfo(long timeout) {
        AccessibilityNodeInfo node = null;
        long startMills = SystemClock.uptimeMillis();
        long currentMills = 0;
        while (currentMills <= timeout) {
            node = getQueryController().findAccessibilityNodeInfo(getSelector());
            if (node != null) {
                break;
            } else {
                // does nothing if we're reentering another runWatchers()
                UiDevice.getInstance().runWatchers();
            }
            currentMills = SystemClock.uptimeMillis() - startMills;
            if(timeout > 0) {
                SystemClock.sleep(WAIT_FOR_SELECTOR_POLL);
            }
        }
        return node;
    }

getQueryController方法返回的是QueryController对象,然后调用findAccessibilityNodeInfo,


                
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值