Wednesday, April 2, 2014

UiAutomator简介(1)

UiAutomator也是用于Android testing的工具并且是Android亲生的,语言是JAVA(不同于MonkeyRunner的python),功能也比MonkeyRunner强大,可以跨app测试。只是比起MonkeyRunner配置麻烦点。

具体步骤可参考:http://blog.csdn.net/u010961631/article/details/9616581
1. 新建Java Project叫UiAutomator
2. 添加JUnit库 (add library)
3. 添加Android库 (add external JARs:android.jar & uiautomator.jar under android-sdk platforms).  在2022年,android库已经绑定到android studio中,所以要先下载它,再在studio中下载API 19版本的SDK,
C:\Users\KK\AppData\Local\Android\Sdk\platforms\android-19
下载以后会看到
C:\Users\KK\AppData\Local\Android\Sdk\platform-tools\adb.exe
C:\Users\KK\AppData\Local\Android\Sdk\platforms\android-19\android.jar
C:\Users\KK\AppData\Local\Android\Sdk\platforms\android-19\uiautomator.jar

另一种方法是用以前的安装包,保留在C:\Users\KK\Documents\MyFiles\Coding\Java\UiAutomator2022
System environment加入到path中:
C:\Users\KK\Downloads\platform-tools_r33.0.2-windows\platform-tools (adb) 
C:\Users\KK\Downloads\tools_r22.6.1-windows\tools (android.bat)
C:\Users\KK\Downloads\apache-ant-1.9.16\bin (ant)
第二个https://dl-ssl.google.com/android/repository/tools_r22.6.1-windows.zip中下载 (ref)

4. 在src中添加包com,然后添加HelloWorld.java文件
代码如下:

package com.jctech.uiautomator;  
import com.android.uiautomator.core.UiObject;  
import com.android.uiautomator.core.UiObjectNotFoundException;  
import com.android.uiautomator.core.UiScrollable;  
import com.android.uiautomator.core.UiSelector;  
import com.android.uiautomator.testrunner.UiAutomatorTestCase;

public class HelloWorld extends UiAutomatorTestCase {   


  public void testDemo() throws UiObjectNotFoundException {   

     
     // Simulate a short press on the HOME button.
     getUiDevice().pressHome();
       getUiDevice().pressHome();
     
     UiScrollable appViews = new UiScrollable(new UiSelector()
        .scrollable(true));
     
     UiObject carmaxApp = appViews.getChildByText(new UiSelector()
        .className(android.widget.TextView.class.getName()), 
        "CarMax",true);
     carmaxApp.clickAndWaitForNewWindow();

 }   



}



5. 获得Android ID
    cd C:\Users\KK\AppData\Local\Android\Sdk\tools
    Run android list and get id=1 for "android-19"
    2022年android命令已经被deprecated,所以需要从release notes里面下载。
    下载完毕后,到tools目录,此时跑android list没有任何目标,因为没有安装任何android api (version),所 
    以先要type android,这是SDK UI就会出现,安装android 19。安装完毕后,再type android list, 就会出现
    id=1 (如果只装了一个API的话)
6. 生成build.xml
C:\Users\KK\Downloads\tools_r22.6.1-windows\tools>android create uitest-project -t 1 -p C:\Users\KK\Documents\MyFiles\Coding\Java\UiAutomator2022 -n UiAutomator

7. Install ant
    Download the latest zip file from http://ant.apache.org/bindownload.cgi
    Unzip it
    Put this directory\bin in path (C:\Users\KK\Documents\Coding\apache-ant-1.9.3\bin)

    Open Cmd and type ant. If output is good, installation is sucessful.
8. 用ant Build项目
cd C:\Users\KK\Documents\MyFiles\Coding\Java\UiAutomator2022
ant build

生成的UiAutomator.jar在项目root文件中的bin文件夹
ant需要JDK的系统参数,所以要加入到系统变量中。
JAVA_HOME: C:\Program Files\Java\jdk1.8.0_111

9. build成功后,把刚生成的jar Deploy到手机
cd C:\Users\KK\Documents\MyFiles\Coding\Java\UiAutomator2022

adb push C:\Users\KK\Documents\MyFiles\Coding\Java\UiAutomator2022\bin\UiAutomator.jar /data/local/tmp/
adb shell uiautomator runtest UiAutomator.jar -c com.jctech.uiautomator.HelloWorld >> file.txt

这个例子是跳到Home页面,然后打开carmax这个app,所以要确保carmax在home页面里。最后的结果输出到cmd控制台或者file.txt

蓝色三个步骤是在cmd进行,如果java文件数量不变,生成build.xml这步可以忽略

10. 如果更改代码, 需要重复8 - 9步的三个命令。

adb对某设备: adb -s <serialNumber> <command>
adb devices

可以在path加入$android-sdk\platform-tools这样可以在任意路径 运行adb

其他可以和UIAutomator结合用的emulator包括BlueStacks, BlueStack不支持proxy
调用adb connect localhost即可连上emulator
http://diveshblog.weebly.com/blog/working-with-uiautomator
如果公司网络用的是proxy可能需要安装ProxyCap来连接internet
http://www.inforaid.com/change-bluestacks-proxy-settings-use-proxy-server/

References:
[0] https://www.softwaretestinghelp.com/uiautomator-tutorial/
[1] http://blog.csdn.net/u010961631/article/details/9616581
[2] http://developer.android.com/tools/testing/testing_ui.html
[3] http://blog.chengyunfeng.com/?p=504














No comments:

Post a Comment