在我的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现在可以看到当前所选选项卡的内容.