使用 uiAutomatorViewer 增强 Android 测试

本主题描述如何使用 uiAutomatorViewer 替代 UFT One 的对象侦测器,以检测应用程序中元素的运行时属性。

这些属性可以帮助您为移动测试对象创建唯一的描述。

uiAutomatorViewer 是 Android SDK 工具,可扫描和分析 Android 应用程序的 GUI 组件。

打开 uiAutomatorViewer

在使用 uiAutomatorViewer 分析您的应用程序之前,请执行以下操作:

  1. 确保已安装 Android SDK。

    Android SDK 版本应与测试设备上的 Android 版本相同或更高。

    然后,将 ANDROID_HOME 系统变量设置为该计算机上安装 Android SDK 的路径。

  2. 将 Android 设备连接到您的计算机。有关详细信息,请参阅 Digital Lab 帮助

打开 uiAutomatorViewer

运行 <Android SDK 安装文件夹>\tools\bin\uiautomator.bat 文件。

接下来,分析应用程序的用户界面

返回页首

分析应用程序的用户界面

通过 uiAutomatorViewer,使用以下步骤分析应用程序的用户界面。

  1. 打开 uiAutomatorViewer 并确保清晰显示了要扫描的视图。

  2. 为您的应用程序用户界面创建屏幕快照。

  3. 在 uiAutomatorViewer 中,单击“设备屏幕快照” 按钮。

    如果连接了多个设备,请从显示的列表中选择相关设备。

  4. 查看结果以显示视图的快照和测试对象树,包括视图中识别的所有测试对象。

    突出显示树中的一个节点,以显示对象的详细信息和属性。

支持的 uiAutomatorViewer 属性

使用 UFT One 时,有如下相关的 uiAutomatorViewer 属性:

package

视图中当前显示的应用程序的标识符。映射到 App 测试对象的 identifier 属性。

text

对象的 text 属性 (通常可用于 TextView 对象)。

content-desc

对象的 accessibilityid 属性。

bounds

应用程序中对象的边界矩形。

scrollable

指定控件是否为可滚动视图。

class

映射到测试对象的 class 属性。

示例:

Android class: Digital Lab class

android.widget.TextView: Label

android.widget.ImageButton: ImageButton

返回页首

将不可录制的对象添加到对象存储库

并非所有对象在 UFT One 录制会话期间都可以录制。您可能需要手动将一些对象添加到对象存储库中,例如 TextViewImage

提示: 不是您所需要的吗? 另请参阅使用编程描述,而不是测试对象

  1. 扫描应用程序中包含要添加到对象存储库中的对象的视图。
  2. 对于要添加的每个对象,请注意以下属性的值:

  3. 在“对象存储库”窗口中,选择“测试对象”根节点,然后创建一个新的子测试对象 (“对象”>“定义新测试对象”)。
  4. 在“定义新测试对象”对话框中,将 Class 定义为 Mobile View,并为该对象指定一个唯一的名称。
  5. 在“测试对象详细信息”>“描述属性”下,删除 classtextaccessibilityid 之外的所有属性。
  6. 修改剩余属性的值,如下所示:

    class

    输入您从 uiAutomatorViewer class 属性记录的值。

    accessibilityid

    输入您从 uiAutomatorViewer content-desc 属性记录的值 (如有)。

    text

    输入您从 uiAutomatorViewer text 属性记录的值 (如有)。

    index

    (可选)。如果:

    • content-desc 属性值为空;且
    • text 属性值为空或是动态的 (表示它将根据当前上下文而变化),

    在当前视图中从 0 开始从上到下对该类型的对象进行计数,以创建和设置 index 属性值。

    可能需要尝试几次才能正确设置 index 属性值。

  7. 将新创建的测试对象拖到相关的 App 测试对象下。
  8. 在要测试的应用程序中,将相关页面放在前台。
  9. 在脚本编辑器中,输入以下循环语句:

    For i = 0 To X Step 1 'X should be the estimated number of labels on the screen'
    	print i & "- " & Device.App.MobileView("class:=Label", _
    		"index:=" & i)  _   
    	.GetROProperty("text")
    		Next																		
  10. UFT One 的“录制和运行设置”中,请确保未选中“安装”和“重新启动”复选框
  11. 运行您在脚本编辑器中输入的循环语句以检索 ROProperty 值。
  12. UFT One 的“输出”窗格中查看包含值的标签的索引。

    通过向测试添加类似于以下示例的步骤,使用此索引来标识测试对象。

    currentQuote = Device.App.MobileView("class:=Label", "index:=N") _
    	.GetROProperty("text")

返回页首

使用编程描述,而不是测试对象

以下代码行是您可以在步骤中代替测试对象使用的编程描述的示例。

不使用对象存储库的测试对象

Device("D").App("A").MobileView("class:=Label", "accessibilityid:=sum").Tap

提示: 不是您所需要的吗? 请参阅将不可录制的对象添加到对象存储库

不使用 MobileView 测试对象进行滚动

Device("D").App("A").MobileView("isscrollable:=True","index:=2").ScrollOnePage "forward"

返回页首

向对象存储库添加 App 测试对象

有时,您可能需要在 Digital Lab 服务器无法加载的应用程序上运行步骤,例如系统应用程序。

在这种情况下,您可以将应用程序测试对象添加到对象存储库中,用来表示无法加载的应用程序。

创建应用程序测试对象后,可以在其下添加移动测试对象,并在测试中使用这些测试对象。

  1. 使用 uiAutomatorViewer 扫描包含您的应用程序的视图。

    有关详细信息,请参阅分析应用程序的用户界面

  2. 记录 package 属性的值。
  3. UFT One 中,创建一个测试对象来表示应用程序。

    1. 在“对象存储库”窗口中,选择相关的“设备”测试对象,然后创建一个新的子测试对象 (“对象”>“定义新测试对象”)。
    2. 在“定义新测试对象”对话框中,为子测试对象分配以下唯一的描述属性。

      App
      名称

      为测试对象选择唯一名称。

      最佳实践: 分配一个描述性名称,以指示应用程序的名称或用途。

      测试对象详细信息

      描述属性

      删除 identifier 之外的所有属性。

      对于 identifier,输入您从 uiAutomatorViewer package 属性记录的值。

    3. 单击 打开“添加属性”对话框,然后单击 打开“新建属性”对话框。
    4. 在“新建属性”对话框中,添加值为 TruesystemApp 属性。

返回页首

另请参见: