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

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

作者:川石学院 日期:2022-03-15 11:30:50 点击数:

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

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

  UiSelector可通过控件的各种属性与节点关系定位组件。正如本卷开始说的,一个功能测试程序主要包括组件的定位、组件的操作和断言,在这里UiSelector对象作用就是定位组件。

  UiSelector的定义方法如下。

  UiSelector uiSelector = new UiSelector().定位方法

  关于定位方法将会在后面会进行介绍。

  下面列出Android常用的控件类型。

  l TextView 文本框。

  l EditView 编辑框。

  l Button 按钮。

  l RadioButton 单选按钮。

  l CheckBox 复选框。

  l ToggleButton 状态开关按钮。

  l Switch 开关。

  l SeekBar 拖动条。

  l AnalogClock DigitalClock 时钟。

  l Chronometer 计时器。

  l ListView 列表视图。

  l GridView 网格视图。

  l ProgressBar 进度条。

  l RatingBra 星际评分条。

  l Toast 提示信息框。

  l ScrollView 滚动视图。

  表4-13列出Android组件所有的属性,这对于定位组件是十分重要的。

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

  对于UiSelector定位元素主要分为以下四种情况进行匹配。

  l 默认:完全匹配。

  l Contains:包含匹配,也可以叫模糊匹配。

  l StartsWith:起始匹配,匹配开始的字符串。

  l Matches:正则匹配(支持正则表达式)。

  另外介绍匹配之前还要介绍了解一下四个概念,如果开发过简单的Android开发,了解layout.xml结构就更好理解了。

  •   l 父 Patent:父控件

  •   l 子 Children:子控件

  •   l 同胞 Sibling:同胞控件

  •   l 先辈 Ancestor:父控件的上一级、上上级...

  •   l 后代 Descendant:子控件的下一级、下下级...

  在如下的layout.xml文件中。

  xmlns:tools="http://schemas.android.com/tools"

  android:layout_width="match_parent"

  android:layout_height="match_parent"

  android:paddingBottom="@dimen/activity_vertical_margin"

  android:paddingLeft="@dimen/activity_horizontal_margin"

  android:paddingRight="@dimen/activity_horizontal_margin"

  android:paddingTop="@dimen/activity_vertical_margin"

  android:id="@+id/root"

  android:onClick="rootClick"

  tools:context="com.example.demo5.MainActivity" >

  android:id="@+id/imageView1"

  android:layout_width="match_parent"

  android:layout_height="193dp"

  android:src="@drawable/pic1"

  android:visibility="invisible" />

  android:id="@+id/imageView2"

  android:layout_width="match_parent"

  android:layout_height="225dp"

  android:src="@drawable/pic2"

  android:visibility="invisible" />

  两个ImageView是FrameLayout的子控件,FrameLayout是两个ImageView的父控件,两个ImageView互为同胞控件。这样也应该理解先辈和后代了。

  由于产品的代码往往不是开发人员书写的,所以自动化测试人员不太了解程序中的属性值,而这又往往是定位元素很重要的信息,为此Android SDK专门提供了一个工具:UiAutomatorViewer,它在%ANDROID_HOME%\tools\bin\uiautomatorviewer.bat。

  打开呈现如图4-17界面。

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

图4-17 UiAutomatorViewer初始化界面

  点击桌面第二个图标,虚拟设备上的界面将会同步到UiAutomatorViewer工具中,如图4-18所示。

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

图4-18 UiAutomatorViewer同步界面

  在同步界面中点击相应组件,组件的详细信息会在右边显示出来。

  下面来介绍UiSelector对象定位元素的方法。

  (1)通过文本(Text)属性来定位

  通过文本(Text)属性来定位的API如表4-14所示。

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

  这里的参数对应于UiAutomatorViewer工具中的text内容(注意:不是所有的属性都有值的,如果没有只能用其他方法来定位)。

  案例4-9:通过文本(Text)属性来定位。

  UiSelector uiSelector = new UiSelector().text("天气");//查找文本为“天气”的所有组件

  (2)通过描述(Description)属性来定位

  通过描述(Description)属性来定位的API如表4-15所示。

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

  这里的参数对应于UiAutomatorViewer工具中的content-desc内容。

  案例4-10:通过描述(Description)属性来定位。

  UiSelector uiSelector = new UiSelector().descriptionContains("天气");//查找描述包含“天气”的所有组件

  (3)通过类名(ClassName)属性来定位

  通过类名(ClassName)属性来定位的API如表4-16所示。

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

  这里的参数对应于UiAutomatorViewer工具中的class内容。

  案例4-11:通过类名(ClassName)属性来定位。

  UiSelector x=new UiSelector().className("android.widget.CheckBox");

  UiSelector wx=new UiSelector().className("android.widget.TextView").text"微信");

  由第二个语句可以看到,可以同时通过两种方式进行定位clasNames和text,是与的关系。这条语句是className为“android.widget.TextView”且text为“微信”。

  (4)通过包名(PackageName)属性来定位

  通过包名(PackageName)属性来定位的API如表4-17所示。

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

  这里的参数对应于UiAutomatorViewer工具中的package内容。

  案例4-12:通过包名(PackageName)属性来定位。

  UiSelector x=new UiSelector().packageName("com.example.demo4");

  (5)通过索引与实例(index&instance)属性来定位

  对于同一个text、Description、ClassName或者PackageName可能有多个组件,为了找到所需要的元素,可以通过索引与实例来定位。通过索引与实例(index&instance)属性来定位的API如表4-18所示。

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

  这里的参数对应于UiAutomatorViewer工具中的index内容。

  案例4-13:通过索引与实例(index&instance)属性来定位。

  UiSelector uiSelector = new UiSelector().className("android.widget.ImagView").index(1);//查找ImageView在同级中下标为1的组件

  UiSelector uiSelector = new UiSelector().text("天气").instance(2);//查找界面中文本为“天气”的第3个组件

  注意:instance(n),为符合条件的第n+1个元素。

  (6)通过特殊属性来定位

  通过特殊属性来定位的API如表4-19所示。

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

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

  案例4-14:通过特殊属性来定位。

  UiSelector x=new UiSelector().fousable(true).className("android.widget.CheckBox");

  定位ClassName为“android.widget.CheckBox”且当前聚焦的组件。

  (7)通过资源ID来定位

  通过资源ID来定位的API如表4-20所示。

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

  这里的参数对应于UiAutomatorViewer工具中的resurce-id内容。

  案例4-15:通过资源ID来定位。

  UiSelector x=new UiSelector().resourceId("com.example.demo4:id/username1");

  (8)通过节点来定位

  通过节点来定位的API如表4-21所示。

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

  案例4-16:通过节点来定位。

  UiObject uio=new UiObject(new UiSelector().text("Cache junk").fromParent(new UiSelector().className("android.widget.CheckBox")));

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

图4-19 通过节点来定位

  这个例子如图4-19所示,得到text为“Cache junk”的className为“android.widget.CheckBox”的父亲组件,即text为“Cache junk”右边的复选框。


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