Android测试工具 UIAutomator入门与介绍
UI Automator 测试工具定义以及用途
UI Automator 测试框架提供了一组 API,用于构建在用户应用和系统应用上执行交互的界面测试。通过 UI Automator API,您可以执行在测试设备中打开“设置”菜单或应用启动器等操作。UI Automator 测试框架非常适合编写黑盒式自动化测试,此类测试的测试代码不依赖于目标应用的内部实现细节。
优点:可以对所有的操作来进行自动化,操作简单(eg:点击事件 ,侧滑事件,上拉事件,以及模拟键盘输入测试用例)。可以测试所有设备的程序。
缺点:必须要Android4.0以上才能使用。
UI Automator 的执行呢,需要我们编写完毕打成jar包,直接上传到/data/local/tmp/ 目录下面,然后用adb 命令执行即可。由于是安卓原生的,比较稳定,运行的速度也比较快。
我们下载了安卓的环境变量后,然后下载任意大于4.0的安卓版本sdk即可。
都会有这个jar包,我们在写代码,创建工程的时候,直接引入即可。
如何获取定位呢,我们可以uiautomatorviewer。
UI Automator 测试框架的主要功能包括:
用于检查布局层次结构的查看器。
用于检索状态信息并在目标设备上执行操作的 API。
支持跨应用界面测试的 API。
UI Automator 测试框架提供了一个 UiDevice 类,用于在运行目标应用的设备上访问和执行操作。您可以调用其方法以访问设备属性,如当前屏幕方向或显示屏尺寸。UiDevice 类还可用于执行以下操作:
改变设备的旋转。
按硬件键,如“音量调高按钮”。
按返回、主屏幕或菜单按钮。
打开通知栏。
截取当前窗口的屏幕截图。
UI Automator API
通过 UI Automator API,您可以编写可靠的测试,而无需了解目标应用的实现细节。您可以使用这些 API 在多个应用间捕获和操纵界面组件:
UiCollection:枚举容器的界面元素,目的是为了计数,或者按可见文本或内容说明属性来定位子元素。
UiObject:表示设备上可见的界面元素。
UiScrollable:支持搜索可滚动界面容器中的项目。
UiSelector:表示对设备上的一个或多个目标界面元素的查询。
Configurator:可让您设置用于运行 UI Automator 测试的关键参数。
官方文档
https://developer.android.com/reference/androidx/test/uiautomator/package-summary
官方文档有着详细的介绍
正常的我们加入后,在后可以看到,有什么类,方式是什么,里面有什么api。
我们可以在引入后查看。
下面列举几个类的方法
UiDevice
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 | void clearLastTraversedText() / / 清除上次UI遍历的事件 boolean click( int x, int y) / / 根据坐标点击 boolean drag( int startX, int startY, int endX, int endY, int steps) / / 拖动 void dumpWindowHierarchy( File dest) / / dump当前的层次化结构到文件中 void dumpWindowHierarchy(OutputStream out) / / dump当前的层次化结构到流中 void dumpWindowHierarchy(String fileName) / / dump当前的层次化结构到文件中 UiObject2 findObject(BySelector selector) / / 根据BySelector查找 UiObject findObject(UiSelector selector) / / 根据UiSelector 查找 List <UiObject2> findObjects(BySelector selector) / / 根据BySelector查找 void freezeRotation() / / 冻结旋转的状态 String getCurrentActivityName() / / 获取当前Activity的名字,已经被废弃 String getCurrentPackageName() / / 获取当前package int getDisplayHeight() / / Gets the height of the display, in pixels. int getDisplayRotation() / / Returns the current rotation of the display, as defined in Surface Point getDisplaySizeDp() / / Returns the display size in dp (device - independent pixel) The returned display size is adjusted per screen rotation. int getDisplayWidth() / / Gets the width of the display, in pixels. static UiDevice getInstance() / / 获取一个对象 static UiDevice getInstance(Instrumentation instrumentation) / / Retrieves a singleton instance of UiDevice String getLastTraversedText() / / 获取上一次遍历的文本 String getLauncherPackageName() / / 获取运行的packagename String getProductName() / / Retrieves the product name of the device. boolean hasAnyWatcherTriggered() / / 检查是否有触发器触发 boolean hasObject(BySelector selector) / / 是否有符合的条件的 boolean hasWatcherTriggered(String watcherName) / / Checks if a specific registered UiWatcher has triggered. boolean isNaturalOrientation() / / Check if the device is in its natural orientation. boolean isScreenOn() / / Checks the power manager if the screen is ON. boolean openNotification() / / Opens the notification shade. / / 打开通知 boolean openQuickSettings() / / 打开设置 <R> R performActionAndWait(Runnable action, EventCondition<R> condition, long timeout) / / Performs the provided action and waits for the condition to be met. boolean pressBack() / / Simulates a short press on the BACK button. boolean pressDPadCenter() / / Simulates a short press on the CENTER button. boolean pressDPadDown() / / Simulates a short press on the DOWN button. boolean pressDPadLeft() / / Simulates a short press on the LEFT button. boolean pressDPadRight() / / Simulates a short press on the RIGHT button. boolean pressDPadUp() / / Simulates a short press on the UP button. boolean pressDelete() / / Simulates a short press on the DELETE key. boolean pressEnter() / / Simulates a short press on the ENTER key. boolean pressHome() / / Simulates a short press on the HOME button. boolean pressKeyCode( int keyCode) / / Simulates a short press using a key code. boolean pressKeyCode( int keyCode, int metaState) / / Simulates a short press using a key code. boolean pressMenu() / / Simulates a short press on the MENU button. boolean pressRecentApps() / / Simulates a short press on the Recent Apps button. boolean pressSearch() / / Simulates a short press on the SEARCH button. void registerWatcher(String name, UiWatcher watcher) / / Registers a UiWatcher to run automatically when the testing framework is unable to find a match using a UiSelector. void removeWatcher(String name) / / Removes a previously registered UiWatcher. void resetWatcherTriggers() / / Resets a UiWatcher that has been triggered. void runWatchers() / / This method forces all registered watchers to run. void setCompressedLayoutHeirarchy(boolean compressed) / / Enables or disables layout hierarchy compression. void setOrientationLeft() / / 设置旋转方向 void setOrientationNatural() / / Simulates orienting the device into its natural orientation and also freezes rotation by disabling the sensors. void setOrientationRight() / / Simulates orienting the device to the right and also freezes rotation by disabling the sensors. void sleep() / / 关闭屏幕 boolean swipe( int startX, int startY, int endX, int endY, int steps) / / Performs a swipe from one coordinate to another using the number of steps to determine smoothness and speed. boolean swipe(Point[] segments, int segmentSteps) / / Performs a swipe between points in the Point array. boolean takeScreenshot( File storePath, float scale, int quality) / / 截屏 boolean takeScreenshot( File storePath) / / Take a screenshot of current window and store it as PNG Default scale of 1.0f (original size) and 90 % quality is used The screenshot is adjusted per screen rotation void unfreezeRotation() / / Re - enables the sensors and un - freezes the device rotation allowing its contents to rotate with the device physical rotation. <R> R wait(SearchCondition<R> condition, long timeout) / / Waits for given the condition to be met. void waitForIdle( long timeout) / / Waits for the current application to idle. void waitForIdle() / / Waits for the current application to idle. boolean waitForWindowUpdate(String packageName, long timeout) / / Waits for a window content update event to occur. void wakeUp() / / 点亮屏幕 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | void clearTextField() / / 清空输入接口 boolean click() / / 点击 boolean clickAndWaitForNewWindow() / / 点击并等待新界面 boolean clickAndWaitForNewWindow( long timeout) / / 点击并等待新界面,设置等待时间 boolean clickBottomRight() / / 点击右下边 boolean clickTopLeft() / / Clicks the top and left corner of the UI element boolean dragTo(UiObject destObj, int steps) / / 拖动 boolean dragTo( int destX, int destY, int steps) / / Drags this object to arbitrary coordinates. boolean exists() / / 判断是否存在 Rect getBounds() / / 返回边界 UiObject getChild(UiSelector selector) / / 根据条件获取子元素 int getChildCount() / / 获取子元素数量 String getClassName() / / 获取当前元素的 class name String getContentDescription() / / Reads the content_desc property of the UI element UiObject getFromParent(UiSelector selector) / / Creates a new UiObject for a sibling view or a child of the sibling view, relative to the present UiObject. String getPackageName() / / Reads the view's package property final UiSelector getSelector() / / Debugging helper. String getText() / / Reads the text property of the UI element Rect getVisibleBounds() / / 获取可见边界 boolean isCheckable() / / 是否可以点击 boolean isChecked() / / 是否已经选中 boolean isClickable() / / Checks if the UI element's clickable property is currently true. boolean isEnabled() / / Checks if the UI element's enabled property is currently true. boolean isFocusable() / / Check if the UI element's focusable property is currently true. boolean isFocused() / / Check if the UI element's focused property is currently true boolean isLongClickable() / / Check if the view's long - clickable property is currently true boolean isScrollable() / / Check if the view's scrollable property is currently true boolean isSelected() / / Checks if the UI element's selected property is currently true. boolean longClick() / / 长按 boolean longClickBottomRight() / / Long clicks bottom and right corner of the UI element boolean longClickTopLeft() / / Long clicks on the top and left corner of the UI element boolean performMultiPointerGesture(PointerCoords... touches) / / Performs a multi - touch gesture. boolean performTwoPointerGesture(Point startPoint1, Point startPoint2, Point endPoint1, Point endPoint2, int steps) / / Generates a two - pointer gesture with arbitrary starting and ending points. boolean pinchIn( int percent, int steps) / / Performs a two - pointer gesture, where each pointer moves diagonally toward the other, from the edges to the center of this UiObject . boolean pinchOut( int percent, int steps) / / Performs a two - pointer gesture, where each pointer moves diagonally opposite across the other, from the center out towards the edges of the this UiObject. boolean setText(String text) / / 设置输入内容 boolean swipeDown( int steps) / / Performs the swipe down action on the UiObject. boolean swipeLeft( int steps) / / Performs the swipe left action on the UiObject. boolean swipeRight( int steps) / / Performs the swipe right action on the UiObject. boolean swipeUp( int steps) / / Performs the swipe up action on the UiObject. boolean waitForExists( long timeout) / / Waits a specified length of time for a view to become visible. boolean waitUntilGone( long timeout) / / Waits a specified length of time for a view to become undetectable. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package cn.cool; import com.android.uiautomator.testrunner.UiAutomatorTestCase; import android.os.RemoteException; public class Testone extends UiAutomatorTestCase { @Override protected void setUp() throws Exception { super .setUp(); } public void testCool() throws RemoteException, InterruptedException { } @Override protected void tearDown() throws Exception { } } |

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?