在WPF应用程序上执行编码UI测试时,可以通过以下方式找到我需要的WPF按钮:
WpfButton button = new WpfButton(mainWindow);
button.SearchProperties[WpfButton.PropertyNames.AutomationId] = "btn";
button.WindowTitles.Add("MainWindow");
初始化后,我可以成功执行任何检查和验证。
当我试图检查包含Canvas的ViewBox元素的状态时问题就开始了,而Canvas又包含一个Path。这些元素中没有一个具有Microsoft.VisualStudio.TestTools.UITesting.WpfControls
命名空间中的模拟类型。经过简短的调查后,我发现这些类型也没有覆盖OnCreateAutomationPeer
方法。
那么,检索Canvas或ViewBox或UI测试路径最方便的方法是什么?
也许,我错过了Microsoft.VisualStudio.TestTools.UITesting.WpfControls
命名空间中的兼容类型,或者,我应该派生自定义类型(例如,从Canvas中)并覆盖其中的OnCreateAutomationPeer
方法,然后为DerivedCanvas类创建自动化对等体?我是Coded UI测试的新手,所以如果第二个解决方案能够解决问题,那么如何实现呢?
答案 0 :(得分:3)
我找到了答案。它看起来很简单。首先,应从AutomatisableCanvas
:
Canvas
类
public class AutomatisableCanvas : Canvas
{
protected override AutomationPeer OnCreateAutomationPeer()
{
return new CanvasAutomationPeer(this);
}
}
其次,新的CanvasAutomationPeer
类应该来自FrameworkElementAutomationPeer
:
class CanvasAutomationPeer : FrameworkElementAutomationPeer
{
public CanvasAutomationPeer(Canvas owner)
: base(owner) { }
protected override AutomationControlType GetAutomationControlTypeCore()
{
return AutomationControlType.Custom;
}
}
现在可以简单地找到AutomatisableCanvas
控件,如下所示:
WpfCustom canvas = new WpfCustom(mainWindow);
canvas.SearchProperties[WpfCustom.PropertyNames.AutomationId] = "an AutomationId you've specified for an AutomatisableCanvas instance";
canvas.WindowTitles.Add("MainWindow");