川石教育
全国咨询热线:136-9172-9932
  1. 首页 > 资讯与干货 > IT资讯

UiSelector类介绍(四):UiScrollable类介绍

作者:川石学院 日期:2022-04-11 17:32:46 点击数:

一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于软件测试中的“UiScrollable类介绍”。

UiAutomator API详解:UiSelector类介绍(一)(图1)

  UiScrollable是UiCollection的子类,它专门处理滚动时间,提供各种滚动方法。

  常用滚动功能包括:向前滚动、向后滚动、快速滚动、滚动到某个对象、设置滚动方向、设置滚动次数等。

  UiScrollable的定义方法如下。

  UiScrollable scroll=new UiScrollable(UiSelector Object);

  (1)快速滑动

  介绍快速滑动前先理解下面两个概念。

  l 步长:从一点到另一点使用的时间。步长越短滚动越快,反之步长越长滑动越慢。

  l 扫动次数:触发滑动的次数。

  快速滑动的API如表4-34所示。

UiSelector类介绍(四):UiScrollable类介绍(图2)

  案例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所示。

UiSelector类介绍(四):UiScrollable类介绍(图3)

  案例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所示。

UiSelector类介绍(四):UiScrollable类介绍(图4)

  (4)滑动区域校准常量设置与获取

  校准常量:指的是滑动操作坐标时(起点和终点)的偏移量,即控件上不可滑动的区域占比。滑动区域校准常量设置与获取的API如表4-37所示。

UiSelector类介绍(四):UiScrollable类介绍(图5)

  案例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,滑动的动作效果将和单击的效果一样。

UiSelector类介绍(四):UiScrollable类介绍(图6)

图4-20 可滑动区域示意图

  在图4-20中黑色粗框为滑动组件,由于设置了参数为0.15的区域常量,所以当手势在上下15%的区域将不可进行滑动操作,也就是说滑动仅仅在中间件的1-15%*2=70%的区域

  (5)向前与向后滚动

  向前与向后滚动的API如表4-38所示。

UiSelector类介绍(四):UiScrollable类介绍(图7)

  案例4-35:自定义步长向后滑动。

  UiScrollable scroll = new UiScrollable(new UiSelector.className("android.widget.ListView"));

  scroll.scrollBackward(5);

  (6)滚动到某个对象

  滚动到某个对象的API如表4-39所示。

UiSelector类介绍(四):UiScrollable类介绍(图8)

  案例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所示。

UiSelector类介绍(四):UiScrollable类介绍(图9)

  案例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进行比较。


相关文章
  • 亚马逊运营成功转行软件测试,薪资13K表示很满意!2022-04-11 17:32:46
  • 西安川石的兰朋友喊你来当他的学弟学妹啦!2022-04-11 17:32:46
  • 国外的月亮也不一定比国内测试猿的年薪美~2022-04-11 17:32:46
  • 建筑工程专业朱同学成功转行为软件测试人!2022-04-11 17:32:46
  • 财务管理专业转行软件测试月薪甩会计几条街!2022-04-11 17:32:46
  • 只有技术沉淀才能成功上岸,深圳就业薪资13K!2022-04-11 17:32:46
  • 薪资11K!实现自我价值,从掌握一门IT技术开始...2022-04-11 17:32:46
  • 文科生转行软件测试照样拿下高薪15K!2022-04-11 17:32:46
  • 恭喜罗同学喜提19.5K,成功入行软件测试!2022-04-11 17:32:46
  • 毕业1年,迷茫的他最终选择转行软件测试2022-04-11 17:32:46