Tip:
1.掃動過程中如果界面停留在滾動條的中間部分會先回到起點再進行滾動
2.掃動過程中設置的步長長短決定划過內容的多少,步長越長滑過的內容就越少;步長越短划過的內容就越長
一、UiScrollable 類介紹
1.UiScrollable類說明
1)UiScrollable是UiCollection的子類,可以使用UiBoject和UiCollection的所有API
2)UiScrollable是專門處理滾動時間的類,提供各種滾動方法
二、快速滾動
1.滾動相關概念
1)步長:步長越長,滑動越慢
2)掃動:也就是滑動,掃動幾次就是滑動幾次
2.快速滾動相關API
| 返回值 |
API |
說明 |
| boolean | flingBackward() | 以步長為5(默認值)快速向上(后)滑動 |
| boolean | flingForward() | 以步長為5(默認值)快速向下(前)滑動 |
| boolean | flingToBeginning(int maxSwipes) | 自定義掃動次數以步長為5(默認值)快速滑動到開始 |
| boolean | flingTuEnd(int maxSwipes) | 自定義掃動次數以步長為5(默認值)快速滑動到結束 |
例如:
public void testDemo1() throws UiObjectNotFoundException{ UiScrollable scroll=new UiScrollable(new UiSelector().className("android.widget.ListView")); //以步長為5(默認值)快速向下(前)滑動 scroll.flingForward(); sleep(1000); //以步長為5(默認值)快速向上(后)滑動 scroll.flingBackward(); sleep(1000); //自定義掃動次數(5)以步長為5(默認值)快速滑動到結束 scroll.flingToEnd(5); sleep(1000); //自定義掃動次數(4)以步長為5(默認值)快速滑動到開始 scroll.flingToBeginning(4); sleep(1000); }
三、獲取列表子元素
| 返回值 |
API |
說明 |
| UiObject | getChildByDescription(UiSelector childPattern,String text,boolean allowScrollSearch) | 是否允許滾動查找獲取具備UiSelector條件元素集合后再以文本描述條件查找對象 |
| UiObject | getChildByDescription(UiSelector childOattern,String text) | 默認獲取具備UiSelector條件的元素集合后再以文本描述條件查找對象 |
| UiObject | getChildByInstance(UiSelector childPattern,int instance) | 獲取具備UiSelector條件的子集,再從子集中按照實例篩選想要的元素(不滾動) |
| UiObject | getChildByText(UiSelector childPattern,String text,boolean allowScrollSearch) | 是否允許滾動獲取具備UiSelector條件的元素集合后再以文本條件查查找對象 |
| UiObject | getChildByText(UiSelector childPattern,String text) | 默認滾動獲取具備UiSelector條件元素集合后再以文本條件的查找對象 |
例如:
public void testDemo2() throws UiObjectNotFoundException{ //getChildByText() //1.找到集合 UiScrollable scroll=new UiScrollable(new UiSelector().className("android.widget.ListView")); //2.使用默認滾動獲取並點擊對象(class.text定位) UiObject Jian1016=scroll.getChildByText(new UiSelector().className("android.view.View"), "Jian1016"); Jian1016.click(); UiDevice.getInstance().pressBack(); //3.允許滾動獲取並點擊對象(class.text定位) UiObject Jian1017=scroll.getChildByText(new UiSelector().className("android.view.View"), "Jian1017",true); Jian1017.click(); UiDevice.getInstance().pressBack(); //4.不允許滾動獲取並點擊對象(class.text定位);當不允許滾動查找對象的時候若當前界面沒有則報錯 UiObject Jian1020=scroll.getChildByText(new UiSelector().className("android.view.View"), "Jian1020",false); Jian1020.click(); //getChildByInstance() //需要注意的是他沒有滾動查找選項,他只會按照當前界面顯示instance位置情況進行查找,如果超出當前界面instance數量則報錯 UiObject Jian1=scroll.getChildByInstance(new UiSelector().className("android.view.View"), 1); Jian1.click(); }
四、獲取與設置最大滾動次數常量值
| 返回值 |
API |
說明 |
| int | getMaxSearchSwipes() | 獲取執行搜索滑動過程中的最大滑動次數,默認常量為30 (若30次找不到則報錯) |
| UiScrollable | setMaxSearchSwipes(int swipes) | 設置最大可掃動次數(超出設置次數還未搜索到則報錯) |
例如:
public void testDemo3() throws UiObjectNotFoundException{ //getMaxSearchSwipes() //1.找到聯系人列表集合 UiScrollable scroll=new UiScrollable(new UiSelector().className("android.widget.ListView")); //2.找到以text為條件進行查找 UiObject text=new UiObject(new UiSelector().text("Jian1001")); //3.滾動並查找textview(默認滾動30次) scroll.scrollIntoView(text); //5.點擊 text.click(); //6.輸出getMaxSearchSwipes()的默認滾動次數 System.out.println(scroll.getMaxSearchSwipes()); //setMaxSearchSwipes(int swipes) //1.找到聯系人列表集合 UiScrollable scroll1=new UiScrollable(new UiSelector().className("android.widget.ListView")); //2.找到以text為條件進行查找 UiObject text1=new UiObject(new UiSelector().text("Jian1001")); //3.設置最大滾動次數為3 scroll1.setMaxSearchSwipes(3); //4.滾動並查找對象 scroll1.scrollIntoView(text1); //5.點擊 text1.click(); }
五、滑動區域校准常量設置與獲取
1.校准概念
校准常量指滑動操作坐標時候的偏移量,用來取偏移比例
2.相關API
| 返回值 |
API |
說明 |
| double | getSwipeDeadZonePercentage() | 默認常量值為0.1也就是10%區域不滑動 |
| UiScrollable | setSwieDeadZonePercentage(double swipeDeadZonePercentage) | 設置一個不見的大小,在滑動時,視為無接觸區的百分比(也就是不滑動區域的百分比) |
例如:
public void testDemo4() throws UiObjectNotFoundException{ //1.找到聯系人列表集合 UiScrollable scroll=new UiScrollable(new UiSelector().className("android.widget.ListView")); //2.聲明變量dead double dead=scroll.getSwipeDeadZonePercentage(); //3.輸出變量默認值(getSwipeDeadZonePercentage()的默認值) System.out.println(dead); //4.自定義(不滑動區域為20%)(setSwipeDeadZonePercentage()) scroll.setSwipeDeadZonePercentage(0.2); //如果加到0.5(50%)則不進行滑動變成點擊操作了 //5.進行滑動操作 scroll.scrollForward(); }
六、向前與向后滾動
| 返回值 |
API |
說明 |
| boolean | scrollBackward(int steps) | 自定義步長向后(上)滾動 |
| boolean | scrollBackward() | 以默認步長55向后(上)滾動 |
| boolean | scrollForward() | 以默認步長55向前(下)滾動 |
| boolean | scrollForward(int steps) | 自定義步長向前(下)滾動 |
例如:
public void testDemo5() throws UiObjectNotFoundException{ //1.找到聯系人列表集合 UiScrollable scroll=new UiScrollable(new UiSelector().className("android.widget.ListView")); scroll.scrollForward();//默認向前(下)滾動 scroll.scrollForward(20);//自定義步長(20)向前(下)滾動 scroll.scrollBackward();//默認向后(上)滾動 scroll.scrollBackward(20);//自定義步長(20)向后(上)滾動 }
七、滾動到某個對象
1.相關API
| 返回值 |
API |
說明 |
| boolean | scrollIntoView(UiSelector selector) | 滾動到條件元素所在位置,並且盡量讓其居於屏幕中央 |
| boolean | scrollIntoView(UiObject obj) | 滾動到對象所在位置,並且盡量讓其居於屏幕中央 |
| boolean | scrollTextIntoView(String text) | 滾動到文本對象所在位置,並且盡量讓其居於屏幕中央 |
| boolean | scrollDescriptionIntoView(String text) | 滾動到描述所在位置,並且盡量讓其居於屏幕中央 |
| boolean | scrollToBeginning(int maxSwipes) | 自定義掃動次數滾動到開始位置(使用默認步長) |
| boolean | scrollToBeginning(int maxSwipes,int steps) | 自定義掃動次數與步長滾動到開始位置 |
| boolean | scrollToEnd(int maxSwipes,int steps) | 自定義掃動次數與步長滾動到結束位置 |
| boolean | scrollToEnd(int maxSwipes) | 自定義掃動次數滾動到結束位置(使用默認步長) |
例如:
public void testDemo6() throws UiObjectNotFoundException{ //scrollIntoView(UiSelector selector) //1.找到聯系人列表集合 UiScrollable scroll=new UiScrollable(new UiSelector().className("android.widget.ListView")); //2.使用UiSelector條件定位對象 UiSelector selector=new UiSelector().text("Jian1015"); //3.滾動操作 scroll.scrollIntoView(selector); //scrollIntoView(UiObject obj) //1.找到聯系人列表集合 UiScrollable scroll1=new UiScrollable(new UiSelector().className("android.widget.ListView")); //2.使用UiObject條件定位對象 UiObject obj=new UiObject(new UiSelector().text("Jian1100")); //3.滾動操作 scroll1.scrollIntoView(obj); //scrollTextIntoView(String text) //1.找到聯系人列表集合 UiScrollable scroll2=new UiScrollable(new UiSelector().className("android.widget.ListView")); //2.通過文本進行滾動查找操作 scroll2.scrollTextIntoView("Jian1100"); //scrollDescriptionIntoView(String text) //1.找到聯系人列表集合 UiScrollable scroll3=new UiScrollable(new UiSelector().className("android.widget.ListView")); //2.通過描述進行滾動查找操作 scroll3.scrollDescriptionIntoView("Jian1011的快速聯系人照片"); //1.找到聯系人列表集合 UiScrollable scroll4=new UiScrollable(new UiSelector().className("android.widget.ListView")); //2.自定義掃動次數滾動到開始位置(使用默認步長) scroll4.scrollToBeginning(5); //3.自定義掃動次數滾動到結束位置(使用默認步長) scroll4.scrollToEnd(5); //4.自定義掃動次數與步長滾動到開始位置 scroll4.scrollToBeginning(5, 10); //5.自定義掃動次數與步長滾動到結束位置 scroll4.scrollToEnd(5, 10); }
八、設置滾動方向
1.相關API
| 返回值 |
API |
說明 |
| UiScrollable | setAsHorizontalList() | 設置滾動方向,設置為水平滾動 |
| UiScrollable | setAsVerticalList() | 設置滾動方向,設置為縱向滾動 |
例如:
public void testDemo7() throws UiObjectNotFoundException{ //1.找到聯系人列表集合(與前面滾動例子中的className不同) UiScrollable scroll4=new UiScrollable(new UiSelector().className("android.widget.FrameLayout")); //2.設置為水平滾動 scroll4.setAsHorizontalList(); //3.前(右)后(左)各滾動一次 scroll4.scrollForward(); sleep(2000); scroll4.scrollBackward(); sleep(2000); //4.設置為縱向滾動 scroll4.setAsVerticalList(); //5.前后各滾動一次 scroll4.scrollForward(); sleep(2000); scroll4.scrollBackward(); sleep(2000); }
