zoukankan      html  css  js  c++  java
  • 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

    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()
    // 点亮屏幕
    

      

    UiObject

    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.
    

      

    下面给大家展示一个UiAutomator的testcase

    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 {
     
        }
    
    }
    

      

    然后我们可以在实际的项目中,去实现我们真实的业务的代码。实现完毕呢,
    我们就可以用 adb . shell push cool.jar /data/local/tmp/
    然后使用
    adb shell uiautomator runtest cool.jar -c cn.cool.Testone
    就可以执行了。uiautomator 由于只能打成jar包,所以它不能直接在编辑器上进行调试。
    欢迎关注我的公众号,专注测试技术的分享

  • 相关阅读:
    科学计算和可视化,做数据分析与雷达图。
    Leetcode 429 N叉树的层序遍历
    Leetcode 867转置矩阵
    Leetcode 832 翻转图像
    Leetcode 1052 爱生气的书店老板
    Leetcode 337打家劫舍 III
    Leetcode 766 托普利茨矩阵
    Leetcode 1438绝对差不超过限制的最长连续子数组
    Leetcode 697 数组的度
    Leetcode 567 字符串的排列
  • 原文地址:https://www.cnblogs.com/leiziv5/p/13871184.html
Copyright © 2011-2022 走看看