使用Uiautomator做基于UI界面的测试

发表于:2016-11-15 11:07

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:杨彦星    来源:51Testing软件测试网采编

  这两天在看原生的 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));
}
}
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号