这两天在看原生的 uiautomator 的测试,之前也有使用,但是只是把Android官方的例子简单的实现一样,并没有什么实际的测试意思, Android官方的uiautomator例子的实现 ,今天结合最近正在做的自动化项目,简单的使用uiautomator来实现了一下,只是做了一个小例子,但是基本上都如何编译jar与运行调通了,这里也简单的记录一下。
之前也有使用别人封装好的python做过,那个写起来也比较简单, 使用uiautomator的python封装进行android的UI测试
新建一个java工程
新建工程的时候要注意编码要是 utf-8 的,不然后面使用ant编译jar文件的时候会有问题.
引入JUnit与android.jar和uiautomator.jar,我使用的是api-16的jar,这个16要记住,后面生成build.xml有用
创建测试类
新建的类要继承UiAutomatorTestCase类我这个操作要用到am命令来启动手机急救箱和关闭急救箱,所以我创建一个util类来封了两个方法
package com.yangyanxing.test; import java.io.BufferedReader; import java.io.InputStreamReader; import com.android.uiautomator.core.UiObject; import com.android.uiautomator.core.UiSelector; public class TestUtil { public static String doCmdshell(String commond){ String s = null; try { Process p = Runtime.getRuntime().exec(commond); BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); String result = ""; while ((s = stdInput.readLine()) != null) { result = result + s + "\n"; } while ((s = stdError.readLine()) != null) { System.out.println(s); } return result; } catch (Exception e) { return "Exception occurred"; } } //这个方法是在timeout的时间内等待ui元素的出现,出现了返回真,异常了或者超时了返回假 public static Boolean waitForUiselectorAppears(UiSelector selector,int timeout) { UiObject uiObject = new UiObject(selector); return uiObject.waitForExists(timeout*1000); } } |
写具体的测试方法
package com.yangyanxing.test; import com.android.uiautomator.core.UiDevice; import com.android.uiautomator.core.UiObject; import com.android.uiautomator.core.UiObjectNotFoundException; import com.android.uiautomator.core.UiSelector; import com.android.uiautomator.testrunner.UiAutomatorTestCase; public class UitestRunner extends UiAutomatorTestCase { //初始化一个UiDevice private UiDevice mDevice = UiDevice.getInstance(); public UitestRunner(){ super(); } //写setUp()方法 public void setUp() throws Exception{ super.setUp(); //每次测试的时候都需要启动急救箱,所以将这个方法放到setUp里 TestUtil.doCmdshell("am start com.qihoo.mkiller/com.qihoo.mkiller.ui.index.AppEnterActivity"); } //写tearDown方法,将急救箱force-stop public void tearDown() throws Exception{ super.tearDown(); TestUtil.doCmdshell("am force-stop com.qihoo.mkiller"); } //检测急救箱启动后是否有"开始扫描"按钮 public void test_startScanButton() throws UiObjectNotFoundException{ UiSelector scanButton = new UiSelector().className("android.widget.Button").text("开始扫描"); if(TestUtil.waitForUiselectorAppears(scanButton, 20)){ UiObject scanoObject = new UiObject(scanButton); if (scanoObject.click()) { System.out.println("开始扫描 按钮被点击了!"); }else{ System.out.println("开始扫描 按钮点击失败了"); } }else { System.out.println("急救箱启动失败"); } UiSelector exitbutton = new UiSelector().className("android.widget.Button").text("退出"); assertEquals(Boolean.TRUE, TestUtil.waitForUiselectorAppears(exitbutton, 120)); } } |