Suzy云
下决心容易,做起来难,坚持做难上加难.. 是否真的那么难?不试试怎么知道?

UiAutomator自动化测试框架介绍

 

 环境搭建

1         必要条件

1.1       JDK

1.2       SDK(API高于15)

1.3       Eclipse

2         简要步骤

2.1       安装JDK并添加bin目录到环境变量

2.2       添加SDK中的tools目录和platform-tools到环境变量

2.3       安装Eclipse并安装ADT插件

  建立工程

1         用eclipse建立Java project

2         添加Junit库

 

3         添加Android库

找到sdk/platforms/android-19/下面的android.jar和uiautomator.jar并添加进来

 

4         添加完成后如下图

 

 

  在工程中编写case

1         分析Device当前界面的UI内容

在编写Case之前,需要找到界面上不同控件的id,text,class或者description等等,来定位具体的点击事件。我们可以使用uiautomatorviewer工具来分析界面的组织架构。

 

2         官方用例

package com.uia.example.my;

// Import the uiautomator libraries
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 {   

   public void testDemo() throws UiObjectNotFoundException {       
      // Simulate a short press on the HOME button.
      getUiDevice().pressHome();
      
      // We’re now in the home screen. Next, we want to simulate 
      // a user bringing up the All Apps screen.
      // If you use the uiautomatorviewer tool to capture a snapshot 
      // of the Home screen, notice that the All Apps button’s 
      // content-description property has the value “Apps”.  We can 
      // use this property to create a UiSelector to find the button. 
      UiObject allAppsButton = new UiObject(new UiSelector()
         .description("Apps"));
      
      // Simulate a click to bring up the All Apps screen.
      allAppsButton.clickAndWaitForNewWindow();
      
      // In the All Apps screen, the Settings app is located in 
      // the Apps tab. To simulate the user bringing up the Apps tab,
      // we create a UiSelector to find a tab with the text 
      // label “Apps”.
      UiObject appsTab = new UiObject(new UiSelector()
         .text("Apps"));
      
      // Simulate a click to enter the Apps tab.
      appsTab.click();

      // Next, in the apps tabs, we can simulate a user swiping until
      // they come to the Settings app icon.  Since the container view 
      // is scrollable, we can use a UiScrollable object.
      UiScrollable appViews = new UiScrollable(new UiSelector()
         .scrollable(true));
      
      // Set the swiping mode to horizontal (the default is vertical)
      appViews.setAsHorizontalList();
      
      // Create a UiSelector to find the Settings app and simulate      
      // a user click to launch the app. 
      UiObject settingsApp = appViews.getChildByText(new UiSelector()
         .className(android.widget.TextView.class.getName()), 
         "Settings");
      settingsApp.clickAndWaitForNewWindow();
      
      // Validate that the package name is the expected one
      UiObject settingsValidation = new UiObject(new UiSelector()
         .packageName("com.android.settings"));
      assertTrue("Unable to detect Settings", 
         settingsValidation.exists());   
  }   
}

  Build工程

1         产生build工程所需要的配置文件

<android-sdk>/tools/android create uitest-project -n <name> -t 1 -p <path>

       name: build jar文件的名字

       1: 使用命令android list可以查看

 

       path: 工程目录

2         build工程jar文件

2.1配置文件创建完成后,刷新工程目录,将会产生三个文件:build.xml、local.properties和project.properties

 

2.2    打开build.xml,将default值改成build,如下图

 

2.3    build工程

 

 

  运行工程

1         导入

将build好的jar文件,push到手机目录/data/local/tmp/下

2         运行命令

adb shell uiautomator runtest LaunchSettings.jar(build出来的文件) -c com.uia.example.my.LaunchSettings(class名)

       如果想要运行class类里具体的方法,可以在类后面加上#方法名即可

       如果想手机单独运行程序,不受数据线的约束,可以使用--nohup

  API详解

1         UiDevice

提供关于设备的状态信息。你也可以使用这个类来模拟设备上的用户的行为,如按方向键或者按菜单键

如若获取UiDevice的对象,请使用UiDevice.getInstance()方法

Public Methods

void

clearLastTraversedText()

清除上一次输入的文本

Clears the text from the last UI traversal event.

boolean

click(int x, int y)

点击坐标

Perform a click at arbitrary coordinates specified by the user

boolean

drag(int startX, int startY, int endX, int endY, int steps)

从开始坐标拖拽到终点坐标位置

Performs a swipe from one coordinate to another coordinate.

void

dumpWindowHierarchy(String fileName)

dump当前界面的层次结构,并保存到/data/local/tmp/目录下

Helper method used for debugging to dump the current window's layout hierarchy.

void

freezeRotation()

禁用传感器,并且在当前界面冻结转屏

Disables the sensors and freezes the device rotation at its current rotation state.

String

getCurrentActivityName()

获取当前Activity的名字,此方法已被丢弃,不建议使用

This method is deprecated. The results returned should be considered unreliable

String

getCurrentPackageName()

获取当前包名

Retrieves the name of the last package to report accessibility events.

int

getDisplayHeight()

获取显示高度,以像素为单位

Gets the height of the display, in pixels.

int

getDisplayRotation()

返回当前的旋转值,0,90,180,270

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()

Java单例模式,获取UiDevice的对象

Retrieves a singleton instance of UiDevice

String

getLastTraversedText()

获取最后一次输入的text

Retrieves the text from the last UI traversal event received.

String

getProductName()

获取设备的名字

Retrieves the product name of the device.

boolean

hasAnyWatcherTriggered()

检查是否有监听器触发过

Checks if any registered UiWatcher have triggered.

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()

打开notification通知栏

Opens the notification shade.

boolean

openQuickSettings()

打开quicksetting

Opens the Quick Settings shade.

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()

home键

Simulates a short press on the HOME button.

boolean

pressKeyCode(int keyCode, int metaState)

keycode,参照keyevent

Simulates a short press using a key code.

boolean

pressKeyCode(int keyCode)

keycode,参照keyevent

Simulates a short press using a key code.

boolean

pressMenu()

menu键

Simulates a short press on the MENU button.

boolean

pressRecentApps()

recent键

Simulates a short press on the Recent Apps button.

boolean

pressSearch()

search键

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()

通过禁用传感器,然后模拟设备向左转,并且固定位置

Simulates orienting the device to the left and also freezes rotation by disabling the sensors.

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()

锁屏

This method simply presses the power button if the screen is ON else it does nothing if the screen is already OFF.

boolean

swipe(Point[] segments, int segmentSteps)

在点阵列中滑动,5秒一步

Performs a swipe between points in the Point array.

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

takeScreenshot(File storePath)

当前窗口截屏,并将其存储为PNG格式默认1.0f的规模(原尺寸)和90%的图片质量,参数为file类的文件路径

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

boolean

takeScreenshot(File storePath, float scale, int quality)

当前窗口截屏,可以自定义尺寸和图片质量

Take a screenshot of current window and store it as PNG 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.

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()

唤醒屏幕

This method simulates pressing the power button if the screen is OFF else it does nothing if the screen is already ON.

 

2         UiSelector

用于按照一定的条件,定位界面上的控件元素。UiObject对象通过UiSelector来选取

Public Constructors

 

UiSelector()

构造方法

Public Methods

UiSelector

checkable(boolean val)

是否是可选择的属性

Set the search criteria to match widgets that are checkable.

UiSelector

checked(boolean val)

是否已经被选择

Set the search criteria to match widgets that are currently checked (usually for checkboxes).

UiSelector

childSelector(UiSelector selector)

子类

Adds a child UiSelector criteria to this selector.

UiSelector

className(String className)

类名

Set the search criteria to match the class property for a widget (for example, "android.widget.Button").

<T> UiSelector

className(Class<T> type)

泛型类名

Set the search criteria to match the class property for a widget (for example, "android.widget.Button").

UiSelector

classNameMatches(String regex)

类名正则表达式

Set the search criteria to match the class property for a widget, using a regular expression.

UiSelector

clickable(boolean val)

是否可以被点击

Set the search criteria to match widgets that are clickable.

UiSelector

description(String desc)

通过content-description来选取

Set the search criteria to match the content-description property for a widget.

UiSelector

descriptionContains(String desc)

通过content-description所包含的字符来选取

Set the search criteria to match the content-description property for a widget.

UiSelector

descriptionMatches(String regex)

通过content-description所符合正则表达式

的字符来选取

Set the search criteria to match the content-description property for a widget.

UiSelector

descriptionStartsWith(String desc)

通过content-description开始字符匹配来选取

Set the search criteria to match the content-description property for a widget.

UiSelector

enabled(boolean val)

是否已经被enabled

Set the search criteria to match widgets that are enabled.

UiSelector

focusable(boolean val)

焦点属性

Set the search criteria to match widgets that are focusable.

UiSelector

focused(boolean val)

当前焦点属性

Set the search criteria to match widgets that have focus.

UiSelector

fromParent(UiSelector selector)

父类

Adds a child UiSelector criteria to this selector which is used to start search from the parent widget.

UiSelector

index(int index)

编号

Set the search criteria to match the widget by its node index in the layout hierarchy.

UiSelector

instance(int instance)

索引

Set the search criteria to match the widget by its instance number.

UiSelector

longClickable(boolean val)

是否可以被长按

Set the search criteria to match widgets that are long-clickable.

UiSelector

packageName(String name)

包名

Set the search criteria to match the package name of the application that contains the widget.

UiSelector

packageNameMatches(String regex)

正则包名

Set the search criteria to match the package name of the application that contains the widget.

UiSelector

resourceId(String id)

资源id

Set the search criteria to match the given resource ID.

UiSelector

resourceIdMatches(String regex)

资源id正则表达式

Set the search criteria to match the resource ID of the widget, using a regular expression.http://blog.bettersoftwaretesting.com/

UiSelector

scrollable(boolean val)

是否可以被滑动

Set the search criteria to match widgets that are scrollable.

UiSelector

selected(boolean val)

当前选择属性

Set the search criteria to match widgets that are currently selected.

UiSelector

text(String text)

根据text来选取控件或者应用程序

Set the search criteria to match the visible text displayed in a widget (for example, the text label to launch an app).

UiSelector

textContains(String text)

根据text中包含的字符串

来选取控件或者应用程序

Set the search criteria to match the visible text in a widget where the visible text must contain the string in your input argument.

UiSelector

textMatches(String regex)

通过正则表达式来选取匹配的控件或者应用程序

Set the search criteria to match the visible text displayed in a layout element, using a regular expression.

UiSelector

textStartsWith(String text)

通过文本开始字符来选取

Set the search criteria to match visible text in a widget that is prefixed by the text parameter.

String

toString()

 

Protected Methods

UiSelector

cloneSelector()

克隆UiSelector

  

 

3         UiObject

UiObject主要对对象进行操作

 

 

Public Constructors

 

UiObject(UiSelector selector)

UiObject的构造方法

Constructs a UiObject to represent a view that matches the specified selector criteria.

Public Methods

void

clearTextField()

清除编辑框中的文本

Clears the existing text contents in an editable field.

boolean

click()

点击事件

Performs a click at the center of the visible bounds of the UI element represented by this UiObject.

boolean

clickAndWaitForNewWindow(long timeout)

点击对象,等待新窗口的出现,

参数为等待超时时长

Performs a click at the center of the visible bounds of the UI element represented by this UiObject and waits for window transitions.

boolean

clickAndWaitForNewWindow()

点击对象,等待新窗口的出现

Waits for window transitions that would typically take longer than the usual default timeouts.

boolean

clickBottomRight()

点击对象的右下角

Clicks the bottom and right corner of the UI element

boolean

clickTopLeft()

点击对象的左上角

Clicks the top and left corner of the UI element

boolean

dragTo(UiObject destObj, int steps)

拖拽到另一个对象处,步长可调整拖拽的速度

Drags this object to a destination UiObject.

boolean

dragTo(int destX, int destY, int steps)

拖拽到目标坐标处,步长可调整拖拽的速度

Drags this object to arbitrary coordinates.

boolean

exists()

对象是否存在

Check if view exists.

Rect

getBounds()

获取对象的矩形坐标左上角和右下角的坐标

Returns the view's bounds property.

UiObject

getChild(UiSelector selector)

获得对象的子类对象,可以递归获取

子孙当中的某个对象

Creates a new UiObject for a child view that is under the present UiObject.

int

getChildCount()

获取下一级子类的数量

Counts the child views immediately under the present UiObject.

String

getClassName()

获取类名

Retrieves the className property of the UI element.

String

getContentDescription()

获取description

Reads the content_desc property of the UI element

UiObject

getFromParent(UiSelector selector)

从父类获取子类,按照UiSelector获取兄弟类

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()

获得selector用于调试

Debugging helper.

String

getText()

获得对象的文本属性

Reads the text property of the UI element

Rect

getVisibleBounds()

返回可见视图的范围,如果视图是可见的,

只有可见部分报告的范围

Returns the visible bounds of the view.

boolean

isCheckable()

检查对象的checkable属性是否为true

Checks if the UI element's checkable property is currently true.

boolean

isChecked()

检查对象的checked属性是否为true

Check if the UI element's checked property is currently true

boolean

isClickable()

检查对象的clickable属性是否为true

Checks if the UI element's clickable property is currently true.

boolean

isEnabled()

检查对象的enabled属性是否为true

Checks if the UI element's enabled property is currently true.

boolean

isFocusable()

检查对象的focusable属性是否为true

Check if the UI element's focusable property is currently true.

boolean

isFocused()

检查对象的focused属性是否为true

Check if the UI element's focused property is currently true

boolean

isLongClickable()

检查对象的longclickable属性是否为true

Check if the view's long-clickable property is currently true

boolean

isScrollable()

检查对象的scrollable属性是否为true

Check if the view's scrollable property is currently true

boolean

isSelected()

检查对象的selected属性是否为true

Checks if the UI element's selected property is currently true.

boolean

longClick()

长按

Long clicks the center of the visible bounds of the UI element

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)

在对象中输入文字

Sets the text in an editable field, after clearing the field's content.

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.

 

4         UiScrollable

 

 

Public Constructors

 

UiScrollable(UiSelector container)

UiScrollable的构造方法

Constructor.

Public Methods

boolean

flingBackward()

以步长为5的值向后滑动

Performs a backwards fling action with the default number of fling steps (5).

boolean

flingForward()

以步长为5的值向前滑动

Performs a forward fling with the default number of fling steps (5).

boolean

flingToBeginning(int maxSwipes)

滑动到最前面一屏

Performs a fling gesture to reach the beginning of a scrollable layout element.

boolean

flingToEnd(int maxSwipes)

滑动到最后一屏

Performs a fling gesture to reach the end of a scrollable layout element.

UiObject

getChildByDescription(UiSelector childPattern, String text, boolean allowScrollSearch)

是否允许滑动来查找具备描述条件的object对象

Searches for a child element in the present scrollable container.

UiObject

getChildByDescription(UiSelector childPattern, String text)

默认滑动来查找具备描述条件的对象

Searches for a child element in the present scrollable container.

UiObject

getChildByInstance(UiSelector childPattern, int instance)

获取具备UiSelector的子集,再从子集当中筛选想要的元素(不滚动)

Searches for a child element in the present scrollable container that matches the selector you provided.

UiObject

getChildByText(UiSelector childPattern, String text, boolean allowScrollSearch)

是否允许滑动来查找具备通过文本条件的object对象

Searches for a child element in the present scrollable container.

UiObject

getChildByText(UiSelector childPattern, String text)

默认通过滑动来查找具备通过文本条件的object对象

Searches for a child element in the present scrollable container.

int

getMaxSearchSwipes()

获取搜索滑动过程中的最大滑动次数,默认常量为30

Gets the maximum number of scrolls allowed when performing a scroll action in search of a child element.

double

getSwipeDeadZonePercentage()

默认常量为0.1,10%

Returns the percentage of a widget's size that's considered as a no-touch zone when swiping.

boolean

scrollBackward(int steps)

自定义步长向后滑动

Performs a backward scroll.

boolean

scrollBackward()

以默认步长55向后滑动

Performs a backward scroll with the default number of scroll steps (55).

boolean

scrollDescriptionIntoView(String text)

滚动到描述所在的位置

Performs a forward scroll action on the scrollable layout element until the content-description is found, or until swipe attempts have been exhausted.

boolean

scrollForward()

以默认步长55向前滑动

Performs a forward scroll with the default number of scroll steps (55).

boolean

scrollForward(int steps)

自定义步长向前滑动

Performs a forward scroll.

boolean

scrollIntoView(UiSelector selector)

滚动到元素所在的位置

Perform a scroll forward action to move through the scrollable layout element until a visible item that matches the selector is found.

boolean

scrollIntoView(UiObject obj)

滚动到对象所在的位置

Perform a forward scroll action to move through the scrollable layout element until a visible item that matches the UiObject is found.

boolean

scrollTextIntoView(String text)

滚动到文本对象所在的位置

Performs a forward scroll action on the scrollable layout element until the text you provided is visible, or until swipe attempts have been exhausted.

boolean

scrollToBeginning(int maxSwipes)

自定义扫动距离滚动到开始位置

Scrolls to the beginning of a scrollable layout element.

boolean

scrollToBeginning(int maxSwipes, int steps)

自定义扫动距离以及步长滚动到开始位置

Scrolls to the beginning of a scrollable layout element.

boolean

scrollToEnd(int maxSwipes, int steps)

自定义扫动距离以及步长滚动到结束位置

Scrolls to the end of a scrollable layout element.

boolean

scrollToEnd(int maxSwipes)

自定义扫动距离滚动到结束位置

Scrolls to the end of a scrollable layout element.

UiScrollable

setAsHorizontalList()

设置界面为水平滑动

Set the direction of swipes to be horizontal when performing scroll actions.

UiScrollable

setAsVerticalList()

设置界面为竖直滑动,此为默认值

Set the direction of swipes to be vertical when performing scroll actions.

UiScrollable

setMaxSearchSwipes(int swipes)

设置最大可扫描次数

Sets the maximum number of scrolls allowed when performing a scroll action in search of a child element.

UiScrollable

setSwipeDeadZonePercentage(double swipeDeadZonePercentage)

设置一个部件的大小,在滑动时,视为无接触区的百分比

Sets the percentage of a widget's size that's considered as no-touch zone when swiping.

 

5         UiCollection

UiCollection继承UiObject,用于枚举一个容器的用户界面(UI)元素计数的目的,或安装子元素的文本或描述条件获取子元素对象。

Public Constructors

 

UiCollection(UiSelector selector)

UiCollection的构造方法

Public Methods

UiObject

getChildByDescription(UiSelector childPattern, String text)

通过包含的条件寻找符合的子元素

Searches for child UI element within the constraints of this UiSelector selector.

UiObject

getChildByInstance(UiSelector childPattern, int instance)

通过包含的条件寻找符合的子元素

Searches for child UI element within the constraints of this UiSelector.

UiObject

getChildByText(UiSelector childPattern, String text)

通过包含的条件寻找符合的子元素

Searches for child UI element within the constraints of this UiSelector.

int

getChildCount(UiSelector childPattern)

递归计算符合条件的子元素的数量

Counts child UI element instances matching the childPattern argument.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6         UiWatcher

 

Public Methods

abstract boolean

checkForCondition()

抽象方法,在监听程序中要实现此方法

The testing framework calls this handler method automatically when the framework is unable to find a match using the UiSelector.

 

监听器要在中断代码之前运行,我们首先要注册一个监听器,然后运行。注册监听器的方法,在UiDevice的API中有介绍,

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.

 

 

 

 

注册监听器的结构方法如下:

 

UiDevice.getInstance().registerWatcher(“register watcher method”, new UiWatcher(){

Public boolean checkForCondition{

//在此方法体内定义监听的方法

}

});

 

编写用例的注意事项

1.每一个类都要继承UiAutomatorTestCase

 

2.最好在每个类里都定义setUp和tearDown方法,用于初始化(最好都以Home界面为测试开始点)和结束测试(最好也以Home界面为测试结束点)

 

3.因为此套测试框架式继承与Junit3的,所以每个方法最好都要以test开头,运行单个类时,程序会run以test开头的方法。当然这不是强制的,也可以以#方法run用例。

 

posted on 2015-09-17 21:50  Suzy云  阅读(4736)  评论(0编辑  收藏  举报