WPF中的UI自动化,功能区控制和Anywhere Anywhere 11

时间:2019-05-14 10:50:34

标签: wpf automation ui-automation ribbon automationanywhere

我正在 Automation Anywhere 11 中构建一个新的bot,最近发现我在尝试使Windows Ribbon自动化时遇到了一个棘手的情况。

如果我只有一个选项卡,那么一切都会按预期进行,并且我可以识别其中的所有按钮,但是如果我有多个选项卡,则对象克隆只能看到最后一个选项卡元素选项,我添加了唯一的名称,AutomationID等,但没有任何效果。这是该问题的预览:

preview

这是我的示例 XAML 代码:

<UserControl x:Class="Example.RibbonMenu"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             xmlns:my="http://schemas.microsoft.com/winfx/2006/xaml/presentation/ribbon">
    <my:Ribbon x:Name="R1" AutomationProperties.AutomationId="R1ID">
        <my:RibbonTab Header="Tab 1" x:Name="Tab1" AutomationProperties.AutomationId="Tab1ID">
            <my:RibbonGroup x:Name="GB1" AutomationProperties.AutomationId="RG1ID">
                <my:RibbonButton Label="Button 1" x:Name="RB1" AutomationProperties.AutomationId="RB1ID" />
            </my:RibbonGroup>
        </my:RibbonTab>
        <my:RibbonTab Header="Tab 2" x:Name="Tab2" AutomationProperties.AutomationId="Tab2ID">
            <my:RibbonGroup x:Name="RG2" AutomationProperties.AutomationId="RG2ID">
                <my:RibbonButton Label="Button 2" x:Name="RB2" AutomationProperties.AutomationId="RB2ID" />
                <my:RibbonButton Label="Button 3" x:Name="RB3" AutomationProperties.AutomationId="RB3ID" />
            </my:RibbonGroup>
        </my:RibbonTab>
    </my:Ribbon>
</UserControl>

此外,我已经阅读了多个选项:

但是直到最近我一直没有尝试过,直到最近我才发现问题出在最后一个标签上。另外,正如我在评论部分中所述,我也尝试了旧版选项管理Windows控件。以下是一些预览:

启用旧版选项:

preview2

管理Windows控件:

preview3

此外,另一个带彩带的应用程序(例如Paint)可以识别按钮:

paint

此外,我还测试了另一个Microsoft工具: AccExplorer32.exe ,该工具显示了完全相同的行为,证明这不是AA或UiPath的限制,而是从编码的角度来看,这里您有预览:

preview accexplorer

有人知道如何解决吗?还是经历过类似的事情?感谢您的帮助。

PS

  • 我不想要有关图像识别 MetaBots 部分解决方案 < em>和AA的情况下都很好)作为选项,因为这是一个编程问题,我很想解决。

  • 我发现了有关 TabControl 的第二个问题。如果出于某种原因,当您仅激活 TabItem ,并且出于美学原因决定隐藏标签名时,我的建议是为机器人启用,因为如果将其隐藏,则机器人将无法在其中找到任何元素,因此您可能需要一个MetaBot,它不如您想要的那样可靠。

不起作用:

tab not working

这些选项卡甚至不适用于MetaBots:

preview tab not working metabot

工作:

preview tab working

1 个答案:

答案 0 :(得分:1)

如果我们不能在WPF中找到解决方案,这是部分解决方案(我非常怀疑,没有可能)。有人建议我使用 MetaBot ,它可以屏蔽整个窗口,是的,通过这种方式,您可以识别所有可见的控件(不是在所有工具中,也就是说,没有启用SAP脚本的SAP,这是不可能的)。

image1

但是,我不建议这样做,因为这将无法解决主要问题,也无法解决未来更改或从屏幕或用户界面进行大幅度更改带来的稳定性。

此外,根据我的经验,我可以假设效率会降低,因为在“常规流程” 中,您将访问特定的AutomationID 基于对象克隆的唯一控件,而在 MetaBot 中,您将不断访问全屏以获取所有控件,然后使用创建的逻辑逐一选择并且您将需要为每个屏幕每次重复相同的操作,并为每个操作遵循相同的模式。此外,您可能会问为什么我认为它的效率较低,因为这给解决方案增加了复杂性。

如果我找到一个更好的答案或解决方案,我将一拥有它就立即添加。