UIA Pro 插件最佳实践

相关项: GUI 测试和组件

本主题介绍使用 UIA Pro 插件与 UI 元素交互的最佳实践和准则。

选择最适合您的步骤的方法

在 UIA Pro 中,多种方法通常可以达到相同的结果。然而,每种方法的可用性和有效性取决于您正在测试的应用程序及其支持的特定 UI Automation 模式。选择合适的方法需要了解目标应用程序公开的 UI 结构和功能。并非所有方法都始终受支持。

在决定使用哪些方法时,请考虑以下准则:

  • 验证模式可用性

    当控件支持多种模式时,请选择与您需要模拟的操作最接近的模式,优先选择 UIA 特定方法。要在运行时检查支持的模式,请使用 HasSupportedPatternHasSupportedPatterns 方法。确保您的测试能够处理模式在运行时可能不可用的情况。

  • 先从常用任务的高级功能入手,然后逐步过渡到复杂场景中的低级功能

    有关详细信息,请参阅请参阅 "UIA Pro 功能"

  • 验证对象的功能

    控件类型的视觉外观可能类似于标准 UI 元素 (例如按钮或下拉菜单),但其行为可能有所不同。例如,看起来像按钮的控件可能不支持 InvokePattern。相反,它可以采用不同的模式,例如 TogglePattern 甚或自定义行为。

    始终以编程方式检查控件类型的受支持模式,而不是依赖其外观。

  • 首选特定于 UIA 的方法

    为了提高可靠性和灵活性,尤其是在处理复杂用户界面时,如果可能,请使用基于模式的方法而不是设备回放方法。

    示例: Button click

    如果可行,建议使用基于 Invoke 方法 (而非设备回放 Click 方法) 的 UIA 模式。

    例如,首选 UIAProButton("Button").InvokePattern.Invoke,而非 UIAProButton("Button").Click,原因如下:

    UIA 模式方法 (Invoke)

    设备回放方法 (Click)

    直接使用 UIA 框架调用

    模拟物理鼠标单击

    即使 UI 元素不直接可见,也能正常工作 受 UI 响应问题的影响
    不依赖于 UI 响应
    如果该模式受支持,则更可靠
  • 考虑应用程序如何实现 UIA 模式

    在决定使用哪种高级方法时,要考虑它所基于的低级方法,以及应用程序是如何实现这些低级方法的。

    示例: 从表中检索单元格值

    虽然应用程序中的表单元格外观可能相似,但它们通过 ValuePattern 和/或 TextPattern 以不同方式显示数据。

    要检索表单元格的值,可以使用高级方法 GetCellValueGetCellText:

    • UIAProDataGrid("Grid").GridPattern.GetCellValue(0,0)

    • UIAProDataGrid("Grid").GridPattern.GetCellText(0,0)

    根据应用程序实现 ValuePatternTextPattern 的方式,选择要使用的方法。

    GetCellText 通过调用 TextPattern.GetText,且 GetCellValue 调用 ValuePattern.GetValue,检索单元格的内容。

使用路径描述属性

当测试对象层次结构省略了 UI 对象层次结构中存在的中间对象时,必须在测试对象描述中使用 path 属性。

您不能在 path 属性中使用正则表达式。该属性的值始终被视为纯字符串。

如果未指定路径属性,则路径由父测试对象的路径 (如果存在父对象) 和当前测试对象的控件类型对应的路径段组成。

例如,在以下情况下需要路径属性:

UI 层级结构包含以下对象: Window → Pane → Pane → List → ListItem。

对象存储库仅包含 Pane 和 ListItem 对象的测试对象:

  • 父路径: Window;Pane;Pane

  • 子路径: Window;Pane;Pane;List;ListItem (或 ~List;ListItem,如果您使用相对路径。)

这两个对象都需要指定路径属性,因为并非所有 UI 对象都由测试对象表示。

决定在层次结构中表示以及省略哪些对象,需要考虑对象标识的性能、可维护性和可靠性。建议保留识别对象时创建的层次结构。您可以将路径属性从绝对路径更改为相对路径,以简化测试维护。有关详细信息,请参阅请参阅 "对象描述中的相对路径"

另请参见: