使用 uiAutomatorViewer 增强 Android 测试

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

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

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

打开 uiAutomatorViewer

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

  1. 确保已安装 Android SDK。

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

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

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

打开 uiAutomatorViewer

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

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

返回页首

分析应用程序的用户界面

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

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

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

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

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

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

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

支持的 uiAutomatorViewer 属性

使用 OpenText Functional Testing 时,有如下相关的 uiAutomatorViewer 属性:

属性 描述
package

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

text

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

content-desc

对象的 accessibilityid 属性。

bounds

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

scrollable

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

class

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

示例:

Android class: OpenText Functional Testing Lab class

android.widget.TextView: Label

android.widget.ImageButton: ImageButton

返回页首

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

并非所有对象在录制会话期间都可录制。您可能需要手动将一些对象添加到对象存储库中,例如 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. OpenText Functional Testing 的“录制和运行设置”中,请确保未选中“安装”和“重新启动”复选框
  11. 运行您在脚本编辑器中输入的循环语句以检索 ROProperty 值。
  12. OpenText Functional Testing 的“输出”窗格中查看包含值的标签的索引。

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

    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 测试对象

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

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

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

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

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

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

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

      选项 描述
      App
      名称

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

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

      测试对象详细信息

      描述属性

      删除 identifier 之外的所有属性。

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

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

返回页首

另请参见: