Android自动化测试中AccessibilityService获取控件信息(2)-三种方式对比

  上一篇文章:

Android自动化测试中AccessibilityService获取控件信息(1)

已经做到了获得控件信息,但是AccessibilityEvent.getSource()得到的是被点击的单体对象。我们需要获得是整个窗口的对象,在API16中AccessibilityService新引入的方法getRootInActiveWindow()可以满足我们的要求,所以我们用这个方法得到整个窗口,然后遍历得到所有子节点。

AccessibilityNodeInfo rowNode = getRootInActiveWindow();
  if (rowNode == null) {
   Log.i(TAG, "noteInfo is null");
   return;
  } else {
   recycle(rowNode);
  }
  Log.i(TAG, "==============================================");


其中循环的方法recycle():

public void recycle(AccessibilityNodeInfo info) {
		if (info.getChildCount() == 0) {
			Log.i(TAG, "child widget----------------------------" + info.getClassName());
			Log.i(TAG, "showDialog:" + info.canOpenPopup());
			Log.i(TAG, "Text:" + info.getText());
			Log.i(TAG, "windowId:" + info.getWindowId());
		} else {
			for (int i = 0; i < info.getChildCount(); i++) {
				if(info.getChild(i)!=null){
					recycle(info.getChild(i));
				}
			}
		}
	}

打印输出的信息有:控件名、是否点击弹出对话框、窗口ID;你还可以查看API里的方法,获得你想要的信息。

部署到手机上,测试结果如下:

Android自动化测试中AccessibilityService获取控件信息(2)-三种方式对比_第1张图片

  从测试的结果看,我们确实得到了我们想要的控件信息,但是发现每一个窗口信息其实是点击前的窗口信息,我们无法得到当前窗口信息。我要做的是遍历当前窗口里的所有控件。这不符合我的要求,所有对AccessibilityService的研究就到此为止了。把这个放出来,可能有点测试需求得到之前画面的信息,那么这个可以满足你。

 
  所以下一步,我又要从其他方面着手啦。

 

总结

 

三种方式学习完了,对比一下各种方式的优缺点!

 

Android自动化测试中AccessibilityService获取控件信息(2)-三种方式对比_第2张图片

你可能感兴趣的:(android自动化测试)