-
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%就基本上不滑动了
- 这个界面上的线条就是滑动的百分比,线条的顶部到滑动框的顶部,就是不滑动的地方,下面我们打印输出并更改不滑动区域的大小:
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 | 说明 |
---|---|---|
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();}