当前位置 : 主页 > 网络安全 > 测试自动化 >

wpf – 如何在不破坏自动化测试的情况下为我的TabControl定义ControlTemplate?

来源:互联网 收集:自由互联 发布时间:2021-06-19
摘要 在我的WPF应用程序中,我需要一个带左侧按钮的TabControl,所以我用我想要的布局定义了一个ControlTemplate,它运行正常. 但是,我的测试人员的自动测试工具无法看到选项卡的任何内容,包
摘要

在我的WPF应用程序中,我需要一个带左侧按钮的TabControl,所以我用我想要的布局定义了一个ControlTemplate,它运行正常.

但是,我的测试人员的自动测试工具无法看到选项卡的任何内容,包括当前选定的选项卡.

问题:如何通过自动化测试工具保持我的TabControl可测试,同时仍然定义ControlTemplate?

细节

我正在使用WPF 3.5开发WPF应用程序
我的测试人员正在使用名为QTP的自动测试工具
他说他可以用UISpy.exe测试你能看到的任何东西

>当我使用没有应用模板的直接TabControl时,UISpy可以看到当前所选选项卡的内容.
>但是,当我使用ContentTemplate更改布局(下面显示的代码)时,UISpy仍然可以看到选项卡标题…但它无法看到内容.

示例WPF应用程序(Xaml):

<Window x:Class="TabControlTest.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Tab Control Test"
        Height="300"
        Width="300">
    <Window.Resources>
        <ControlTemplate x:Key="ButtonsOnLeftTabLayout"
                         TargetType="{x:Type TabControl}">
            <DockPanel>
                <StackPanel DockPanel.Dock="Left"
                            IsItemsHost="True" />
                <ContentPresenter Content="{TemplateBinding SelectedContent}" />
            </DockPanel>
        </ControlTemplate>
    </Window.Resources>
    <TabControl Template="{StaticResource ButtonsOnLeftTabLayout}">
        <TabItem Header="Tab 1">
            <StackPanel>
                <Button HorizontalAlignment="Center">Button 1</Button>
            </StackPanel>
        </TabItem>
        <TabItem Header="Tab 2">
            <StackPanel>
                <Button HorizontalAlignment="Center">Button 2</Button>
            </StackPanel>
        </TabItem>
    </TabControl>
</Window>

到目前为止我的搜索结果:

>一堆关于必须使用自定义AutomationPeer编写自定义TabControl的内容(例如MSFT对论坛问题UI Automation: accessing control in a ControlTemplate的回答,博客发布Custom Controls and UI Automation).但是我的每一个本能都说这是疯狂的矫枉过正,“必须有一种更简单的方法!”
>关于为ContentPresenter提供名称,x:名称或AutomationProperties.AutomationId的一些建议 – 没有任何效果

(搜索之后我终于找到了答案,但它花了比我想象的更长的时间,而且AutomationPeer的早期发现确实是错误的,所以我把它写成一个SO问题并自我回答,以防它在将来帮助其他人)

在不同但相似的msdn论坛问题 TabControl controls are missing for UI Automation上找到了不同的MSFT响应中的答案.

要使UI自动化适用于ContentTemplated TabControl,请将Name =“PART_SelectedContentHost”属性添加到ContentPresenter,就像这样

<ContentPresenter Name="PART_SelectedContentHost"
                  Content="{TemplateBinding SelectedContent}"/>

这就是全部. UISpy现在可以看到当前所选选项卡的内容.

网友评论