Android自動化測試中AccessibilityService獲取控件信息(2)-三種方式對比


Android自動化測試中AccessibilityService獲取控件信息(2)-三種方式對比

 

  上一篇文章:

Android自動化測試中AccessibilityService獲取控件信息(1)

已經做到了獲得控件信息,但是AccessibilityEvent.getSource()得到的是被點擊的單體對象。我們需要獲得是整個窗口的對象,在API16中AccessibilityService新引入的方法getRootInActiveWindow()可以滿足我們的要求,所以我們用這個方法得到整個窗口,然后遍歷得到所有子節點。

[java]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. AccessibilityNodeInfo rowNode = getRootInActiveWindow();  
  2.   if (rowNode == null) {  
  3.    Log.i(TAG, "noteInfo is null");  
  4.    return;  
  5.   } else {  
  6.    recycle(rowNode);  
  7.   }  
  8.   Log.i(TAG, "==============================================");  


其中循環的方法recycle():

[java]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. public void recycle(AccessibilityNodeInfo info) {  
  2.         if (info.getChildCount() == 0) {  
  3.             Log.i(TAG, "child widget----------------------------" + info.getClassName());  
  4.             Log.i(TAG, "showDialog:" + info.canOpenPopup());  
  5.             Log.i(TAG, "Text:" + info.getText());  
  6.             Log.i(TAG, "windowId:" + info.getWindowId());  
  7.         } else {  
  8.             for (int i = 0; i < info.getChildCount(); i++) {  
  9.                 if(info.getChild(i)!=null){  
  10.                     recycle(info.getChild(i));  
  11.                 }  
  12.             }  
  13.         }  
  14.     }  

打印輸出的信息有:控件名、是否點擊彈出對話框、窗口ID;你還可以查看API里的方法,獲得你想要的信息。

部署到手機上,測試結果如下:

  從測試的結果看,我們確實得到了我們想要的控件信息,但是發現每一個窗口信息其實是點擊前的窗口信息,我們無法得到當前窗口信息。我要做的是遍歷當前窗口里的所有控件。這不符合我的要求,所有對AccessibilityService的研究就到此為止了。把這個放出來,可能有點測試需求得到之前畫面的信息,那么這個可以滿足你。

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

 

總結

 

三種方式學習完了,對比一下各種方式的優缺點!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM