UI自动化按钮样式已启用

时间:2010-04-21 15:04:13

标签: c# testing ui-automation

我正在评估用于UI测试的UI自动化,因为我有一个定义了以下按钮的WPF应用程序:

<Button Style="{DynamicResource ButtonStyle}" x:Name="MyBtn"/>

当我需要在视觉上禁用按钮时,我只需更改样式,以便用户知道按钮被禁用(颜色已更改)但仍然按钮在内部启用,因此我仍然可以启动OnClick事件以便显示用户点击“禁用”按钮时的消息。

现在的问题是我不知道如何从UI Automation检查当前应用的Style,即按钮是否被禁用或启用。你知道我怎么能这样做吗?

在正常情况下,我应该这样做:

Automation.Condition cEBtn = new PropertyCondition(AutomationElement.AutomationIdProperty, "MyBtn");

AutomationElement mybtnElement = appRegraceElement.FindFirst(TreeScope.Children, cEBtn);

bool disMyBtn = (bool)mybtnElement .GetCurrentPropertyValue(AutomationElement.IsEnabledProperty);

但在我的情况下,按钮始终处于启用状态,因此我需要检查应用于按钮的样式。

非常感谢。

祝你好运

1 个答案:

答案 0 :(得分:1)

在此链接中评论: http://social.msdn.microsoft.com/Forums/en/windowsaccessibilityandautomation/thread/129d2ea6-91ae-4f65-b07e-c36684ae742b

WPF属性不能(尚未)作为自动化属性公开。然而,迈克尔提出了一个解决方法。我会留在这里以防万一对某人有用。

<Style TargetType="Button">
    <Setter Property="AutomationProperties.ItemStatus"
        Value="{Binding RelativeSource={RelativeSource Self}, Path=Style}" />
</Style>

你可以看到我们在这里做的是使用Automation属性ItemStatus公开(对于所有按钮)WPF属性Style。然后可以从UI自动化客户端获取此样式:

Automation.Condition cEBtn = new PropertyCondition(AutomationElement.AutomationIdProperty, "MyBtn");
AutomationElement mybtnElement = appRegraceElement.FindFirst(TreeScope.Children, cEBtn);
string a = (string)mybtnElement.GetCurrentPropertyValue(AutomationElement.ItemStatusProperty);

作为一种解决方法对我来说没问题,但它有两个问题,它要求我更新应用程序代码,在测试期间不应该是必需的,并且它一次只能暴露一个属性。

祝你好运, 维克托