上一篇文章:
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里的方法,獲得你想要的信息。
部署到手機上,測試結果如下:
從測試的結果看,我們確實得到了我們想要的控件信息,但是發現每一個窗口信息其實是點擊前的窗口信息,我們無法得到當前窗口信息。我要做的是遍歷當前窗口里的所有控件。這不符合我的要求,所有對AccessibilityService的研究就到此為止了。把這個放出來,可能有點測試需求得到之前畫面的信息,那么這個可以滿足你。
所以下一步,我又要從其他方面着手啦。
總結
三種方式學習完了,對比一下各種方式的優缺點!