8

I'm trying to do some coded UI tests with Visual Studio 2010 on my SharePoint 2010 site. A particular file in SharePoint launches my Silverlight application in a separate window. I've added the SilerlightUIAutomationHelper assembly as a reference in all my Silverlight projects that run this. This SHOULD allow me to record actions within it, but it pops up with an error message when I try to record inside my Silverlight app:

No Silverlight controls were detected. Verify that the application under test
is built using Silverlight assemblies with a version of 4.0 or greater and that
a reference to the Microsoft.VisualStudio.TestTools.Extension.SilverlightUIAutomationHelper.dll
assembly has been added to the project.

I'm running Silverlight 5.0, so that can't be the issue. I've also verified that the SilverlightUIAutomationHelper dll has made it into the xap package.

I've been able to successfully record these actions in SharePoint 2013/Visual Studio 2012 with this extension: http://visualstudiogallery.msdn.microsoft.com/28312a61-9451-451a-990c-c9929b751eb4

Any idea why this is happening? What can I do to fix it?

4

1 回答 1

4

为了在 Silverlight 5 中进行 Coded UI 测试,您需要从这里使用更新 Coded UI 自动化帮助程序:Visual Studio Gallery:Silverlight 的 UI 测试插件VS2010 附带的旧插件有效,但仅适用于 SL4 及以下版本。

SL5 的实现略有不同,它破坏了 Coded UI 测试,因此提示开发人员切换到 VS2012 和新的 UI 自动化插件(如您所见)。

安装 UITestPluginForSilverlight.msi 可执行文件后,您需要在项目的 Silverlight 部分(您已经拥有)中引用这些程序集。

据我所知,您的编码 UI 测试在 VS2010 中中断但在 VS2012 中工作的原因是因为测试记录器生成的 SL5 和 SL4 UIMap.designer.cs 文件彼此不兼容。

使用 SL4 自动化助手生成的 SL4 录音不适用于 SL5 版本的 AutiomationHelper。但是,如果 SL4 录音是由 VS2012 生成的,则 SL5 Autiomation Helper 将适用于这些录音。

详细说明:当您使用记录器时,它会创建一个 UIMap 文件。地图文件包含三个部分:

  1. 所有记录方法的 XML 列表
  2. 设计器在部分类后面生成代码。
  3. 用户部分类。

如果您检查设计器生成的代码隐藏文件,您实际上可以发现记录器生成了大量代码来查找控件并与它们进行交互。

对于记录器发现的每个控件,它声明了相应测试/交互对象的一个​​实例。

在声明这些对象时,记录器定义了一堆可发现/可搜索的属性。下次播放执行时,它会使用这些属性并使用它们来查找实际控件。

此外,所有控件都有一个父控件,因此记录器必须为每个发现的控件指定一个父 UI 元素。对于 SL4 和 SL5,父级如下:

  • 浏览器窗口
  • 网页
  • Div(持有 silverlight 运行时)
  • SL 对象(SL 运行时插件)
  • 主 SL UI 元素(通常是波浪形的忙碌指示器)
  • 导航框架
  • 内部页面
  • 控件

构造函数:

  1. 父控件/交互对象

搜索属性:

  1. 页面标题:浏览器窗口标题呈现的总字符串。
  2. 实例编号:(列表从 1 开始......这很奇怪)
  3. 控件 ID:(由 Name 或 x:Name xaml 属性定义)
  4. 显示名称:这对于组合框/列表元素来说是不确定的,因为它通过将组合框/列表元素项中呈现的任何内容与该项的实例编号相结合来工作:例如:

一个包含两个项目的组合框,每个项目都名为“列表项目”,可以通过以下显示名称找到:

“列表项:1”和“列表项:2”

  1. 搜索属性的任何组合和排列(您可以查找它们)。

长话短说,记录器生成的实际交互对象在 SL4 和 SL5 中是不同的。这意味着您不能将一个 UIMap.designer.cs 与另一个交换。测试框架(以及在 UIMap.designer.cs 中使用的相关交互对象)不是二进制兼容的。这就是为什么您的播放无法正常工作的原因。

于 2013-09-24T18:10:16.240 回答