7

概括

在我的 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 的早期发现确实不正确,所以我把它写成一个 SO 问题和自我回答,以防它在未来对其他人有所帮助)

4

1 回答 1

8

在不同但类似的 msdn 论坛问题的不同 MSFT 响应中找到答案,UI Automation 缺少 TabControl 控件

要使 UI 自动化适用于 ContentTemplated TabControl,请将Name="PART_SelectedContentHost"属性添加到 ContentPresenter,如下所示

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

这就是它所需要的。UISpy 现在可以看到当前选定选项卡的内容。

于 2010-09-03T17:50:55.323 回答