如何检索Viewbox / Canvas / Path元素以进行编码UI测试?

时间:2014-06-20 15:29:40

标签: c# wpf ui-automation coded-ui-tests

在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测试的新手,所以如果第二个解决方案能够解决问题,那么如何实现呢?

1 个答案:

答案 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");