MFC 从哪里获得自动化 ID?

Where does MFC get the Automation IDs from?

我即将向 MFC 应用程序(使用 Visual Studio 2019 创建)添加自动 GUI 测试。 AutomationId 似乎在识别应用程序中的各种子 windows 时很有用。

当我使用 Microsoft 的工具“Visual UIA Verify”检查应用程序时,我注意到应用程序中的大多数子 windows 都有 AutomationId。

我担心的是,如果我有一个 window class 的多个实例,并且 ID 可能会随时间变化。

我的问题是

如果我没记错的话,自动化 ID 就是 window 的子控件的控件 ID。

这是为从资源(.rc 文件)加载的对话框中的控件自动设置的。通过为 CreateWindow 中的 HMENU 参数传递一个数字,也可以在运行时为 non-dialog 控件设置控件 ID。所以是的,您通常可以假设控件 ID 是静态的。

自动化 ID 是从 UIA(用户界面辅助功能)获得的,您通常应该能够指望它们与同一程序的 run-to-run 相同,但请注意,新版本可能会也可能不会是“一样的”。

来自 UIA 文档:

Identifies the AutomationId property, which is a string containing the UI Automation identifier (ID) for the automation element. When it is available, the AutomationId of an element must be the same in any instance of the application, regardless of the local language. The value should be unique among sibling elements, but not necessarily unique across the entire desktop. For example, multiple instances of an application, or multiple folder views in Microsoft Windows Explorer, can contain elements with the same AutomationId property, such as "SystemMenuBar". Although support for AutomationId is always recommended for better automated testing support, this property is not mandatory. Where it is supported, AutomationId is useful for creating a test automation script that runs regardless of the UI language. Clients should make no assumptions regarding the AutomationId values exposed by other applications. AutomationId is not guaranteed to be stable across different releases or builds of an application.