UIAutomator2.0详解(UIDevice篇----performActionAndWait)
来源:互联网 发布:搞怪照片软件下载 编辑:程序博客网 时间:2024/06/06 11:44
方法含义:执行action后,判断timeout时间内,是否出现Event。
方法返回值:布尔型,若有Event发生,则返回true,否则返回false。
EventCondition是一个抽象类,可用通过 android.support.test.uiautomator.Until中提供的两个静态方法,来获取实体对象。
public static EventCondition<Boolean> newWindow() public static EventCondition<Boolean> scrollFinished(final Direction direction)
查看源码,可发现newWindow()是指发生window状态变化,或内容变化所引发的Event。
而scrollFinished,则是当当滑动到某一方向尽头时所引发的Event。
还是用一个示例来看一下效果。先用newWindow为EventCondition.
核心代码如下:
public class WaitConditionTest extends UIDeviceTest { @Test public void test1(){ String packageName="com.breakloop.salaryshow"; String activityName=".MainActivity"; boolean result1=mDevice.performActionAndWait(new Runnable() { @Override public void run() { Log.i(TAG, "run: new window appeared in 5 s"); } }, Until.newWindow(), 5000); Log.i(TAG, "test1: result = "+result1); Utils.startAPP(mDevice,packageName,activityName); mDevice.waitForWindowUpdate(packageName,5000); Utils.closeAPP(mDevice,packageName); }}
执行效果如下:
执行结果如下:
11-21 23:50:29.221 I/TestRunner: run started: 1 tests11-21 23:50:29.236 I/TestRunner: started: test1(com.breakloop.u2demo.uidevice.WaitConditionTest)11-21 23:50:29.238 I/MonitoringInstrumentation: Activities that are still in CREATED to STOPPED: 011-21 23:50:29.239 I/com.breakloop.u2demo.uidevice.WaitConditionTest: run: new window appeared in 5 s11-21 23:50:34.684 I/com.breakloop.u2demo.uidevice.WaitConditionTest: test1: result = false11-21 23:50:34.705 I/TestRunner: finished: test1(com.breakloop.u2demo.uidevice.WaitConditionTest)
由执行结果可见,在5秒后,输出了“result = false”,说明5秒内未有新窗口事件产生。原因在于,打开APP这个操作,发生在5秒之后。
我们修改代码,将
Utils.startAPP(mDevice,packageName,activityName);
放置在performActionAndWait之前,查看执行结果。
11-22 00:28:43.961 I/TestRunner: started: test1(com.breakloop.u2demo.uidevice.WaitConditionTest)11-22 00:28:43.963 I/MonitoringInstrumentation: Activities that are still in CREATED to STOPPED: 011-22 00:28:44.322 I/com.breakloop.u2demo.uidevice.WaitConditionTest: run: new window appeared in 5 s11-22 00:28:44.411 I/com.breakloop.u2demo.uidevice.WaitConditionTest: test1: result = true11-22 00:28:50.912 I/TestRunner: finished: test1(com.breakloop.u2demo.uidevice.WaitConditionTest)
可以发现,“result = true”,说明有newWindow事件发生。并且,“result = true”紧接着“new window appeared in 5 s”输出,说明并没有等待发生。这与scrollFinished不同。
下面,我们再以scrollFinished为触发条件,看一下效果。
我们在第二个fragment中,添加一个下拉动作。
实例代码如下:
@Test public void test2(){ String packageName="com.breakloop.salaryshow"; String activityName=".MainActivity"; Utils.startAPP(mDevice,packageName,activityName); mDevice.waitForWindowUpdate(packageName,2000); int h=mDevice.getDisplayHeight(); int w=mDevice.getDisplayWidth(); int left=200; int right=w-200; int up=200; int down=h-200; int step=10; mDevice.swipe(right, h/2, left, h/2, step); mDevice.waitForWindowUpdate(packageName,1000); mDevice.swipe(w/2, down, w/2, up, step); boolean result1=mDevice.performActionAndWait(new Runnable() { @Override public void run() { Log.i(TAG, "run: scroll Down"); } },Until.scrollFinished(Direction.DOWN),2000); Log.i(TAG, "test1: result = "+result1); mDevice.waitForWindowUpdate(packageName,1000); Utils.closeAPP(mDevice,packageName); }
效果图如下:
结果如下:
10:34:55.344 I/TestRunner: started: test2(com.breakloop.u2demo.uidevice.WaitConditionTest)10:34:55.351 I/MonitoringInstrumentation: Activities that are still in CREATED to STOPPED: 010:35:01.800 I/com.breakloop.u2demo.uidevice.WaitConditionTest: run: scroll Down10:35:06.801 I/com.breakloop.u2demo.uidevice.WaitConditionTest: test1: result = true10:35:08.408 I/TestRunner: finished: test2(com.breakloop.u2demo.uidevice.WaitConditionTest)
由结果可见,在action完成后,scroll down事件发生了,但仍等待了timeout(5秒)的时间。这一点与newWindow事件不同。
结论:
对于performActionAndWait方法,不同的事件,效果也不同。若newWindow事件若发生,程序将不再等待,继续执行后续动作。而若scroll事件发生,程序将等待timeout,然后在继续后续动作。
测试机型为华为Mate8。不知其它机型是否有同样的效果。童鞋可尝试,望分享。
- UIAutomator2.0详解(UIDevice篇----performActionAndWait)
- UIAutomator2.0详解(UIDevice篇---- 序)
- UIAutomator2.0详解(UIDevice篇----Wait)
- UIAutomator2.0详解(UIDevice篇----waitForIdle)
- UIAutomator2.0详解(UIDevice篇----waitForWindowUpdate)
- UIAutomator2.0详解(UIDevice篇----Hierarchy)
- UIAutomator2.0详解(UIDevice篇----截屏)
- UIAutomator2.0详解(UIDevice篇----UIWatcher)
- UIAutomator2.0详解(UIDevice篇----获取UIDevice对象)
- UIAutomator2.0详解(UIDevice篇----Screen操作)
- UIAutomator2.0详解(UIDevice篇----触屏操作1)
- UIAutomator2.0详解(UIDevice篇----触屏操作2)
- UIAutomator2.0详解(UIDevice篇----触屏操作3)
- UIAutomator2.0详解(UIDevice篇----获取控件)
- UIAutomator2.0详解(UIDevice篇----LastTraversedText质疑)(未解)
- UIAutomator2.0详解(UIDevice篇----获取设备名称和Package名称)
- UIAutomator2.0详解(入门篇)
- UIAutomator2.0详解(JUnit Annotation篇)
- 文章标题
- 第一次写博文
- 数据结构与算法 学习摘要
- 博客小程序
- Quartz的具体实现
- UIAutomator2.0详解(UIDevice篇----performActionAndWait)
- 9CHexadecimal's Numbers
- 【Scikit-Learn 中文文档】线性和二次判别分析
- nginx、tomcat区别
- 网络编程中,同步传输和异步传输有什么区别
- 10.9逆置单链表
- iOS开发多线程篇—GCD介绍
- html中表格的高级部分学习
- 解题常用的两种将输入序列中的字符表示的数转化成对应进制的数值的方法