目前在自己的产品和竞品上,使用 appium 来获取页面加载时间,想法很简单,就是点击入口元素,埋点,然后定位一个目标元素再埋点,通过两个埋点时间差来计算页面加载时间。
现在做下来发现做出的时间比实际时间要长比较多,研究了下,大概有 2 个原因:

  1. 页面 dump 时间无法省去
  2. 遍历元素的时候会有等待

其中第一个问题,暂时没有比较好的解决方法,不知道大家有没有什么建议?

第二个问题,现在的想法是更改 uiautomator 的源码来解决,可以看到下面的源码中,在查找匹配元素的时候,每次找不到会有个固定等待时间,这个值默认是 1s
但是第二个问题来了,改完以后,怎么打 uiautomator.jar 包。。。

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;
}


↙↙↙阅读原文可查看相关链接,并与作者交流