Android自动化测试UIautomator-UiWatcher
重置监听与检查监听运行
// 重置已经触发过的监听 // UiDevice.getInstance().resetWatcherTriggers(); // 检查监听器是否被运行过 boolean phone = UiDevice.getInstance().hasWatcherTriggered( "answerThePhone"); boolean mms = UiDevice.getInstance().hasWatcherTriggered("mms"); boolean alarm = UiDevice.getInstance().hasWatcherTriggered("alarm"); if (phone == true) { System.out.println("电话监听器运行过了");} if (mms == true) { System.out.println("短信听器运行过了");} if (alarm == true) { System.out.println("闹钟监听器运行过了");}
UiDevice.getInstance().registerWatcher("answerThePhone", new UiWatcher() { UiObject jietingObject = new UiObject(new UiSelector() .text("下拉接听")); @Override public boolean checkForCondition() { // TODO Auto-generated method stub System.out.println("监听器检查函数开始运行-挂电话"); if (jietingObject.exists()) { System.out.println("监听器条件判断成功--挂电话"); int y = UiDevice.getInstance().getDisplayHeight(); int x = UiDevice.getInstance().getDisplayWidth(); UiDevice.getInstance().swipe(x / 2, y / 2, x / 2, 10, 10); return true;} System.out.println("监听器条件判断失败--挂电话"); return false;}});
监听器代码示例
代码例子java文件
测试代码示例
取消监听与运行所有监听
this.watcherAlarmClock();// 闹钟监听 this.watcherAnswerThePhone();// 电话监听 this.watcherMms();// 短信监听 // 取消部分监听器 UiDevice.getInstance().removeWatcher("mms"); UiDevice.getInstance().removeWatcher("alarm"); // 运行所有的监听 // UiDevice.getInstance().runWatchers();
一、CHECKFORCONDITION 中断监听检查条 件 public boolean checkForCondition();
在测试框架无法找到一个匹配时,使用uiselector测试框架将自动 调用此处理程序方法。在超时未找到匹配项时,框架调用 checkforCondition()方法查找设备上的所有已注册的监听检查条件。 您可以使用此方法来处理中断问题保证测试用例正常运行。
重置已触发过的UiWatcher,重置后相当于没运行过
void runWatchers() 强制运行所有的监听器
监听器要在中断代码之前运行
boolean hasAnyWatcherTriggered() 三、检查监听器 检查是否有监听器触发过 boolean hasWatcherTriggered(String watcherName) 检查某个特定的监听器是否触发过
例如,如果出现一个对话框,您可以检查是否是运营商发来的服 务信息而不是出现测试异常。
一、CHECKFORCONDITION 件
触发监听检查条
UiSelector条件无法匹配对象
调用所有已经运行的监听器
Uidevice操作不会出现脚本错误,不会触发监听器
二、atcher(String name, UiWatcher watcher) 注册一个监听器,当UiSelector无法匹配到对象的时候,触发监听器 void removeWatcher(String name) 取消之前注册的指定监听器 void resetWatcherTriggers()
复习
UiDevice 操作设备 Uiobject 操作对象
UiSelector 选择条件
UiCollection 对象集合
UiWatcher 监听器
UiScrollable 滚动对象
复习
通过一个例子使用UIAUTOMATOR所有的类来实现
打开文件管家—进入内置存储卡—滚动到Pictures文件夹—点击进入—HOME键 launchApp("com.lenovo.FileBrowser", "com.lenovo.FileBrowser.activities.FileBrowserMain"); //声明内置存储卡文本对象 UiObject build_in=new UiObject(new UiSelector().text("内置存储卡")); build_in.click();//点击内置存储卡 UiScrollable list=new UiScrollable(new UiSelector().scrollable(true));//根据滚动属性条件声明列表对象 //使用正则匹配条件声明文件夹名称对象 UiObject pictures=new UiObject(new UiSelector().textMatches("Pictures\\s\\(\\d+\\)")); list.scrollIntoView(pictures);//滚动到对象 pictures.clickAndWaitForNewWindow();//点击对象等待新窗口 UiDevice.getInstance().pressHome();//按Home键回到桌面
uiautomator2 watcher用法
uiautomator2 watcher用法摘要:1.UIAutomator2 简介2.Watcher 的作用3.UIAutomator2 Watcher 的使用方法4.使用示例正文:1.UIAutomator2 简介UIAutomator2 是Android 平台下的一个自动化测试工具,它可以帮助开发者编写自动化测试脚本,以实现对Android 应用的自动化测试。
相较于UIAutomator1,UIAutomator2 在功能和性能上都有很大的提升。
2.Watcher 的作用在UIAutomator2 中,Watcher 是一个非常重要的概念。
它可以用来监视某个元素的状态,当元素的状态发生变化时,可以触发相应的操作。
这对于编写自动化测试脚本来说是非常有用的,因为它可以确保在特定的条件下执行测试操作。
3.UIAutomator2 Watcher 的使用方法要使用UIAutomator2 Watcher,首先需要导入相关的库,然后在测试脚本中创建一个Watcher 实例。
接下来,可以通过调用Watcher 的方法来监视元素的状态。
以下是一个简单的使用示例:```javaimport androidx.test.ui.espresso.Espresso;import androidx.test.ui.espresso.ViewInteraction;public class MyTest extends InstrumentationTestCase {@Overrideprotected void setUp() throws Exception {super.setUp();Espresso.init(this);}public void testWatcherExample() {// 创建一个Watcher 实例Watcher watcher = new Watcher();// 指定要监视的元素,这里我们监视一个TextViewViewInteraction textView =Espresso.onView(withId(R.id.my_text_view));// 监视元素的text 属性watcher.watch(textView, "text");// 当text 属性发生变化时,执行相应的操作watcher.doOnTextChanged(new Watcher.TextChangeListener() {@Overridepublic void onTextChanged(CharSequence oldText, CharSequence newText) {// 在这里执行相应的操作,例如打印新的文本内容Log.d("WatcherExample", "Text changed from " + oldText + " to " + newText);}});// 执行其他测试操作//...// 结束测试Espresso.close();}}```4.使用示例在上述示例中,我们创建了一个Watcher 实例,并指定要监视的元素为一个TextView。
Android移动端自动化测试框架UIAutomator2入门
Android移动端自动化测试框架UIAutomator2入门随着智能手机的普及,移动应用也越来越受到欢迎。
移动端应用相对于传统的Web应用或桌面应用,有自身独特的测试需求。
在这种情况下,自动化测试框架成为了移动端测试的必备工具。
本文将介绍Android移动端自动化测试框架UIAutomator2的基础知识和使用方法。
一、UIAutomator2介绍UIAutomator2是Android平台上的一个自动化测试框架,它的作用是为测试人员提供一种自动化测试手段,以验证移动应用的正确性、稳定性和性能。
UIAutomator2可以模拟用户在移动应用上的各种操作,包括点击、滑动、输入等等,以实现对应用的全面自动化测试。
二、UIAutomator2的环境搭建要使用UIAutomator2,我们首先需要构建相应的测试环境。
具体步骤如下:1. 安装Android SDK,并配置环境变量。
2. 下载UIAutomator2的源代码。
3. 根据源代码中的README文档,进行所需的编译和安装。
三、UIAutomator2的使用1. 创建测试脚本使用UIAutomator2进行自动化测试需要编写相应的测试脚本。
测试脚本是由Java编写的,并可以使用Android Studio进行编辑和调试。
下面是一个简单的测试脚本:```import androidx.test.uiautomator.By;import androidx.test.uiautomator.UiDevice;public class MyTest {public static void main(String[] args) throws Exception {UiDevice device = UiDevice.getInstance();device.pressHome();device.findObject(By.text("Chrome")).click();device.findObject(By.res("com.android.chrome:id/search_box_text")).c lick();device.findObject(By.res("com.android.chrome:id/search_box_text")).s etText("UIAutomator2");device.pressEnter();}}```这个脚本的功能是启动Chrome浏览器,并在浏览器中搜索“UIAutomator2”。
Android自动化测试之Uiautomator_UiDevice-API详解
Android自动化测试之Uiautomator-UiDevice-API详解*****************[在此处键入]目录UiDevice-API (2)1.click (2)2.freezeRotation (2)3.getCurrentPackageName (3)4.getDisplayHetght与getDisplayWidth . 35.getDisplayRotation (3)6.getDisplaySizeDp (4)7.getProductName (5)8.监听器 (5)9.按键事件 (8)10.旋转 (9)11.锁屏与唤醒 (10)12.等待对象 (11)13.截图 (12)14.拖拽与滑动 (12)15.通知栏.快速设置 (13)16.窗口布局结构 (13)UiDevice-APIuidevice提供关于设备的状态信息。
你也可以使用这个类来模拟装置上的用户的行为,如按方向键或按菜单按钮。
1.click.例子:点击坐标点(300,300)UiDevice.getInstance().click(300,300);或getUiDevice().click(300,300);推荐使用上面的UiDevice.getInstance()进行书写,如果使用下面的书写,在同一个类中没问题,如果要在其他类中的方法使用了getUiDevice,调用到本类中不会有语法错误,但是执行的时候会出错。
以下也是如此,不再写getUiDevice。
2.freezeRotation例子:当前手机状态为竖屏,锁定当前手机为竖屏,不让手机跟随着手机物理旋转而旋转。
UiDevice.getInstance().freezeRotation();3.getCurrentPackageName例子:当前在QQ界面,我想要知道QQ的包名4.getDisplayHetght与getDisplayWidth例子:获得当前手机的屏幕宽度与高度,即获得当前手机的屏幕分辨率5.getDisplayRotation返回整数0代表当前物理旋转0度1代表当前物理旋转90度2代表当前物理寻转180度3代表当前物理旋转270度例子:获取当前界面的旋转状态:switch(UiDevice.getInstance().getDisplayRotation()){case 0:System.out.println("当前旋转状态0度");break;case 1:System.out.println("当前旋转状态90度");break;case 2:System.out.println("当前旋转状态180度");break;case 3:System.out.println("当前旋转状态270度");break;default:break;}6.getDisplaySizeDpDP知识:在android系统中单位DP也就是DIP:device independent pixels(设备独立像素).dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
Android测试工程师的自动化测试框架选择
Android测试工程师的自动化测试框架选择自动化测试框架是Android测试工程师日常工作中必不可少的工具之一,选择适合的自动化测试框架对于提高测试效率和质量具有重要意义。
本文将介绍几种常见的Android自动化测试框架,并讨论它们的优缺点,以便Android测试工程师在选择时能够根据实际需求作出明智的决策。
1. AppiumAppium是一款开源的跨平台自动化测试框架,支持Android和iOS平台的自动化测试。
Appium使用WebDriver协议来驱动手机应用程序,可以通过编写脚本实现各种操作,如点击、输入、滑动等。
优点是支持多种编程语言,如Java、Python、Ruby等;缺点是配置相对复杂,需要连接真机或模拟器来运行测试。
2. EspressoEspresso是Google推出的用于Android应用程序的自动化测试框架,主要用于功能测试和界面测试。
Espresso使用简单,提供了丰富的API来进行UI操作和断言验证,适合在开发阶段快速迭代的场景下使用。
缺点是它只支持Android平台,对于跨平台需求不够灵活。
3. UI AutomatorUI Automator是Google提供的用于Android系统级UI测试的框架,可以对应用程序以及系统应用进行自动化测试。
UI Automator可以实现跨应用的测试,使用起来相对简单,并且提供了强大的UI交互能力。
缺点是编写测试脚本相对繁琐,不够灵活,对于应用程序内部的UI测试不够方便。
4. Robot FrameworkRobot Framework是一款通用的自动化测试框架,支持多种应用程序、平台和编程语言。
它使用关键字驱动的方式编写测试用例,易于学习和使用,并且提供了大量的扩展库来完成各种测试任务。
优点是灵活性高,可扩展性好;缺点是相对于其他框架,学习成本较高。
5. CalabashCalabash是一款适用于Android和iOS应用的自动化测试框架,基于Cucumber和Ruby开发。
Android自动化测试工具的选择与比较
Android自动化测试工具的选择与比较Android应用程序的自动化测试在软件开发过程中扮演着重要的角色。
为了保证应用程序的质量和稳定性,开发人员需要选择一个适合他们需求的自动化测试工具。
在本文中,我们将比较几种常见的Android自动化测试工具,并为您提供有关如何选择适合您的项目的建议。
一、UI AutomatorUI Automator是由Google开发的一个基于黑盒测试的自动化测试框架。
它允许开发人员跨应用程序的用户界面元素进行测试。
UI Automator支持Android 4.1及以上的设备,并提供了丰富的API来与设备进行交互。
它的优点是可以通过模拟用户的真实操作来测试应用程序的性能和用户体验。
然而,UI Automator的学习曲线较陡峭,对于新手来说可能需要一些时间来熟悉其使用方法。
二、EspressoEspresso是一个由Google开发的轻量级自动化测试框架,旨在简化Android应用程序的UI测试。
Espresso的主要特点是易于使用和快速执行测试。
它提供了简洁的API用于编写可读性强的测试代码,并且能够处理异步操作和UI事件。
Espresso还集成了多种延时和等待机制,以便于开发人员进行稳定的测试。
然而,Espresso的适用范围相对较窄,主要针对应用程序的单个Activity进行测试。
三、AppiumAppium是一个开源的跨平台自动化测试框架,支持Android和iOS平台。
它使用WebDriver协议来驱动真实的设备和模拟器,可以以多种编程语言编写测试脚本。
Appium的优点是支持网页应用测试和混合应用测试,可以覆盖更广泛的测试场景。
然而,Appium的配置和设置相对复杂,对于初学者来说可能需要一些技术知识和经验。
四、Robot FrameworkRobot Framework是一个通用的自动化测试框架,支持多种应用程序和系统的测试。
它具有可扩展性、易用性和灵活性的特点。
Android自动化框架uiautomator简介
Android⾃动化框架uiautomator简介UI⾃动化测试框架,安卓移动端APP.要求:Android 4.3以上1.提供⼀系列API:执⾏UI测试在系统或者第三⽅APP上⾯;2.允许在被测设备上执⾏操作,⽐如打开系统设置菜单。
3.适合编写⿊盒⾃动化测试UIautomator框架主要特点:1.元素定位:UIautomator viewer。
扫描、分析待测应⽤的UI组件的图像⼯具;2.元素操作:Accessing devicestate.在⽬标设备和app上的各种操作3.元素识别:UI Automator APIs,在多个应⽤程序中捕获和操作UI组件。
1.uiautomatorvieweruiautomatorviewer位于sdk/tools⽬录下,可以扫描、分析待测试应⽤界⾯,分析结果可以导出为xml与截图。
通过该⼯具可以分析出UI控件的id,text,focusable等等各种属性,甚⾄布局上的层次关系。
windows下运⾏tools下的uiautomatorviewer.batliunx下运⾏./uiautomatorviewer 启动该⼯具。
上图uiautomatorviewer的运⾏截图,左上⾓两个⼿机模样的图标点击后就会开始截图并分析UI组件,分析后的结果如下⽅所⽰,左侧为⼿机当前画⾯截图,右侧上部为view控件的层次关系,下部为当前选中控件的各种信息。
2.uiautomator APIsuiautomator是⼀个包含⼀套UI测试API,和⽀持运⾏测试程序的JAR包。
该JAR包位于sdk/platforms/android-* /uiautomator.jar. 使⽤时需要注意⾃⼰的SDK版本需要⼤于16, SDK Tools版本需要⼤于21.Android版本需要⾼于4.3。
UIautomator有⽐较多的类。
这⾥只介绍我们在APP⾃动化测试中常⽤的三种。
其中UiSelector类是在appium定位元素时会⽤到的类。
Android自动化测试(UiAutomator)简要介绍
Android自动化测试(UiAutomator)简要介绍一、一个BUG引发的问题如果研发过程中有一个BUG:“不断的切换手机语言出现花屏现象”。
这个问题我们如何验证呢?我想,最好的方式应该是自动化测试。
那么,自动化测试可以完成哪些任务呢?简单的说,那些重复性的测试工作,都可以交给自动化完成:1、设置手机的语言2、添加、删除、收藏联系人3、拨号、挂断4、甚至发送短信、收藏短信如果需要上面的功能,那么就开始自动化之旅吧。
二、Android自动化测试简单介绍Android自动化测试主要分为Monkeyrunner、Rubotium、UiAutomator、Monkey(在我看来这个不算)等。
主要特点:1、Monkeyrunner:优点:操作最为简单,可以录制测试脚本,可视化操作;缺点:主要生成坐标的自动化操作,移植性不强,功能最为局限;2、Rubotium:主要针对某一个APK进行自动化测试,APK可以有源码,也可以没有源码,功能强大;缺点是针对APK操作,而且需要对APK重新签名(有工具),因此操作相对复杂;3、UiAutomator:优点:可以对所有操作进行自动化,操作简单;缺点:Android版本需要高于4.0,无法根据控件ID操作,相对来说功能较为局限,但也够用了;4、Monkey:准确来说,这不算是自动化测试,因为其只能产生随机的事件,无法按照既定的步骤操作;由上面介绍可以有这样的结论:测试某个APK,可以选择Rubotium;测试过程可能涉及多个APK,选择UiAutomator;一些简单的测试,选择Monkeyrunner;本文主要介绍UiAutomator的使用方法。
三、环境搭建3.1、必备条件:1、JDK2、SDK(API高于15)3、Eclipse(安装ADT插件)4、ANT(用于编译生成jar)3.2、简要步骤:1、安装JDK并添加环境变量。
安装后,一定要通过JAVA_HOME的方式添加环境变量,即先建立JAVA_HOME 变量,然后在path中添加%JAVA_HOME%\bin;2、添加SDK环境变量。
Android自动化-UiAutomator
好从国内镜象去下载
SDK Manager.exe
SDK Manager配置国内镜象
SDK Manager.exe菜单: Tools->Options
Eclipse中初始化Java工程
1. 创建Java工程 2. 将 A n d r o i d S D K 目 录 中 的
System.out.println("test"); } }
测试代码片断-测试主方法
编译并执行测试用例
set ANDROID_HOME=D:\android_sdk set JAVA_HOME=F:\tools\jdk1.7.0_67 set ANT_HOME=F:\tools\apache-ant-1.8.0 set path=%path%;%JAVA_HOME%\bin;%ANT_HOME%\bin;%ANDROID_HOME%\tools;%ANDROID_HOME%\platformtools call android create uitest-project -n uitest -t "android-18" -p D:\workspace\uitest call ant -f D:\workspace\uitest\build.xml build adb push D:\workspace\uitest\bin\uitest.jar /data/local/tmp adb shell uiautomator runtest uitest.jar -c cn.muchinfo.mtp.UITest2
• 这些环境都可以用其它人己经下载好了的,直接copy过来就可以用了,没必要 自己重新去下载
Android自动化测试UIautomator-UiObject
booleanwaitForExists(long timeout) 判断 对象 是否 存在 booleanwaitUntilGone(long timeout) booleanexists()
等待对象出现 等待对象消失 检查对象是否存在
//打开计算器 Runtime.getRuntime().exec(“am start –n com.android.calculator2/com.android.calculator2.Calculator"); //计算器界面“+”对象 UiObject addObject=new UiObject(new UiSelector().text("+")); //实时检查等待对象出现 addObject.waitForExists(10000);
获得对象矩形坐标,矩形左上角坐标与右下角坐标
获得对象的子类对象,可以递归获取子孙当中某个对象
获得下一级子类数量 获得对象类名属性的类名文本 获得对象的描述属性的描述文本 从父类获取子类,按照uiseletor获取兄弟类
获得对象包名属性的包名文本 获得selector用于调试 获得对象的文本属性中的文本 返回可见视图的范围,如果视图的部分是可见的, 只有可见部分报告的范围
1
UiObject主要对对象进行操作
(uiobject)获取对象
按照一定的条件(uiseletor)获取对象
操作对象
文本输入与清除
点击/长按 Click/longclick
拖动/滑动 Drag/swipe
手势操作
获取子类 getChild getChildCount
属性
对象 操作
获取属性:getXXXX 属性判断:isxxxxx 对象是否存在 exist
python uiautomator2 watcher 原理
python uiautomator2 watcher 原理UIAutomator2是一个Python库,可以用于自动化Android设备上的UI测试,Watcher是UIAutomator2中重要的一个模块,它的作用是监控设备UI的变化,并根据一定的规则进行相应的操作。
Watcher的原理可以分为以下几个步骤:1.通过UIAutomator2提供的UISelector,来匹配需要监控的UI元素。
2.使用Accessibility事件监控功能,来监听设备上的UI变化。
3.根据匹配到的UI元素和规则,来执行相应的操作。
例如,我们可以使用Watcher来检测设备上的网络状态,如果网络状态发生变化,就自动切换到不同的网络环境。
具体实现方式可以参考以下代码示例:pythonfrom uiautomator2 import Device, UiSelector# 连接Android设备d = Device()# 定义一个Watcherdef network_watcher(d):# 获取网络状态network_status = .get('network')# 如果网络状态为Wifi,切换至4G网络if network_status['type'] == 'WIFI':d.set_network_connection(0x06)# 如果网络状态为4G,切换至Wifi网络elif network_status['type'] == 'MOBILE':d.set_network_connection(0x01)# 注册Watcher,并设置匹配规则d.watcher("network_watcher").when(UiSelector().resourceId("android:id/alertTitle").text("网络状态提示"), UiSelector().text("刷新").clickable(True)).when(UiSelector().resourceId("android:id/alertTitle").text("网络状态提示"), UiSelector().text("确定").clickable(True)).call(network_watcher)# 启动Watcherd.watchers.run()上述代码中,我们创建了network_watcher这个Watcher,并在Watcher中使用set_network_connection()方法来切换网络状态。
