UiAutomator 使用简介
来源:互联网 发布:怎么在淘宝投诉卖家 编辑:程序博客网 时间:2024/04/30 10:24
UiAutomator 使用简介
首先新建一个Android Studio工程,在build.gradle中添加以下依赖:
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
先看一下测试流程:
输入邮箱>输入密码>点击登录按钮>等待界面加载>从列表中选择一个元素并点击>返回Home界面
演示效果如图:
接下来开始写测试代码,在androidTest目录下新建测试类,测试类需要继承UiAutomatorTestCase,为了使测试代码看起来更简洁,将一些常用的方法封装在一个抽象类中:
public abstract class UiAutomatorHelper extends UiAutomatorTestCase { public UiDevice mUiDevice; @Override protected void setUp() throws Exception { super.setUp(); mUiDevice = getUiDevice(); } public abstract void testMethod(); /** * 从UiCollection中随机选择一个子元素并点击 * * @param idCollection UiCollection id * @param idChild Child id * @return */ public boolean randomClickCollectionChild(String idCollection, String idChild) { boolean clickSucceed = false; UiCollection collection = getCollection(idCollection); UiSelector selectorChild = getSelector(idChild); int childCount = collection.getChildCount(selectorChild); if (childCount == 0) return false; int randChild = new Random().nextInt(childCount); log("randChild=" + randChild); try { UiObject obj = collection.getChildByInstance(selectorChild, randChild); clickSucceed = clickObj(obj); } catch (UiObjectNotFoundException e) { e.printStackTrace(); } return clickSucceed; } /** * 从UiCollection中随机选择指定子元素并点击 * * @param idCollection UiCollection id * @param idChild Child id * @param index child index * @return */ public boolean clickCollectionChild(String idCollection,String idChild,int index){ boolean clickSucceed = false; UiCollection collection = getCollection(idCollection); UiSelector selector = getSelector(idChild); try { UiObject objChild = collection.getChildByInstance(selector, index); clickSucceed = clickObj(objChild); } catch (UiObjectNotFoundException e) { e.printStackTrace(); } return clickSucceed; } public UiCollection getCollection(String id) { UiSelector selector = getSelector(id); return new UiCollection(selector); } public UiSelector getSelector(String id) { return new UiSelector().resourceId(id); } public UiObject getObjById(String id) { return new UiObject(getSelector(id)); } /** * 点击元素 * @param id */ public boolean clickObj(String id) { log("click id=" + id); UiObject obj = getObjById(id); return clickObj(obj); } public boolean clickObj(UiObject obj) { if (!obj.exists()) return false; boolean clickSucceed = false; try { clickSucceed = obj.click(); } catch (UiObjectNotFoundException e) { e.printStackTrace(); } try { if (!clickSucceed) { Rect rect = obj.getBounds(); int clickX = (rect.left + rect.right) / 2; int clickY = (rect.top + rect.bottom) / 2; log("click:" + clickX + "," + clickY); clickSucceed = mUiDevice.click(clickX, clickY); } } catch (UiObjectNotFoundException e) { e.printStackTrace(); } return clickSucceed; } public void waitForUi(String id,long timeOut){ UiObject obj = getObjById(id); obj.waitForExists(timeOut); } public boolean inputText(String id,String text){ boolean succeed = false; UiObject obj = getObjById(id); try { succeed = obj.setText(text); } catch (UiObjectNotFoundException e) { e.printStackTrace(); } return succeed; } public void log(String textContent) { System.out.println(textContent); Log.i("UiAutomator", "log: " + textContent); } /** * 页面向下滑动一段距离 */ public void swipeDown() { mUiDevice.swipe(312, 600, 407, 325, 10); } /** * 向上滑动一段距离 */ public void swipeUp() { mUiDevice.swipe(312, 325, 407, 600, 10); } /** * 向右滑动一段距离 */ public void swipeRight() { mUiDevice.swipe(400, 500, 200, 500, 10); } /** * 向左滑动一段距离 */ public void swipLeft() { mUiDevice.swipe(200, 500, 400, 500, 10); }}
写测试逻辑代码的类继承上面的抽象类,找出需要的UI组件的资源id(可以用Android SDK\tools\uiautomatorviewer.bat查看)
注意测试方法命名必须以test开头
public class UiAutomatorTest extends UiAutomatorHelper { @Override public void testMethod() { //install UiAutomatorTestApp and open before testing //simulate login login(); //wait for login waitForUi("com.github.uiautomatortestapp:id/rv_book_list", 10000); //click item 2 clickCollectionChild("com.github.uiautomatortestapp:id/rv_book_list", "com.github.uiautomatortestapp:id/card_book", 2); SystemClock.sleep(3000); //return home screen mUiDevice.pressHome(); } public void testPressHome(){ mUiDevice.pressHome(); } public void login() { //find email edit text String editEmailId = "com.github.uiautomatortestapp:id/email"; UiObject objEmail = getObjById(editEmailId); //get focus clickObj(objEmail); //input email inputText(editEmailId, "test@gmail.com"); String editPasswdId = "com.github.uiautomatortestapp:id/password"; UiObject objPasswd = getObjById(editPasswdId); clickObj(objPasswd); inputText(editPasswdId, "123456"); //click login button clickObj("com.github.uiautomatortestapp:id/email_sign_in_button"); }}
运行前先安装测试app并打开登录界面
测试app源码:https://github.com/bobcatkay/UiAutomatorTestApp
另外,一个类中可以同时有多个测试方法,只需要在运行的时候选择一下方法即可:
源码:https://github.com/bobcatkay/UiAutomatorDemo
阅读全文
0 0
- UiAutomator 使用简介
- uiautomator简介
- uiautomator使用
- Uiautomator使用
- UiAutomator使用
- uiautomator使用
- Uiautomator API简介-摘要
- uiautomator介绍和使用
- Android uiautomator实例使用
- uiautomator使用经验
- uiautomator介绍和使用
- uiautomator介绍和使用
- Android Uiautomator工具使用
- UiAutomator使用步骤
- UiAutomator的使用过程
- Android uiautomator实例使用
- Python-UiAutomator使用介绍
- Android测试一:Uiautomator——简介
- Kotlin
- java实现遍历树形菜单方法——Dao层
- poj2524(并查集)
- 通讯录第三版
- 使用maven 自动为 js/css加版本号
- UiAutomator 使用简介
- 读java编程那些事——计算机基础
- 总结/继承,多态
- TextView详解
- 随机从1~100中选出10个数并进行冒泡排序
- 关于mysql中字符编码
- java中遍历map的几种方式
- 原生JS如何运动ajax封装函数
- 后台返回数据快速赋值到页面封装js