Android测试三:Uiautomator封装

Uiautomator封装的具体类:

import android.os.Environment;
import android.support.test.uiautomator.UiAutomatorTestCase;
import android.support.test.uiautomator.UiDevice;
import android.support.test.uiautomator.UiObject;
import android.support.test.uiautomator.UiObjectNotFoundException;
import android.support.test.uiautomator.UiSelector;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Calendar;

public class UiautomatorAssistant extends UiAutomatorTestCase {

	private UiDevice uiDevice;
	private String m_logpathString = Environment.getExternalStorageDirectory().getPath()+"/PerformanceLog.txt";
	private final int    CLICK_ID        = 2000;
	private final int    CLICK_TEXT      = 2001;

	public UiautomatorAssistant(UiDevice uiDevice) {
		this.uiDevice = uiDevice;
	}

	// 通过id来进行点击操作
	public boolean ClickById(String id) {
		return ClickByInfo(CLICK_ID, id);
	}

	// 通过text来进行点击操作
	public boolean ClickByText(String text) {
		return ClickByInfo(CLICK_TEXT, text);
	}

	public void setText(String id,String text){
		UiObject uiObject = uiDevice.findObject(new UiSelector().resourceId(id));
		try {
			uiObject.clearTextField();
			uiObject.setText(text);
		} catch (UiObjectNotFoundException e) {
			e.printStackTrace();
		}

	}

	private boolean ClickByInfo(int CLICK, String str) {
		UiSelector uiselector = null;
		// switch根据不同的CLICK标识,创建出UiSelector的对象
		switch (CLICK) {
			case CLICK_ID:
				uiselector = new UiSelector().resourceId(str);
				break;
			case CLICK_TEXT:
				uiselector = new UiSelector().text(str);
				break;
			default:
				return false;

		}
		// 根据UiSelector对象构造出UiObject的对象
		UiObject uiobject = new UiObject(uiselector);
		// 判断该控件是否存在
		int i = 0;
		while (!uiobject.exists() && i < 5) {
			SolveProblems();
			sleep(500);
			if (i == 4) {
				TakeScreen(str + "-not-find");
				return false;
			}
			i++;
		}
		// 点击
		try {
			UiAutomationLog("click type:" + CLICK + " content:" + str);
			uiobject.click();
		} catch (UiObjectNotFoundException e) {
			e.printStackTrace();
		}
		return true;
	}

	/* 当进不下去的时候,使用该方法,例如可能是出现了一些对话框遮挡,该方法会把对话框干掉 */
	private void SolveProblems() {

	}

	/* 保存屏幕截图参数descrip 为 描述该截图的内容 */
	private void TakeScreen(String descrip) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTimeInMillis(System.currentTimeMillis());
		String datestr = calendar.get(Calendar.HOUR_OF_DAY) + "_" + calendar.get(Calendar.MINUTE) + "_" + calendar.get(Calendar.SECOND);
		File files = new File(Environment.getExternalStorageDirectory().getPath()+"/" + datestr + "_" + descrip + ".jpg");
		UiAutomationLog("TakeScreen: " + datestr + "_" + descrip + ".jpg");
		uiDevice.takeScreenshot(files);
	}

	/* 打log记录在手机中 */
	private void UiAutomationLog(String str) {
		// 取得当前时间
		Calendar calendar = Calendar.getInstance();
		calendar.setTimeInMillis(System.currentTimeMillis());
		String datestr = calendar.get(Calendar.HOUR_OF_DAY) + ":" + calendar.get(Calendar.MINUTE) + ":" + calendar.get(Calendar.SECOND) +
						 calendar.get(Calendar.MILLISECOND) + ":";
		FileWriter fwlog = null;
		try {
			fwlog = new FileWriter(m_logpathString, true);
			fwlog.write(datestr + str + "\r\n");
			System.out.println(datestr + str);
			fwlog.flush();

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (fwlog != null) {
					fwlog.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

具体使用方法:

import java.io.IOException;

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 Test_wechat extends UiAutomatorTestCase{
    
    UiautomatorAssistant uiautomatorAssistant ;
    
    public void testDemo() throws IOException, UiObjectNotFoundException {
        
        uiautomatorAssistant = new UiautomatorAssistant(getUiDevice());
        
        // 启动App
        Runtime.getRuntime().exec("am start com.tencent.mm/com.tencent.mm.ui.LauncherUI");
        sleep(3000);
        
        /*----------------------- 验证第一种小视频的打开方式------------------------------------*/
        uiautomatorAssistant.ClickByText("通讯录");
        // 点击一个好友
        uiautomatorAssistant.ClickById("com.tencent.mm:id/gx");
        // 点击发消息
        uiautomatorAssistant.ClickByText("发消息");
        // 点击发送栏的“+”
        uiautomatorAssistant.ClickById("com.tencent.mm:id/wm");
        // 点击小视频
        uiautomatorAssistant.ClickByText("小视频");
        // 验证第一种小视频打开方式
        UiObject obj_anzhupaiObject = new UiObject(new UiSelector().text("按住拍"));
        if (obj_anzhupaiObject.exists()){
            uiautomatorAssistant.UiAutomationLog( "第一次进入小视频的方法测试通过");
        }else {
            uiautomatorAssistant.TakeScreen("第一次进入小视频的方法测试不通过");
        }
    }  
}



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值