【发布时间】:2010-09-03 17:44:28
【问题描述】:
总结
在我的 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:Name 或 AutomationProperties.AutomationId 的一些建议——这些都没有任何效果
(经过搜索,我终于找到了答案,但花费的时间比我想象的要长,而且 AutomationPeer 的早期发现确实不正确,所以我把它写成一个 SO 问题和自我回答,以防万一它可以帮助将来的其他人)
【问题讨论】:
标签: wpf automated-tests qtp ui-automation