自动化打点初探

作者: 轻微 | 来源:发表于2016-01-22 19:33 被阅读1953次

dim.red
好处:
业务逻辑可以和打点逻辑分离.
打点更灵活.
防止漏打的情况.
发包以后可以新增打点:

实现原理:
(TalkingData灵动分析技术揭秘(下))
http://www.9miao.com/thread-70467-1-1.html
简单的说:就是给View设置AccessibilityDelegate,而当View 产生了click,long_click 等事件的时候.会在响应原有的Listener方法后.发送消息给
AccessibilityDelegate.然后在sendAccessibilityEvent方法下做打点操作.

设置AccessibilityDelegate.

方法一:

在onResume中对activity.getWindow().getDecorView().getRootView()进行向下遍历



application.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
  @Override
  public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
   
  }

  @Override
  public void onActivityStarted(Activity activity) {

  }

  @Override
  public void onActivityResumed(Activity activity) {
    ViewTreeProcess.getInstant().process(activity.getWindow().getDecorView().getRootView());
  }

  @Override
  public void onActivityPaused(Activity activity) {

  }

  @Override
  public void onActivityStopped(Activity activity) {

  }

  @Override
  public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

  }

  @Override
  public void onActivityDestroyed(Activity activity) {

  }
});

第2种:

拦截LayouInflater 对象


/**
* 类:
* Created by dim on 16/1/9.
*/
public class AutoTrackActivity extends AppCompatActivity {

  @Override
  public Object getSystemService(@NonNull String name) {

    Object object = super.getSystemService(name);
    if (traceEnable() && object instanceof LayoutInflater) {
      return new TrackLayoutInflater((LayoutInflater) object);
    }
    return object;
  }

  public boolean traceEnable() {

    return false;
  }
}

优缺点:
第一种对app的浸入性小.只要在Application 注册一下就好了
缺点是只遍历activity上面的View, 对类似PopupWindow 和Dialog 这种直接用WindowManger addView 的无能为力.

第2种对app的浸入性比第一种大,但是并不是并不可接受的.
使用AutoTrackActivity 作为activity的基类.或者对getSystemService方法进行拦截.因为要对LayoutInflater 进行代理的.对所有的使用到LayoutInflater的地方都可以覆盖到.像activity,dialog,PopupWindow都有很好的支持.

定位View

View 的唯一性.
根据context的className+View自身的 Id的String 值.(String 值可以反射R文件得到)+View 的className值确定.
当前没有id.向上需要父类的id,如果父类id 没有则记录父类className+getChildAt()值并且继续往上找,直到找到有id的view或者没有父类为止

获取额外信息

通过给View 设置setTag(int key, final Object tag).打印的时候获取这个tag,当前view没有,往它的Parent的找.直到没有父控件或者找到tag为止.

Feature

  1. 配置化打点。
  • 配置化加点。
  • 自动获取额外信息。
  • (已完成)获取fragment信息。

最后

以后把源码放到三帅上面.

相关文章

  • 自动化打点初探

    dim.red好处:业务逻辑可以和打点逻辑分离.打点更灵活.防止漏打的情况.发包以后可以新增打点: 实现原理:(T...

  • 打点自动化测试方案

    前提:5个打点 abcde 进行 12345的操作 导出打点日志 进行分析 确认点:是否是一共5个点 确认是否按照...

  • selenium初探

    selenium初探 selenium简介与安装 简介 selenium是一个网站的自动化测试库,但由于其具有大量...

  • 自动化测试初探

    https://testerhome.com/topics/6417 1、Appium Appium是一个开源的、...

  • airtest 自动化初探

    airtest 官网 文档和IDE下载,请点击下方链接。 http://airtest.netease.com a...

  • iOS Fastlane 自动化打包进阶(上传AppStore、

    一、前言 在上一篇文章iOS Fastlane 自动化打包初探中我们介绍了fastlane的一些简单用法,其实fa...

  • 春节将近,打点打点

    年关将近,各行各业都在加班加点的忙碌着,想多赚点钱,以便过个好年。 听各行业的生意人说,这两三年一年不如一年,生意...

  • 苹果 ARKit 初探

    苹果 ARKit 初探 苹果 ARKit 初探

  • 打点

    1,怀着忐忑的心情,我拖着沉重的脚步,缓慢的歩向前面不远处的红色桑塔纳小轿车。站在驾驶位门前的人看见我后,摇摇头叹...

  • 打点

    农民种地需要施肥,工厂机床高速运转需要润滑油,这同我们人类要维系繁衍需要食物一样,这是天经地义的事,谁都不会质疑。...

网友评论

    本文标题:自动化打点初探

    本文链接:https://www.haomeiwen.com/subject/mydqkttx.html