Android自动化测试中uiautomator修改uiautomatorviewer获取不到动态界面的缺陷

转:http://blog.csdn.net/itfootball/article/details/22683999

在之前的第一篇文章:


Android自动化测试中hierarchyviewer和uiautomatorviewer获取控件信息的方式比对(1)


我说uiautomatorviewer获取动态的界面会报错。错误如下:




今天我学习uiautomator的时候,用dumpWindowHierarchy()获得控件信息的时候,发现这个方法可以得到动态的界面信息。这就弥补了uiautomatorviewer的缺陷。下面把过程给大家贴出来。


如何编写Java工程文件的信息,前辈们写了很多,我把我学习的连接放给大家。


http://blog.csdn.net/robinzhou/article/details/8447058


我捡主要的将。java代码:


[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.ibm.test;  
  2.   
  3. import java.io.File;  
  4.   
  5. import com.android.uiautomator.core.UiDevice;  
  6. import com.android.uiautomator.core.UiObjectNotFoundException;  
  7. import com.android.uiautomator.testrunner.UiAutomatorTestCase;  
  8.   
  9. public class MyUIauto extends UiAutomatorTestCase {  
  10.     private static final String TAG = "MyUIauto";  
  11.   
  12.     public void testPressHome() throws UiObjectNotFoundException {  
  13.         File file = new File("/data/local/tmp/local/tmp/qian.xml");  
  14.         UiDevice uiDevice = getUiDevice();  
  15.         //uiDevice.pressHome();  
  16.         String realPath = "qian.xml";  
  17.         uiDevice.dumpWindowHierarchy(realPath);  
  18.     }  
  19. }  

我看了一下dumpWindowHierarchy的方法源码:


[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public void  [More ...] dumpWindowHierarchy(String fileName) {  
  2.     AccessibilityNodeInfo root = getAutomatorBridge().getQueryController().getAccessibilityRootNode();  
  3.     if(root != null) {  
  4.         AccessibilityNodeInfoDumper.dumpWindowToFile(  
  5.                 root, new File(new File(Environment.getDataDirectory(),  
  6.                         "local/tmp"), fileName));  
  7.     }  
  8. }  


官网上的说明默认目录是/data/local/tmp目录,但从源码上可以看见它又增加了local/tmp目录。合并起来就是/data/local/tmp/local/tmp目录。这也是我起先随便建立个目录造成的错误的原因,老是报/data/local/tmp/local/tmp/下无文件的错误。后来找到源码才知道。源码网站给大家:


grepcode

编写完java工程 以后,用ant命令生成jar包,然后把jar包push到设备上,将秒表打开。然后运行脚本,得到xml文件,抓到本地。查看xml文件如下:


[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <?xml version='1.0' encoding='UTF-8' standalone='yes' ?>  
  2. <hierarchy rotation="0">  
  3.     <node index="0" text="" resource-id="" class="android.widget.FrameLayout"  
  4.         package="com.android.deskclock" content-desc="" checkable="false"  
  5.         checked="false" clickable="false" enabled="true" focusable="false"  
  6.         focused="false" scrollable="false" long-clickable="false" password="false"  
  7.         selected="false" bounds="[0,0][480,854]">  
  8.         <node index="0" text="" resource-id="android:id/action_bar_overlay_layout"  
  9.             class="android.view.View" package="com.android.deskclock"  
  10.             content-desc="" checkable="false" checked="false" clickable="false"  
  11.             enabled="true" focusable="false" focused="false" scrollable="false"  
  12.             long-clickable="false" password="false" selected="false" bounds="[0,0][480,854]">  
  13.             <node index="0" text="" resource-id="android:id/action_bar_container"  
  14.                 class="android.widget.FrameLayout" package="com.android.deskclock"  
  15.                 content-desc="" checkable="false" checked="false" clickable="false"  
  16.                 enabled="true" focusable="false" focused="false" scrollable="false"  
  17.                 long-clickable="false" password="false" selected="false" bounds="[0,38][480,110]">  
  18.                 <node index="0" text="" resource-id="android:id/action_bar"  
  19.                     class="android.view.View" package="com.android.deskclock"  
  20.                     content-desc="" checkable="false" checked="false" clickable="false"  
  21.                     enabled="true" focusable="false" focused="false" scrollable="false"  
  22.                     long-clickable="false" password="false" selected="false" bounds="[0,38][480,110]">  
  23.                     <node index="0" text="" resource-id=""  
  24.                         class="android.widget.LinearLayout" package="com.android.deskclock"  
  25.                         content-desc="" checkable="false" checked="false" clickable="true"  
  26.                         enabled="false" focusable="false" focused="false" scrollable="false"  
  27.                         long-clickable="false" password="false" selected="false" bounds="[24,38][90,110]">  
  28.                         <node index="0" text="" resource-id=""  
  29.                             class="android.widget.LinearLayout" package="com.android.deskclock"  
  30.                             content-desc="" checkable="false" checked="false" clickable="false"  
  31.                             enabled="true" focusable="false" focused="false" scrollable="false"  
  32.                             long-clickable="false" password="false" selected="false" bounds="[24,55][90,92]">  
  33.                             <node index="0" text="秒表" resource-id="android:id/action_bar_title"  
  34.                                 class="android.widget.TextView" package="com.android.deskclock"  
  35.                                 content-desc="" checkable="false" checked="false" clickable="false"  
  36.                                 enabled="true" focusable="false" focused="false" scrollable="false"  
  37.                                 long-clickable="false" password="false" selected="false"  
  38.                                 bounds="[24,55][78,92]" />  
  39.                         </node>  
  40.                     </node>  
  41.                 </node>  
  42.             </node>  
  43.             <node index="1" text="" resource-id="android:id/content" class="android.widget.FrameLayout"  
  44.                 package="com.android.deskclock" content-desc="" checkable="false"  
  45.                 checked="false" clickable="false" enabled="true" focusable="false"  
  46.                 focused="false" scrollable="false" long-clickable="false" password="false"  
  47.                 selected="false" bounds="[0,110][480,764]">  
  48.                 <node index="0" text=""  
  49.                     resource-id="com.android.deskclock:id/desk_clock_pager" class="android.support.v4.view.ViewPager"  
  50.                     package="com.android.deskclock" content-desc="" checkable="false"  
  51.                     checked="false" clickable="false" enabled="true" focusable="true"  
  52.                     focused="false" scrollable="true" long-clickable="false" password="false"  
  53.                     selected="false" bounds="[0,110][480,764]">  
  54.                     <node index="3" text="" resource-id=""  
  55.                         class="android.widget.LinearLayout" package="com.android.deskclock"  
  56.                         content-desc="" checkable="false" checked="false" clickable="false"  
  57.                         enabled="true" focusable="false" focused="false" scrollable="false"  
  58.                         long-clickable="false" password="false" selected="false"  
  59.                         bounds="[0,110][480,764]">  
  60.                         <node index="0" text="" resource-id=""  
  61.                             class="android.widget.LinearLayout" package="com.android.deskclock"  
  62.                             content-desc="" checkable="false" checked="false" clickable="false"  
  63.                             enabled="true" focusable="false" focused="false" scrollable="false"  
  64.                             long-clickable="false" password="false" selected="false"  
  65.                             bounds="[36,110][444,373]">  
  66.                             <node index="0" text="" resource-id=""  
  67.                                 class="android.widget.RelativeLayout" package="com.android.deskclock"  
  68.                                 content-desc="" checkable="false" checked="false" clickable="false"  
  69.                                 enabled="true" focusable="false" focused="false" scrollable="false"  
  70.                                 long-clickable="false" password="false" selected="false"  
  71.                                 bounds="[36,140][444,331]">  
  72.                                 <node index="0" text="00:06:24.9"  
  73.                                     resource-id="com.android.deskclock:id/interval_time" class="android.widget.TextView"  
  74.                                     package="com.android.deskclock" content-desc="" checkable="false"  
  75.                                     checked="false" clickable="false" enabled="true" focusable="false"  
  76.                                     focused="false" scrollable="false" long-clickable="false"  
  77.                                     password="false" selected="false" bounds="[261,140][428,189]" />  
  78.                                 <node index="1" text="00:06:24.9" resource-id="com.android.deskclock:id/total_time"  
  79.                                     class="android.widget.TextView" package="com.android.deskclock"  
  80.                                     content-desc="" checkable="false" checked="false" clickable="false"  
  81.                                     enabled="true" focusable="false" focused="false" scrollable="false"  
  82.                                     long-clickable="false" password="false" selected="false"  
  83.                                     bounds="[43,219][436,331]" />  
  84.                             </node>  
  85.                         </node>  
  86.                         <node index="1" text="" resource-id=""  
  87.                             class="android.widget.LinearLayout" package="com.android.deskclock"  
  88.                             content-desc="" checkable="false" checked="false" clickable="false"  
  89.                             enabled="true" focusable="false" focused="false" scrollable="false"  
  90.                             long-clickable="false" password="false" selected="false"  
  91.                             bounds="[18,405][462,477]">  
  92.                             <node index="0" text="暂停" resource-id="com.android.deskclock:id/pause"  
  93.                                 class="android.widget.Button" package="com.android.deskclock"  
  94.                                 content-desc="" checkable="false" checked="false" clickable="true"  
  95.                                 enabled="true" focusable="true" focused="false" scrollable="false"  
  96.                                 long-clickable="false" password="false" selected="false"  
  97.                                 bounds="[18,405][160,477]" />  
  98.                             <node index="1" text="停止" resource-id="com.android.deskclock:id/stop"  
  99.                                 class="android.widget.Button" package="com.android.deskclock"  
  100.                                 content-desc="" checkable="false" checked="false" clickable="true"  
  101.                                 enabled="true" focusable="true" focused="false" scrollable="false"  
  102.                                 long-clickable="false" password="false" selected="false"  
  103.                                 bounds="[169,405][311,477]" />  
  104.                             <node index="2" text="计次" resource-id="com.android.deskclock:id/mark"  
  105.                                 class="android.widget.Button" package="com.android.deskclock"  
  106.                                 content-desc="" checkable="false" checked="false" clickable="true"  
  107.                                 enabled="true" focusable="true" focused="false" scrollable="false"  
  108.                                 long-clickable="false" password="false" selected="false"  
  109.                                 bounds="[320,405][462,477]" />  
  110.                         </node>  
  111.                         <node index="2" text="" resource-id=""  
  112.                             class="android.widget.LinearLayout" package="com.android.deskclock"  
  113.                             content-desc="" checkable="false" checked="false" clickable="false"  
  114.                             enabled="true" focusable="false" focused="false" scrollable="false"  
  115.                             long-clickable="false" password="false" selected="false"  
  116.                             bounds="[18,510][462,716]">  
  117.                             <node index="0" text="" resource-id="com.android.deskclock:id/list"  
  118.                                 class="android.widget.ListView" package="com.android.deskclock"  
  119.                                 content-desc="" checkable="false" checked="false" clickable="true"  
  120.                                 enabled="true" focusable="false" focused="false" scrollable="false"  
  121.                                 long-clickable="false" password="false" selected="false"  
  122.                                 bounds="[18,526][462,700]" />  
  123.                         </node>  
  124.                     </node>  
  125.                 </node>  
  126.             </node>  
  127.             <node index="2" text="" resource-id="android:id/split_action_bar"  
  128.                 class="android.widget.FrameLayout" package="com.android.deskclock"  
  129.                 content-desc="" checkable="false" checked="false" clickable="false"  
  130.                 enabled="true" focusable="false" focused="false" scrollable="false"  
  131.                 long-clickable="false" password="false" selected="false" bounds="[0,764][480,854]">  
  132.                 <node index="0" text="" resource-id=""  
  133.                     class="android.widget.HorizontalScrollView" package="com.android.deskclock"  
  134.                     content-desc="" checkable="false" checked="false" clickable="false"  
  135.                     enabled="true" focusable="true" focused="false" scrollable="false"  
  136.                     long-clickable="false" password="false" selected="false" bounds="[0,764][480,854]">  
  137.                     <node index="0" text="" resource-id=""  
  138.                         class="android.widget.LinearLayout" package="com.android.deskclock"  
  139.                         content-desc="" checkable="false" checked="false" clickable="false"  
  140.                         enabled="true" focusable="false" focused="false" scrollable="false"  
  141.                         long-clickable="false" password="false" selected="false"  
  142.                         bounds="[0,764][480,854]">  
  143.                         <node index="0" text="" resource-id=""  
  144.                             class="android.app.ActionBar$Tab" package="com.android.deskclock"  
  145.                             content-desc="" checkable="false" checked="false" clickable="true"  
  146.                             enabled="true" focusable="true" focused="false" scrollable="false"  
  147.                             long-clickable="false" password="false" selected="false"  
  148.                             bounds="[0,764][120,854]">  
  149.                             <node index="0" text="" resource-id=""  
  150.                                 class="android.widget.LinearLayout" package="com.android.deskclock"  
  151.                                 content-desc="" checkable="false" checked="false" clickable="false"  
  152.                                 enabled="true" focusable="false" focused="false" scrollable="false"  
  153.                                 long-clickable="false" password="false" selected="false"  
  154.                                 bounds="[24,770][96,850]">  
  155.                                 <node index="0" text="" resource-id="com.android.deskclock:id/tab_icon"  
  156.                                     class="android.widget.ImageView" package="com.android.deskclock"  
  157.                                     content-desc="" checkable="false" checked="false" clickable="false"  
  158.                                     enabled="true" focusable="true" focused="false" scrollable="false"  
  159.                                     long-clickable="false" password="false" selected="false"  
  160.                                     bounds="[36,770][84,818]" />  
  161.                                 <node index="1" text="闹钟" resource-id="com.android.deskclock:id/tab_text"  
  162.                                     class="android.widget.TextView" package="com.android.deskclock"  
  163.                                     content-desc="" checkable="false" checked="false" clickable="false"  
  164.                                     enabled="true" focusable="false" focused="false" scrollable="false"  
  165.                                     long-clickable="false" password="false" selected="false"  
  166.                                     bounds="[24,818][96,850]" />  
  167.                             </node>  
  168.                         </node>  
  169.                         <node index="1" text="" resource-id=""  
  170.                             class="android.app.ActionBar$Tab" package="com.android.deskclock"  
  171.                             content-desc="" checkable="false" checked="false" clickable="true"  
  172.                             enabled="true" focusable="true" focused="false" scrollable="false"  
  173.                             long-clickable="false" password="false" selected="false"  
  174.                             bounds="[120,764][240,854]">  
  175.                             <node index="0" text="" resource-id=""  
  176.                                 class="android.widget.LinearLayout" package="com.android.deskclock"  
  177.                                 content-desc="" checkable="false" checked="false" clickable="false"  
  178.                                 enabled="true" focusable="false" focused="false" scrollable="false"  
  179.                                 long-clickable="false" password="false" selected="false"  
  180.                                 bounds="[144,770][216,850]">  
  181.                                 <node index="0" text="" resource-id="com.android.deskclock:id/tab_icon"  
  182.                                     class="android.widget.ImageView" package="com.android.deskclock"  
  183.                                     content-desc="" checkable="false" checked="false" clickable="false"  
  184.                                     enabled="true" focusable="true" focused="false" scrollable="false"  
  185.                                     long-clickable="false" password="false" selected="false"  
  186.                                     bounds="[156,770][204,818]" />  
  187.                                 <node index="1" text="世界时间" resource-id="com.android.deskclock:id/tab_text"  
  188.                                     class="android.widget.TextView" package="com.android.deskclock"  
  189.                                     content-desc="" checkable="false" checked="false" clickable="false"  
  190.                                     enabled="true" focusable="false" focused="false" scrollable="false"  
  191.                                     long-clickable="false" password="false" selected="false"  
  192.                                     bounds="[144,818][216,850]" />  
  193.                             </node>  
  194.                         </node>  
  195.                         <node index="2" text="" resource-id=""  
  196.                             class="android.app.ActionBar$Tab" package="com.android.deskclock"  
  197.                             content-desc="" checkable="false" checked="false" clickable="true"  
  198.                             enabled="true" focusable="true" focused="false" scrollable="false"  
  199.                             long-clickable="false" password="false" selected="false"  
  200.                             bounds="[240,764][360,854]">  
  201.                             <node index="0" text="" resource-id=""  
  202.                                 class="android.widget.LinearLayout" package="com.android.deskclock"  
  203.                                 content-desc="" checkable="false" checked="false" clickable="false"  
  204.                                 enabled="true" focusable="false" focused="false" scrollable="false"  
  205.                                 long-clickable="false" password="false" selected="false"  
  206.                                 bounds="[264,770][336,850]">  
  207.                                 <node index="0" text="" resource-id="com.android.deskclock:id/tab_icon"  
  208.                                     class="android.widget.ImageView" package="com.android.deskclock"  
  209.                                     content-desc="" checkable="false" checked="false" clickable="false"  
  210.                                     enabled="true" focusable="true" focused="false" scrollable="false"  
  211.                                     long-clickable="false" password="false" selected="false"  
  212.                                     bounds="[276,770][324,818]" />  
  213.                                 <node index="1" text="倒计时" resource-id="com.android.deskclock:id/tab_text"  
  214.                                     class="android.widget.TextView" package="com.android.deskclock"  
  215.                                     content-desc="" checkable="false" checked="false" clickable="false"  
  216.                                     enabled="true" focusable="false" focused="false" scrollable="false"  
  217.                                     long-clickable="false" password="false" selected="false"  
  218.                                     bounds="[264,818][336,850]" />  
  219.                             </node>  
  220.                         </node>  
  221.                         <node index="3" text="" resource-id=""  
  222.                             class="android.app.ActionBar$Tab" package="com.android.deskclock"  
  223.                             content-desc="" checkable="false" checked="false" clickable="true"  
  224.                             enabled="true" focusable="true" focused="false" scrollable="false"  
  225.                             long-clickable="false" password="false" selected="true"  
  226.                             bounds="[360,764][480,854]">  
  227.                             <node index="0" text="" resource-id=""  
  228.                                 class="android.widget.LinearLayout" package="com.android.deskclock"  
  229.                                 content-desc="" checkable="false" checked="false" clickable="false"  
  230.                                 enabled="true" focusable="false" focused="false" scrollable="false"  
  231.                                 long-clickable="false" password="false" selected="true"  
  232.                                 bounds="[384,770][456,850]">  
  233.                                 <node index="0" text="" resource-id="com.android.deskclock:id/tab_icon"  
  234.                                     class="android.widget.ImageView" package="com.android.deskclock"  
  235.                                     content-desc="" checkable="false" checked="false" clickable="false"  
  236.                                     enabled="true" focusable="true" focused="false" scrollable="false"  
  237.                                     long-clickable="false" password="false" selected="true"  
  238.                                     bounds="[396,770][444,818]" />  
  239.                                 <node index="1" text="秒表" resource-id="com.android.deskclock:id/tab_text"  
  240.                                     class="android.widget.TextView" package="com.android.deskclock"  
  241.                                     content-desc="" checkable="false" checked="false" clickable="false"  
  242.                                     enabled="true" focusable="false" focused="false" scrollable="false"  
  243.                                     long-clickable="false" password="false" selected="true"  
  244.                                     bounds="[384,818][456,850]" />  
  245.                             </node>  
  246.                         </node>  
  247.                     </node>  
  248.                 </node>  
  249.             </node>  
  250.         </node>  
  251.     </node>  
  252. </hierarchy>  

所以,这个方式才是获得控件的最佳方法。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值