gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:44:46 24 4
gpt4 key购买 nike

摘要

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

但是,我的测试人员的自动化测试工具看不到选项卡的任何内容,包括当前选择的选项卡。

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

详情

我正在使用 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 问题和自我回答,以防将来对其他人有所帮助)

    最佳答案

    在不同但相似的 msdn 论坛问题的不同 MSFT 回复中找到答案,TabControl controls are missing for UI Automation .

    要使 UI 自动化适用于 ContentTemplated TabControl,请添加 名称="PART_SelectedContentHost"属性到 ContentPresenter,像这样

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

    这就是全部。 UISpy 现在可以查看当前选定选项卡的内容。

    关于wpf - 如何在不破坏自动化测试的情况下为 TabControl 定义 ControlTemplate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3638226/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com