Android基于uiautomator测试(七) --UiScrollable使用

    xiaoxiao2025-04-15  44

    UiScrollable类是UiCollection的子类

    UiCollection是UiObject的子类

    UiScrollable专门处理滚动事件,提供各种滚动方法

    滚动方法向前滚动向后滚动快速滚动滚动到某个对象设置滚动方向设置滚动次数

    滚动的相关概念:

    步长:从一个点滑到另一个点所用的时间扫动次数:滚动一个列表,划到某一页需要扫几次才能到具体某一页

    快速滚动:

    public void testScroller() throws UiObjectNotFoundException { UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); UiScrollable uiScrollable = new UiScrollable(new UiSelector().className("android.widget.TextView")); //向前滑动会向上走 uiScrollable.flingForward(); //向下滑动会向下走 uiScrollable.flingBackward(); //分别扫动2次滚到开头和结尾,默认步长为5,到底到顶就会自动结束 uiScrollable.flingToEnd(2); uiScrollable.flingToBeginning(2); }

    获取列表子元素: 继承UiCollection public void testScroll() throws UiObjectNotFoundException { UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); UiScrollable uiScrollable = new UiScrollable(new UiSelector().className("android.widget.AbsListView")); //true的话,如果第一页没有,则滚动到第二页, false的话不进行自动滚动, 去掉该参数默认实滚动查找 //getChildBuInstance不自动换页 UiObject l2 = uiScrollable.getChildByText(new UiSelector().className("android.widget.TextView"),"2", true); l2.click();} ​ ​

    获取与设置最大滚动次数常量值 public void testSwipCount() throws UiObjectNotFoundException { UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); UiScrollable uiScrollable = new UiScrollable(new UiSelector().className("android.widget.AbsListView")); UiObject textView = new UiObject(new UiSelector().text("6")); //滚动到该对象,默认滚动三十次,若找不到则抛出异常//先在当前页面找,若没有则回到原点,在从原点往回进行查找 System.out.println("默认最大滚动次数"+uiScrollable.getMaxSearchSwipes()); //控制台输出:默认最大滚动次数30 uiScrollable.scrollIntoView(textView); uiScrollable.click();} ​ 滑动区域校准常量设置与获取: 校准常量是指滑动操作坐标时的偏移量,用来取偏移比例。获取与设置最大滚动次数常量值相关的API 返回值API说明doublegetSwipeDeadZonePercentage()默认常量值为 0.1, 10%UiScrollablesetSwipeDeadZonePercentage(double swipeDeadZonePercentage)设置一个部件的大小,在滑动的时候为无接触部分的百分比 无接触表示的是被扣除的区域: 比如:这个列表的上面10%的区域要被扣除,20%就再减一点,50%就基本上不滑动了 这个界面上的线条就是滑动的百分比,线条的顶部到滑动框的顶部,就是不滑动的地方,下面我们打印输出并更改不滑动区域的大小: public void testDeadZero() throws UiObjectNotFoundException { UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); UiScrollable uiScrollable = new UiScrollable(new UiSelector().className("android.widget.AbsListView")); double dead = uiScrollable.getSwipeDeadZonePercentage(); System.out.println(dead); //设置为30% uiScrollable.setSwipeDeadZonePercentage(0.3); uiScrollable.scrollForward(); }

    * 当设置30%的时候,滑动区域越来越窄,当设置为50%的时候就会变成点击 ​

    向前与向后滚动: 返回值API说明booleanscrollBackward(int steps)自定义步长向后滑动booleanscrollBackward()以默认步长55向后滑动booleanscrollForward()以默认步长55向前滑动booleanscrollForward(int steps)自定义步长向前滑动 public void testScrollForBack() throws UiObjectNotFoundException { UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); UiScrollable uiScrollable = new UiScrollable(new UiSelector().className("android.widget.AbsListView")); //默认以55步长进行滑动 // uiScrollable.setSwipeDeadZonePercentage(0.1); // uiScrollable.scrollForward(); //自行定义以5来滑动,速度越来越快就会变成点击比如设置为1,速度越来越慢会变成长按比如5000 uiScrollable.scrollForward(5); //往后滚同理 uiScrollable.scrollBackward(); uiScrollable.scrollBackward(5); } 滚动到某一个对象: public void testScrollIntoView() throws UiObjectNotFoundException { UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); UiScrollable uiScrollable = new UiScrollable(new UiSelector().className("android.widget.AbsListView")); UiSelector uiSelector = new UiSelector().text("w"); UiObject uiObject = new UiObject(uiSelector); // uiScrollable.scrollIntoView(uiSelector); // uiScrollable.scrollIntoView(uiObject); // uiObject.click(); // 通过文字 // uiScrollable.scrollTextIntoView("w"); // 通过描述,可以通过UiAutoViewer进行查看描述 // uiScrollable.scrollDescriptionIntoView("") // 快速滚动到开始 uiScrollable.scrollToBeginning(50,5); // 快速滚动到结尾 uiScrollable.scrollToEnd(50, 5); }

    设置屏幕滚动方向: 返回值API说明UiScrollablesetAsHorizontalList()设置滚动方向设置为水平方向UiScrollablesetAsVerticalList()设置滚动方向设置为纵向滚动 public void testScrollOriention() throws UiObjectNotFoundException { UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); UiScrollable uiScrollable = new UiScrollable(new UiSelector().className("android.view.ViewGroup")); //设置水平滚动 uiScrollable.setAsHorizontalList(); //往回滚一次 uiScrollable.scrollBackward(); uiScrollable.scrollForward(); uiDevice.pressHome(); UiObject uiObject = new UiObject(new UiSelector().text("联系人")); uiObject.click(); uiScrollable.setAsVerticalList(); uiScrollable.scrollForward(); uiScrollable.scrollBackward();}

    最新回复(0)