(注意:本文基于UI Automator测试框架版本为2.2.0)
UiDevice提供了等待功能,UiObject2也提供了等待功能,本篇学习UiObject2的等待功能是如何实现的?等待条件满足后插桩测试继续执行,我们在写测试用例的过程中必须要使用等待功能,因为界面中的控件出现时机是不可控的,尤其是待有动画的界面,笔者曾经遇到过的偶现问题,有相当一部分是动画引起的。
三个等待功能
1、clickAndWait(EventCondition,long)方法
传入参数为1个EventCondtion对象,我们使用Until类提供的两个静态工厂方法即可获得EventCondition对象,另外一个long类型的参数表示等待的最长时间
public <R> R clickAndWait(EventCondition<R> condition, long timeout) {
return mGestureController.performGestureAndWait(condition, timeout,
mGestures.click(getVisibleCenter()));
}
该功能依赖UiObject2对象持有的Gestures对象mGestures、以及GestureController对象mGestureConroller
2、wait(SearchCondtion,long)方法
UiObject2对象可以作为查找控件的起始控件,即以当前UiObject2为根结点的View树中查找控件。它接受两个参数,一个是SearchConditon对象,另一个long类型的参数表示等待的最长时间
public <R> R wait(SearchCondition<R> condition, long timeout) {
return mWaitMixin.wait(condition, timeout);
}
等待功能完全依赖UiObject2对象持有的一个WaitMixin对象mWaitMixin,此对象与UiDevice持有的对象,类型一样!
3、wait(UiObject2Condtion,long)方法
UiObject2表示某个控件,而控件有很多属性,该方法以控件的属性作为等待的条件,即传入的UiObject2Condition对象,另外一个参数则为等待的最长时间
public <R> R wait(UiObject2Condition<R> condition, long timeout) {
return mWaitMixin.wait(condition, timeout);
}
此等待功能也是完全依赖UiObject2对象持有的一个WaitMixin对象mWaitMixin!
总结
1、clickAndWait()方法,当给定条件满足后,等待结束,然后会触发一个点击事件,结果是boolean值,点击成功返回true!
2、wait(SearchCondtion,long)方法,则是给定的查找控件条件满足后,不再继续等待,此方法最终返回的对象与条件对象相关,一般情况下为boolean值或者UiObject2对象!(备注:参考Until中返回SearchCondition的静态方法)
3、wait(UiObject2Condtion,long)方法,给定的控件状态条件满足后,不再继续等待,此方法的最终返回值与条件对象相关,一般情况下为boolean值!(备注:参考Until中返回UiObject2Condition的静态方法)
4、两个重载的wait()方法与UiDevice的实现一样,都依赖持有的一个WaitMixin对象。具体WaitMixin类的实现,我已经在单独的文章中进行了总结!