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

UiSelector类介绍(二):By Selector和By类介绍

作者:川石学院 日期:2022-03-30 14:05:57 点击数:

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

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

  By Selector和By类介绍

  在UiAutomator 2.0中又增加了两个新的定位对象,即By Selector和By对象。BySelector和By是UiAutomator2.0的类。BySelector类为指定搜索条件进行匹配UI元素,通UiDevice.findObject(BySelector)方式进行使用。By类是一个实用程序类,可以以简洁的方式创建BySelectors对象。主要功能是使用缩短语法,提供静态工厂方法来构造BySelectors对象。例如:将使用findObject(By.text("foo")),而不是findObject(newSelector().text("foo"))的方式来查找文本值为"foo"的UI元素。

  这些方法如下所表4-22所示。

UiSelector类介绍(二)(图2)

  案例4-17:通过By Selector和By对象定位元素。

  @Test

  public void testUiObject2() throws UiObjectNotFoundException,InterruptedException{

  UiDevice.getInstance(instrumentation).findObject(By.desc("Apps")).click();

  UiScrollable appViews = new UiScrollable(new UiSelector().scrollable(true));

  appViews.setAsHorizontalList();

  UiObject settingsApp = appViews.getChildByText(

  new UiSelector().className(android.widget.TextView.class.getName()),"Demo5");

  settingsApp.clickAndWaitForNewWindow();

  UiDevice.getInstance(instrumentation).findObject(By.res("android:id/decor_content_parent")).click()

  UiDevice.getInstance(instrumentation).findObject(By.res("android:id/decor_content_parent")).click();

  }

  UiObject类介绍

  UiObject用来代表一个组件对象,它提供一系列方法和属性来模拟在手机上的实际操作。如:文本的输入和清除、点击、长按、拖动、滑动,也可获取组件的属性、判断组件对象是否存在等。

  UiObject的定义方法如下。

  new UiObject(UiSelector Object).actionFunction;

  UiObject这节中主要介绍的是组件操作方法,即actionFunction。

  (1)点击与长按操作

  点击与长按操作的API如表4-23所示。

UiSelector类介绍(二)(图3)

  案例4-18:点击与长按操作。

  new UiObject(new UiSelector().text("QQ") ).click();//点击

  new UiObject(new UiSelector().text("QQ")).longClick();//长按

  (2)拖拽与滑动操作

  拖拽与滑动操作的API如表4-24所示。

UiSelector类介绍(二)(图4)

  案例4-19:拖拽与滑动操作。

  new UiObject(new UiSelector().text("QQ")).dragTo(560,600,40); //把QQ移动到【560,600】坐标处,40为步长

  new UiObject(new UiSelector().text("QQ")). dragTo(new UiObject(new UiSelector().text("计算器")),40); //交换QQ与计算器的位置

  UiObject obj = new UiObject(new UiSelector().className("android.view.View").instance(2)).SwipeLeft(10); //向左划屏,按着第3个(0开始,所以为2)APP左划

  (3)输入文本与清除文本

  输入文本与清除文本的API如表4-25所示。

UiSelector类介绍(二)(图5)

  案例4-20:输入文本与清除文本。

  new UiObject(new UiSelector().resourceId("com.example.demo4:id/username1")).clearTextField();

  new UiObject(new UiSelector().resourceId("com.example.demo4:id/username1")).setText(username);

  new UiObject(new UiSelector().resourceId("com.example.demo4:id/password1")).clearTextField();

  new UiObject(new UiSelector().resourceId("com.example.demo4:id/password1")).setText(password);

  为了防止原先文本框中有内容,建议在输入文本框之前先做一个清除的操作。

  案例4-21:模拟向文本框输入写错的情况。

  @Test

  public void testClear() throws UiObjectNotFoundException,InterruptedException {

  Util util = new Util();

  util.comming("Demo4");

  UiSelector enusername=new UiSelector().resourceId("com.example.demo4:id/username");

  UiObject obj1 = new UiObject(enusername);

  obj1.setText("hi");

  Thread.sleep(1000);

  obj1.clearTextField();

  Thread.sleep(1000);

  obj1.setText("hello");

  Thread.sleep(1000);

  }

  为了显示清楚,在这里加了几行线程等待方法。

  (4)获取对象的属性与属性的判断

  获取对象的属性与属性的判断的API如表4-26所示。

UiSelector类介绍(二)(图6)

  案例4-22:获取子节点数量。

  @Test

  public void testGetChild() throws UiObjectNotFoundException,InterruptedException{

  Util util = new Util();

  util.comming("Demo5");

  UiObject obj = new UiObject(new UiSelector().resourceId("com.example.demo5:id/root"));

  int count =obj.getChildCount();

  Assert.assertEquals(1,count);

  for(int i=0;i<count;i++){< p="">

  UiObject child = obj.getChild(new UiSelector().index(i));

  Assert.assertEquals(child.getClassName(),"android.widget.ImageView");

  }

  }

  (5)获取父类与子类节点

  获取父类与子类节点的API如表4-27所示。

UiSelector类介绍(二)(图7)

  案例4-23:获取父类与子类节点。

  String actualValue = passcodePolicyName.getFromParent(new UiSelector().className("android.widget.TextView").index(1)).getText();

  if(actualValue.equals(expectedValue)) {

  System.out.println(policyName + " check: Pass.");

  } else {

  System.out.println(policyName + " check: Failed.");

  }

  (6)属性判断

  属性判断的API如表4-28所示。

UiSelector类介绍(二)(图8)

  案例4-24:判断元素是否可以checked。

  if(inputTextObject.isChecked()){

  inputTextObject.click(); //如果开关是开,则点击关闭。

  }

  (7)手势操作

  手势操作包括。

  l 两指平移。

  l 多指平移。

  l 两指合拢。

  l 两指扩张。

  手势操作的API如表4-29所示。

UiSelector类介绍(二)(图9)

  案例4-25:手势操作。

  UiObject framObject = new UiObject(new UiSelector().className("android.widget.FrameLayout"));

  PointerCoords p = new PointerCoords();

  p.x = 100;

  p.y= 100;

  p.pressure = 1;

  p.size = 1;

  PointerCoords p1 = new PointerCoords();

  p1.x = 300;

  p1.y= 300;

  p1.pressure = 1;

  p1.size = 1;

  PointerCoords p2 = new PointerCoords();

  p2.x = 200;

  p2.y=200;

  p2.pressure = 1;

  p2.size = 1;

  frameObject.performMultiPointerGesture(p,p1,p2);

  (7)判断对象是否存在

  判断对象是否存在API如表4-30所示。

UiSelector类介绍(二)(图10)

  案例4-26:判断对象是否存在。

  UiObject obj = new UiObject(new UiSelector().resourceId("com.example.demo4:id/welcomeinfo"));

  assertNotNull(obj);


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