Wpf Visual Studio 2013 CodedUI测试

Wpf Visual Studio 2013 CodedUI测试,wpf,visual-studio-2013,coded-ui-tests,Wpf,Visual Studio 2013,Coded Ui Tests,我刚刚开始使用Visual Studio 2013 CodedUI测试工具为WPF应用程序开发UI测试。其他人报告了类似的问题(不同的情况),但没有人能够找出如何解决播放过程中出现的错误,即: “请使被阻止的控件可见,然后重试该操作” 似乎测试工具找不到正确的控件。在我的应用程序中,我在运行时动态加载用户控件。用户可以多次加载同一控件;因为控件代表不同的文档类型。我是否可以唯一地标记控件,以便工具可以找到控件?我尝试设置UIAutomationId,但没有成功。我尝试过使用crosshair工具

我刚刚开始使用Visual Studio 2013 CodedUI测试工具为WPF应用程序开发UI测试。其他人报告了类似的问题(不同的情况),但没有人能够找出如何解决播放过程中出现的错误,即:

“请使被阻止的控件可见,然后重试该操作”
似乎测试工具找不到正确的控件。在我的应用程序中,我在运行时动态加载用户控件。用户可以多次加载同一控件;因为控件代表不同的文档类型。我是否可以唯一地标记控件,以便工具可以找到控件?我尝试设置UIAutomationId,但没有成功。我尝试过使用crosshair工具…我得出结论,除非有人告诉我不同的情况,否则该工具无法支持动态生成的WFP应用程序。有什么想法吗?

首先使用Inspect工具(windows开发工具包附带的Inspect.exe)确定是否可以使用MSAA技术识别动态控件。因为MSAA在某些情况下无法识别控件。参考这篇文章

我在开始为我们的WPF应用程序开发CodedUI测试时遇到了同样的问题,问题似乎出现在我需要的控件所在的自定义选项卡页面中

在对控件执行任何操作(例如输入文本)之前,我通过单击控件的x/y点来避免这个问题。这样可以确保控件集中

我创建的方法:

 public void ClickControl(UITestControl uiTestControl)
    {
        var boundingRectangle = uiTestControl.BoundingRectangle;

        var xavg = boundingRectangle.Right - (boundingRectangle.Width / 2);
        var yavg = boundingRectangle.Bottom - (boundingRectangle.Height / 2);
        var point = new Point(xavg, yavg);
        Mouse.Click(point);
    }

希望它也适用于你

如果有多个具有相同自动化属性的动态生成的UI控件,一种解决方案是使用Instance UITestControl search属性指定要访问的控件实例:

yourDuplicateControl.SearchProperties["Instance"] = "1";
另一个需要对应用程序进行开发端更改的解决方案是为实例特有的控件生成一个
AutomationId
,例如,动态地将
AutomationId
设置为以下内容:

yourDuplicateControlAutomationId1
yourDuplicateControlAutomationId2
yourDuplicateControlAutomationId3

你只是在点击uielement吗?您是否尝试过单击动态创建元素的x/y坐标点?是的,我只是在使用记录器。当您说尝试单击x/y坐标点时,是否有方法将记录器更改为使用x/y点与ui元素?p、 谢谢你的回复!谢谢我通过基于实例计数创建一个唯一的名称解决了最初的问题。现在我在访问ListBox DataTemplate中的复选框控件时遇到问题您遇到了什么样的问题?我使用的是ListBox,带有ListBox.ItemTemplate,带有复选框的DataTemplate。记录器找不到数据模板中包装的复选框。我已经阅读了DataTemplate中的控件,默认情况下,这些控件不公开必要的属性,以允许代码UI记录器查找和访问它们。这是我的最后一个障碍。感谢您的回复。如果您不一定要使用记录器,那么可以通过扩展UITestControl类在编码的UI脚本中找到控件。