UIAutomator2.0详解(UIDevice篇----Wait)
来源:互联网 发布:js获取浏览器宽高 编辑:程序博客网 时间:2024/06/05 20:30
感觉拖了好久,今天将Wait接口的总结补上,顺便把SearchCondition也捎带结了。
直接上图。
Wait方法含义:查看查询条件是否符合,若符合,则返回结果。若不符合,则继续等待,直至超时。
返回结果可能为UIObject2对象或者UIObject2对象列表,或者布尔类型。
其中,传参SearchCondition是一个抽象类,若想获取其实体对象,需要调用Until工具类。
该类提供了4个接口方法,来返回SearchCondition实体对象。
public static SearchCondition<UiObject2> findObject(final BySelector selector) public static SearchCondition<List<UiObject2>> findObjects(final BySelector selector) public static SearchCondition<Boolean> hasObject(final BySelector selector) public static SearchCondition<Boolean> gone(final BySelector selector)
这里着重说一下gone方法(前三个方法,从方法名称便可理解用途)。
该方法与findObject功能相反。若不存在符合查询条件的UI对象,则返回true,否则返回false。
还是通过示例来说明如何使用。核心代码如下。
public class WaitTest extends UIDeviceTest { private String text_button1 ="OPEN ACTIVITY 2"; private String text_button2 ="OPEN ACTIVITY"; private String text_check="check"; private String mPackageName="com.breakloop.test"; private String mActivityName=".MainActivity"; private long timeout=2000l; @Before public void start(){ Utils.startAPP(mDevice,mPackageName,mActivityName); waitForAMoment(); } private void waitForAMoment(){ mDevice.waitForWindowUpdate(mPackageName,timeout); } @After public void end(){ Utils.closeAPP(mDevice,mPackageName); waitForAMoment(); } @Test public void Test1(){ UiObject2 ui2=null; List<UiObject2> uiObject2List=null; boolean result=false; Log.i(TAG, "Test: start"); ui2=mDevice.wait(Until.findObject(By.text(text_button1)),timeout); Log.i(TAG, "Test1: "+(ui2!=null?"":"Do Not ")+"find UI with txt "+text_button1); ui2=mDevice.wait(Until.findObject(By.text(text_button2)),timeout); Log.i(TAG, "Test2: "+(ui2!=null?"":"Do Not ")+"find UI with txt "+text_button2); result=mDevice.wait(Until.hasObject(By.text(text_button1)),timeout); Log.i(TAG, "Test3: "+(result?"":"Do Not ")+"find UI with txt "+text_button1); result=mDevice.wait(Until.hasObject(By.text(text_button2)),timeout); Log.i(TAG, "Test4: "+(result?"":"Do Not ")+"find UI with txt "+text_button2); result=mDevice.wait(Until.gone(By.text(text_button1)),timeout); Log.i(TAG, "Test5: "+(result?"Do Not ":"")+"find UI with txt "+text_button1); result=mDevice.wait(Until.gone(By.text(text_button2)),timeout); Log.i(TAG, "Test6: "+(result?"Do Not ":"")+"find UI with txt "+text_button2); uiObject2List=mDevice.wait(Until.findObjects(By.textStartsWith(text_check)),timeout); Log.i(TAG, "Test7: "+(uiObject2List!=null?"":"Do Not ")+"find UI with txt "+text_check); if(uiObject2List!=null){ for (UiObject2 item : uiObject2List) { item.click(); waitForAMoment(); } } uiObject2List=mDevice.wait(Until.findObjects(By.text(text_check)),timeout); Log.i(TAG, "Test8: "+(uiObject2List!=null?"":"Do Not ")+"find UI with txt "+text_check); if(uiObject2List!=null){ for (UiObject2 item : uiObject2List) { item.click(); waitForAMoment(); } } Log.i(TAG, "Test: end"); }}
执行效果如图
执行结果如下
15:48:58.700 I/com.breakloop.u2demo.uidevice.WaitTest: Test: start15:48:58.748 I/com.breakloop.u2demo.uidevice.WaitTest: Test1: find UI with txt OPEN ACTIVITY 215:49:00.876 I/com.breakloop.u2demo.uidevice.WaitTest: Test2: Do Not find UI with txt OPEN ACTIVITY15:49:00.939 I/com.breakloop.u2demo.uidevice.WaitTest: Test3: find UI with txt OPEN ACTIVITY 215:49:03.078 I/com.breakloop.u2demo.uidevice.WaitTest: Test4: Do Not find UI with txt OPEN ACTIVITY15:49:05.209 I/com.breakloop.u2demo.uidevice.WaitTest: Test5: find UI with txt OPEN ACTIVITY 215:49:05.249 I/com.breakloop.u2demo.uidevice.WaitTest: Test6: Do Not find UI with txt OPEN ACTIVITY15:49:05.290 I/com.breakloop.u2demo.uidevice.WaitTest: Test7: find UI with txt check15:49:11.620 I/com.breakloop.u2demo.uidevice.WaitTest: Test8: Do Not find UI with txt check15:49:11.620 I/com.breakloop.u2demo.uidevice.WaitTest: Test: end
由执行结果可见:
对于Until.findObject,Until.findObjects,Until.hasObject三个方法,若找到符合查询条件的UI,则Wait结束,否则继续Wait,直至超时。
对于Until.gone方法,则相反。若找到符合查询条件的UI,则继续Wait,直至超时,否则,Wait结束。
阅读全文
1 0
- UIAutomator2.0详解(UIDevice篇----Wait)
- UIAutomator2.0详解(UIDevice篇---- 序)
- UIAutomator2.0详解(UIDevice篇----waitForIdle)
- UIAutomator2.0详解(UIDevice篇----waitForWindowUpdate)
- UIAutomator2.0详解(UIDevice篇----Hierarchy)
- UIAutomator2.0详解(UIDevice篇----截屏)
- UIAutomator2.0详解(UIDevice篇----performActionAndWait)
- 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篇)
- 删除数组中重复的元素
- centos扩大root分区的方法(lvm)
- PACKAGE_USAGE_STATS权限报错 permissions is only granted to system apps
- 分布式后端接口幂等性设计思路
- Leecode 53 Maximum Subarray
- UIAutomator2.0详解(UIDevice篇----Wait)
- 小白自学Python3爬虫
- CVTE软开的在线笔试
- BZOJ 1875 [SDOI2009]HH去散步
- 自定义div弹窗。
- Android Studio 中使用真机测试 你还在连接好几个数据线吗?
- 计算机网络的划分以及主机号子网号的计算方法
- Lasso与Boosting
- ORA-12737 navicat连接oracle报错ORA-12737: Instant Client Light: unsupported server character set ZHS16GB