AutomationElement.Current.Name出现等待,没有返回

Kuang Yi I (匡 毅) 0 信誉分
2025-02-14T01:47:16.2466667+00:00

自动化测试过程中调用AutomationElement.Current.Name 出现了无限等待,并且程序没有抛出异常

同时发现,查询目标窗体的时候也会有同样的问题,加入异步的超时处理无法成功

Dim rootElement = AutomationElement.RootElement.FindFirst(TreeScope.Children, New AndCondition(GetNameProperty(“窗体名称”), GetWindowProperty))

通过debug无法获取到窗体信息,如下图

确认了窗体当前状态为未获取焦点,属性IsEnabled = true , IsOffscreen = false用户的图像

问题1:

当前状态下出现异常等待的原因是什么?

问题2:

针对上述现象请提供解决方案

Windows
Windows
Microsoft 操作系统系列,可跨个人计算机、平板电脑、笔记本电脑、手机、物联网设备、独立混合现实头戴显示设备、大型协作屏幕和其他设备运行。
582 个问题
VB
VB
Microsoft 开发的一种面向对象的编程语言,其在 .NET Framework 上实现。 以前称为 Visual Basic .NET。
78 个问题
0 个注释 无注释
{count} 票

1 个答案

排序依据: 非常有帮助
  1. Jiachen Li-MSFT 33,531 信誉分 Microsoft 供应商
    2025-02-14T06:55:46.0066667+00:00

    一些可能导致这个问题的原因:

    1. 目标窗体的 Name 属性为空或不可访问
      • AutomationElement.Current.Name 依赖 UI Automation 提供的属性,某些窗口可能没有正确实现 UI 自动化支持,导致 Name 访问失败或长时间等待。
      • 部分应用(尤其是 Win32 或 WPF)在无焦点时不会返回 Name,或者 Name 依赖某些动态加载数据。
    2. 目标窗体在 UI Automation 树中的状态异常
      • 由于某些安全限制或窗口架构(比如权限问题),FindFirst 可能会卡住。
      • rootElement.FindFirst 可能在查找时遇到隐藏或不可访问的窗口。

    可以尝试下面的方案:


    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。 **注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知。 **


你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。