一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于软件测试中的“UiScrollable类介绍”。
UiScrollable是UiCollection的子类,它专门处理滚动时间,提供各种滚动方法。
常用滚动功能包括:向前滚动、向后滚动、快速滚动、滚动到某个对象、设置滚动方向、设置滚动次数等。
UiScrollable的定义方法如下。
UiScrollable scroll=new UiScrollable(UiSelector Object);
(1)快速滑动
介绍快速滑动前先理解下面两个概念。
l 步长:从一点到另一点使用的时间。步长越短滚动越快,反之步长越长滑动越慢。
l 扫动次数:触发滑动的次数。
快速滑动的API如表4-34所示。
案例4-28:快速滑动。
@Test
public void testFling() throws UiObjectNotFoundException
{
Util util=new Util();
util.enterAPP();
UiObject appsTab = new UiObject(new UiSelector().text("Apps"));
appsTab.click();
UiScrollable scroll = new UiScrollable(new UiSelector().scrollable(true));
scroll.setAsHorizontalList();
scroll.flingBackward();
scroll.flingForward();
}
(2)获取列表子元素
获取列表子元素的API如表4-35所示。
案例4-29:进入所需要的APP。
//进入类定义的APP内部
public void comming(String APP) throws UiObjectNotFoundException
{
UiObject allAppsButton = new UiObject(new UiSelector().description("Apps"));
allAppsButton.clickAndWaitForNewWindow();
UiObject appsTab = new UiObject(new UiSelector().text("Apps"));
appsTab.click();
UiScrollable appViews = new UiScrollable(new UiSelector().scrollable(true));
appViews.setAsHorizontalList();
if (allAppsButton.exists() && allAppsButton.isEnabled()) {
allAppsButton.click();
}
UiObject settingsApp = appViews.getChildByText(//过滚动来查找Demo4
new UiSelector().className(android.widget.TextView.class.getName()),APP);
settingsApp.clickAndWaitForNewWindow();
}
这个方法用于进入应用界面,打开所需的APP,这里的“String APP”为打开所需的APP在应用界面上的名称。注:默认滚动方向是向列表底部,到列表底部或者顶部会换个方向继续查找。同样在如果想进入应用界面而不需要打开APP可以使用下面enterAPP方法。
案例4-30:进入应用界面。
//进入APP列表页
public void enterAPP() throws UiObjectNotFoundException {
UiObject allAppsButton = new UiObject(new UiSelector().description("Apps"));
allAppsButton.clickAndWaitForNewWindow();
}
另外测试完毕需要关闭这个APP,虽然可以用 “案例4-8:关闭APP操作的应用”介绍的方法,但是对于旧版本的Android手机上不起作用的,可以使用下面方法进行操作。
案例4-31:关闭应用界面。
//删除最近使用的APP(删除测试的APP)
public void deleteAPP(Instrumentation instrumentation) throws UiObjectNotFoundException,RemoteException {
UiDevice.getInstance(instrumentation).pressRecentApps();
UiObject recentapp = new UiObject(new UiSelector().resourceId("com.android.systemui:id/dismiss_task"));
do{
recentapp.waitForExists(2000);
if(recentapp.exists()){
recentapp.click();
}
}while(recentapp.exists());
}
首先点击pressRecentApps()按钮调最新使用的APP,然后检查是否存在resourceId为"com.android.systemui:id/dismiss_task"的组件,如果存在说明有没有关闭的APP,点击这个组件,将其关闭。由于可能存在多个或者没有尚未关闭的APP,所以用do循环来操作。Coming()、enterAPP()和deleteAPP()这三个方法大部分的测试脚本都可能使用,在这里把它们封装在一个单独的类Util中,并且单独建立一个Util.java文件。内容如下。
案例4-32:通用代码的封装。
public class Util {
//删除最近使用的APP(删除测试的APP)
public void deleteAPP(Instrumentation instrumentation) throws UiObjectNotFoundException,RemoteException {
…
}
//进入类定义的APP内部
public void comming(String APP) throws UiObjectNotFoundException
{
…
}
//进入APP列表页
public void enterAPP() throws UiObjectNotFoundException {
…
}
在测试脚本中通过下面类似的方法调用。
案例4-33:调用封装的代码。
Util util=new Util();
util.enterAPP();
util.comming ("Demo4");
public static Instrumentation instrumentation;
instrumentation = InstrumentationRegistry.getInstrumentation();
util.deleteAPP(instrumentation);
(3)获取与设置最大滚动次数常量值
获取与设置最大滚动次数常量值的API如表4-36所示。
(4)滑动区域校准常量设置与获取
校准常量:指的是滑动操作坐标时(起点和终点)的偏移量,即控件上不可滑动的区域占比。滑动区域校准常量设置与获取的API如表4-37所示。
案例4-34:滑动区域校准常量设置。
UiScrollable scroll = new UiScrollable(new UiSelector.className("android.widget.ListView"));
scroll.setSwipeDeadZonePercentage(0.15);
设置listview校准常量为0.15,即距离listview顶部15%和底部15%的区域不可滑动,只有控件中部70%的区域可滑动。当校准常量设置为0.5时,控件的可滑动区域为0,滑动的动作效果将和单击的效果一样。
图4-20 可滑动区域示意图
在图4-20中黑色粗框为滑动组件,由于设置了参数为0.15的区域常量,所以当手势在上下15%的区域将不可进行滑动操作,也就是说滑动仅仅在中间件的1-15%*2=70%的区域
(5)向前与向后滚动
向前与向后滚动的API如表4-38所示。
案例4-35:自定义步长向后滑动。
UiScrollable scroll = new UiScrollable(new UiSelector.className("android.widget.ListView"));
scroll.scrollBackward(5);
(6)滚动到某个对象
滚动到某个对象的API如表4-39所示。
案例4-36:滚动到某个对象。
UiScrollable scroll=new UiScrollable(new UiSelector().className("android.widget.ListView"));
UiSelector selector=new UiSelector().text("Jian1015");
scroll.scrollIntoView(selector)
(7)设置滚动方向
l 纵向滚动:上方向为Forward,下方向为Backward()。
l 水平滚动:左为Forward,右方向为Backward()。
有一种说法,滑动属于平动,在物体上找两点连线始终平行,滚动属于平面运动,可以分解为平动和转动。举个很简单的例子吧,汽车急刹车的时候轮胎就是在滑动,正常前进的时候轮胎就是在滚动。但是作者本人还是没有搞清楚这两方面的区别。
设置滚动方向的API如表4-40所示。
案例4-37:设置滚动方向。
@Test
public void testScroll() throws UiObjectNotFoundException
{
Util util=new Util();
util.enterAPP();
UiObject appsTab = new UiObject(new UiSelector().text("Apps"));
appsTab.click();
UiScrollable scroll = new UiScrollable(new UiSelector().scrollable(true));
scroll.setAsHorizontalList();
scroll.scrollForward();
scroll.scrollBackward();
}
这个代码可以与案例4-28进行比较。