我正在评估用于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);
但在我的情况下,按钮始终处于启用状态,因此我需要检查应用于按钮的样式。
非常感谢。
祝你好运
答案 0 :(得分:1)
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);
作为一种解决方法对我来说没问题,但它有两个问题,它要求我更新应用程序代码,在测试期间不应该是必需的,并且它一次只能暴露一个属性。
祝你好运, 维克托