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

  • 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 说明
double getSwipeDeadZonePercentage() 默认常量值为 0.1, 10%
UiScrollable setSwipeDeadZonePercentage(double swipeDeadZonePercentage) 设置一个部件的大小,在滑动的时候为无接触部分的百分比
  • 无接触表示的是被扣除的区域:
    • 比如:这个列表的上面10%的区域要被扣除,20%就再减一点,50%就基本上不滑动了
  • 这个界面上的线条就是滑动的百分比,线条的顶部到滑动框的顶部,就是不滑动的地方,下面我们打印输出并更改不滑动区域的大小:
    78bbcaed712dd6c66c81fd252c9069ba.png
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();
 }

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

  • 向前与向后滚动:
返回值 API 说明
boolean scrollBackward(int steps) 自定义步长向后滑动
boolean scrollBackward() 以默认步长55向后滑动
boolean scrollForward() 以默认步长55向前滑动
boolean scrollForward(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 说明
UiScrollable setAsHorizontalList() 设置滚动方向设置为水平方向
UiScrollable setAsVerticalList() 设置滚动方向设置为纵向滚动
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();}

在这里插入图片描述

©️2020 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值