android自动化测试Uiautomator测试案例

原创 2017年04月15日 11:40:37

1, 测试案例

如下是一个简单的测试案例代码,模拟了点击Home键回到主屏,然后点击所以应用按钮打开所有应用列表,

并滚动到时钟应用。打开时钟应用 并选择闹铃界面的第一个闹钟设置,修改该设置的开关。

然后返回到时钟界面再进入倒计时界面。

import android.widget.ListView;
import android.widget.Switch;
import com.android.uiautomator.core.UiObject;
import com.android.uiautomator.core.UiObjectNotFoundException;
import com.android.uiautomator.core.UiScrollable;
import com.android.uiautomator.core.UiSelector;
import com.android.uiautomator.testrunner.UiAutomatorTestCase;
 
public class LaunchSettings extends UiAutomatorTestCase {  // 继承UiAutomatorTestCase类

public void testDemo() throws UiObjectNotFoundException {
        // 模拟 HOME 键点击事件
        getUiDevice().pressHome();
 
        // 现在打开了主屏应用,模拟点击所有应用按钮操作来启动所有应用界面。
        // 如果你使用了uiautomatorviewer来查看主屏,则可以发现“所有应用”按钮的
        // content-description 属性为“Apps”。可以使用该属性来找到该按钮。
        UiObject allAppsButton = new UiObject(new UiSelector().description("Apps"));
        // 模拟点击所有应用按钮,并等待所有应用界面起来
        allAppsButton.clickAndWaitForNewWindow();
 
        // 在所有应用界面,时钟应用位于Apps tab界面中。下面模拟用户点击Apps tab操作。
        // 找到 Apps tab 按钮
        UiObject appsTab = new UiObject(new UiSelector().text("Apps"));
        // 模拟点击 Apps tab.
        appsTab.click();
 
        // 然后在 Apps tab界面,模拟用户滑动到时钟应用的操作。
        // 由于Apps界面是可以滚动的,所有用
        // UiScrollable 对象.
        UiScrollable appViews = new UiScrollable(new UiSelector().scrollable(true));
        // 设置滚动模式为水平滚动(默认为垂直滚动)
        appViews.setAsHorizontalList();
 
        if (allAppsButton.exists() && allAppsButton.isEnabled()) {
            // allAppsButton在当前界面已经不可见了 所以这里不会执行
            allAppsButton.click();
        }
        // 查找时钟应用并点击
       UiObject settingsApp = appViews.getChildByText(
       new UiSelector().className(android.widget.TextView.class.getName()), "Clock");
       settingsApp.clickAndWaitForNewWindow();
 
        // 验证当前显示 的应用包名为时钟
       UiObject settingsValidation = new UiObject(new UiSelector().packageName("com.google.android.deskclock"));
        // 如果不存在则出错提示
        assertTrue("Unable to detect Clock", settingsValidation.exists());
 
        // 模拟点击时间tab
        UiObject clock = new UiObject(new UiSelector().description("Clock"));
        clock.clickAndWaitForNewWindow();
        // 模拟点击下方的闹钟图标
        UiObject alarms = new UiObject(new UiSelector().description("Alarms"));
        alarms.clickAndWaitForNewWindow();
 
        UiScrollable list = new UiScrollable(new UiSelector().className(ListView.class.getName()));
        if (list.getChildCount() > 0) {
            UiObject listIndex0 = list.getChild(new UiSelector().index(0));
            UiObject switchBtn = listIndex0.getChild(new UiSelector().className(Switch.class.getName()));
 
            boolean isChecked = switchBtn.isChecked();
 
            switchBtn.click();
        }
        // 模拟点击返回键
        getUiDevice().pressBack();
 
        UiObject timer = new UiObject(new UiSelector().description("Timer"));
        timer.clickAndWaitForNewWindow();
 
    }
}

2 uiautomator API

uiautomator API在 uiautomator.jar 文件中。

UiDevice

代表设备状态。在测试中,可以通过UiDevice实例来检测设备的各种属性,例如当前的屏幕方向以及屏幕尺寸。

同时还可以通过UiDevice实例来执行设备级别的操作,例如 把设备设置为横屏或者竖屏、按下Home按键等。

getUiDevice().pressHome(); //模拟按下Home按键

UiSelector

代表一个搜索UI控件的条件。如果发现多个满足条件的控件则会返回第一个控件。返回的结果为UiObject对象。

在构造UiSelector的时候可以组合使用多个属性来定位具体的控件。如果没有找到控件则会抛出 UiAutomatorObjectNotFoundException 异常。

还可以使用childSelector()函数来嵌套UiSelector 对象。

例如,下面的代码演示了如何在当前界面中查找第一个ListView中的带有文本属性为Apps的子控件。

UiObject appItem = new UiObject(new UiSelector()
.className("android.widget.ListView").instance(1)
.childSelector(new UiSelector().text("Apps")));

UiObject

代表一个UI控件。通过UiSelector来查找UiObject。

如下示例代码演示了如何查找当前显示界面中的取消按钮和确认按钮:

UiObject cancelButton = new UiObject(new UiSelector().text("Cancel"));
UiObject okButton = new UiObject(new UiSelector().text("OK"));

查找到的UiObject实例可以在其他测试代码中重用。需要注意的是:每次使用UiObject做操作的时候uiautomator 都会在当前屏幕重新查找该控件。

在当前界面查找文本内容为“OK”的控件。如果存在并且可用则模拟用户点击该控件。

if(okButton.exists() && okButton.isEnabled())
{
okButton.click();
}

还可以限制仅仅查找特定类型的控件。

例如 如下代码只查找文本为“Cancel”和“OK”的android.widget.Button类型控件。

UiObject cancelButton = new UiObject(new UiSelector().text("Cancel")
.className("android.widget.Button"));
UiObject okButton = new UiObject(new UiSelector().text("OK")
.className("android.widget.Button"));

UiCollection

代表控件的集合。获取UiCollection的方式和UiObject一样,通过 UiSelector查找。 UiCollection对应Android系统中的ViewGroup以及子控件。

如下代码演示如何通过UiSelector来获取包含视频集合的UiCollection。

UiCollection videos = new UiCollection(new UiSelector()
.className("android.widget.FrameLayout"));

UiScrollable

代表可滚动的控件。可以用UiScrollable来模拟水平或者垂直滚动的UI元素。

如果需要操作的元素在屏幕外需要滚动屏幕才能看到的情况下需要使用UiScrollable。

例如,下面的代码显示了如何模拟滚动到“Settings ”菜单并点击“About tablet”菜单的操作。

UiScrollable settingsItem = new UiScrollable(new UiSelector()
.className("android.widget.ListView"));
UiObject about = settingsItem.getChildByText(new UiSelector()
.className("android.widget.LinearLayout"), "About tablet");
about.click();
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012439416/article/details/70183442

Android uiautomator实例使用

Android测试工具中,Monkey Runner只要简单几个指令即可,但他的局限性在于都是基于像素位置操作,不具备移植性。 而采用uiautomator编写的自动化测试工具则可以实现基于UiSe...
  • huiguixian
  • huiguixian
  • 2014-03-28 15:52:23
  • 34031

手把手教你uiautomator_android自动化测试第一个示例

Google在sdk4.0以后提供了一个自动化解决方案uiautomator: 优点:可以跨应用了;这可是亲生的; 缺点:必须sdk4.0以上版本;要想实现的好,最好有开发配合;java项目编译为ja...
  • Testingba
  • Testingba
  • 2014-04-09 10:52:20
  • 3575

Uiautomator自动化测试编写和调试---小白入门超详细

Uiautomator建立自动化测试项目 1.建立java项目 (1)选择File-New-JavaProject (注意:是java proect) (2)输入Project Name 输入P...
  • gld824125233
  • gld824125233
  • 2016-10-21 13:53:51
  • 3731

UiAutomator 简单测试脚本示例

package com.yang.clicktest; import com.android.uiautomator.core.UiDevice; import com.android.uiauto...
  • liuy5277
  • liuy5277
  • 2015-09-17 21:49:33
  • 2624

使用uiautomator做UI测试

转自:http://blog.chengyunfeng.com/?p=504 在Android 4.1发布的时候包含了一种新的测试工具–uiautomator,uiautomat...
  • Sasoritattoo
  • Sasoritattoo
  • 2013-12-26 11:45:55
  • 19992

UiAutomator之UiCollection UiScrollable UiWatcher

直接吧API全部分析完算了
  • huanyi0723
  • huanyi0723
  • 2014-06-26 16:21:02
  • 5823

Android 自动化测试(4)<uiautomator>

做过java单元测试的同学,使用Android的单元测试比较简单,参见 如何进行Android单元测试,采用这种方式,业务逻辑上的测试在很多情况下,就已经解决了。还有一个明显的缺陷就是测试界面不方便。...
  • vshuang
  • vshuang
  • 2014-10-18 13:17:04
  • 15323

uiautomator2.0+脱离PC运行(apk启动uiautomator2.0+)的实现方案

uiautomator2.0+脱离PC运行(apk启动uiautomator2.0+)效果:打开MyTest.apk,点击run uiautomator,就能直接运行你的脚本。方案概述: 新建一个An...
  • cxq234843654
  • cxq234843654
  • 2016-09-21 10:43:53
  • 15102

android自动化测试Uiautomator测试案例

1, 测试案例 如下是一个简单的测试案例代码,模拟了点击Home键回到主屏,然后点击所以应用按钮打开所有应用列表, 并滚动到时钟应用。打开时钟应用 并选择闹铃界面的第一个闹钟设置,修改该设置的开关...
  • u012439416
  • u012439416
  • 2017-04-15 11:40:37
  • 748

【Android测试】Uiautomator——API详解

简单的例子   以一个简单的例子开始吧。我们完成一个 " 打开QQ,进入QQ空间,然后退出 " 的case。   代码如下: [java] view plain copy ...
  • LOVE000520
  • LOVE000520
  • 2016-07-28 11:16:08
  • 1069
收藏助手
不良信息举报
您举报文章:android自动化测试Uiautomator测试案例
举报原因:
原因补充:

(最多只允许输入30个字)