【问题标题】:MS UI Automation WinForms: Can't find grid field chooser window on UIA automation treeMS UI 自动化 WinForms:在 UIA 自动化树上找不到网格字段选择器窗口
【发布时间】:2016-05-14 05:32:51
【问题描述】:

我们有一个 Infragistics UltraGrid 控件,您可以为该网格显示一个字段选择器窗口。

但是,字段选择器不会显示在 UIA 自动化树上。如果我尝试以编程方式搜索它,则 UIA 找不到它,如果我尝试使用 UIA 验证手动查找它也是如此。

但是如果我使用 UIA 验证悬停/焦点模式来查找字段选择器,那么它会显示它,并且还会在与网格控件相同的表单下显示它。

如何使用代码找到控件?为什么它没有显示在自动化树上?

【问题讨论】:

  • 它有 AutomationID 属性吗?它嵌套多深?它是否具有与其他控件相同的控件名称、控件 ID 或名称?
  • 是的,如果我通过悬停/聚焦模式找到它,它会显示为“正常”。它有 ControlType.Window、AutomationId = "ColumnChooserDialog"、Name = "Orders - Field chooser"。但是,如果我搜索那些属性,它不会找到它......我会做一个 FindAll 的父表单并查看它没有显示的子表单。
  • 这听起来像一个容器窗口。实际控制可能在那个窗口下。 ParentForm --> 容器窗口 --> 控件
  • 我添加了一些图像...第一个是它在 UIA 验证中和代码中的正常显示方式 - 字段选择器只是没有显示在自动化树上。第二个显示,在我在 UIA 验证中使用悬停/聚焦模式找到它之后,它确实出现在树上。
  • 请记住,UIA 树是有生命的。这可能意味着您需要在父表单上触发用户(交互)操作(鼠标、键盘、单击、悬停等),以便可以创建字段选择器窗口(或通过对这个动作,如果它已经存在于其他地方)。没有简单的重现代码很难提供更多帮助

标签: c# .net winforms ui-automation microsoft-ui-automation


【解决方案1】:

这似乎是 .NET 框架中与从 MDI 子表单创建的表单相关的错误。作为一种解决方法,我已经能够使用 AutomationElement.FromPoint() 函数。

Microsoft forum link

引用 Guy Barker(微软)的话:

“我可以重现您看到的问题。我将主窗体设置为 mdi 容器,并创建了一个子窗体,其 MdiParent 是主窗体。然后我将原始拥有的窗体添加为 mdi 子窗体表单。当我这样做时,我可以在 Inspect 中获取拥有表单的详细信息,但该表单没有出现在 UIA 树视图中。

有趣的是,当我查看拥有表单的祖先时,它按预期将 mdi 子表单列为父表单。但是由于某种原因,mdi 子窗体并不认为拥有的窗体是它的子窗体之一。

我目前对如何解决这个问题没有任何建议,但如果我发现了什么,我会在这里发表评论。”

【讨论】:

    【解决方案2】:

    这是基础设施。某些组件(如 ultratree、ultragrid 等)在对象树上的位置不正确。

    可能的解决方案:

    • 尝试从应用程序窗口的找到您的控件。
    • 模拟鼠标和键盘操作。
    • AutomationElement.FocusedElement 的形式获取控制权,然后通过元素父项

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 2019-08-10
      • 2018-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-08
      相关资源
      最近更新 更多