我在VS 2010 Ultimate中使用Microsoft编码ui测试(CUIT)来测试ASP.Net 4.0站点。
我有ASP.Net网站的源代码,所以我可以根据需要进行修改。
我的录音/播放工作正常。
我可以在测试方法中编写简单的断言语句来检查UITestControl后代的属性(HTML链接,表格等),并将它们与期望值进行比较。
我想在我的网站中向用户控件(ASCX)和页面添加属性,以将有用的值传递给测试代码。
例如,我有一个用户控件,它实现了一个菜单,根据当前用户的角色显示不同的菜单项集。
我没有让测试脚本点击各种菜单项来检查它们是否存在,而是想向用户控件添加一个属性。此属性将向调用者返回信息,列出存在的菜单和菜单项。
我在网上找到了关于如何在WinForms中执行此操作的信息,但此代码依赖于可访问性,我认为这对于使用WinForms的CUIT非常有用。同样,我已经找到了有关如何使用WPF / SL的信息。
答案可能与获取UITestControl.NativeElement属性有关,然后调用覆盖GetProperty()的方法,但我无法使这种方法起作用。
任何人都可以提供一个简短的代码示例,演示如何将属性添加到ASCX或ASPX页面,其中该属性可以用C#代码隐藏编写,并通过Microsoft Coded UI Testing(CUIT)代码读取?
谢谢!
Adam Leffert http://www.leffert.com答案 0 :(得分:1)
我还没有找到这个问题的答案,但我已经写了一些代码来解决潜在的问题。
我意识到向用户控件添加属性会将验证数据与测试中的控件保持在一起,但仅限于将UI部分实现为用户控件的情况。
至少还有两个我需要涉及的案例:
1)第三方控件添加到页面中,例如ASPxGridView,ASPxTreeView等。
2)UI中不可见的项目,例如当前用户的用户个人资料数据。
当您使用Web应用程序运行CUIT验证代码时,您可用的数据是DOM数据,即表示浏览器窗口内容的文档对象模型内容的树。没有Request对象,.Net Page对象等。这个DOM数据可以通过UIMap对象访问。
我不想在用户控件中包装第三方控件,因为这样做会干扰正在测试的应用程序,导致我重新编写触及网格属性和事件的应用程序代码,树视图,等对测试代码过于干扰。
所以我创建了一个包含字符串值字典的代码接口(ITestable)和一个ITestable子代表。
在母版页的LoadComplete事件处理程序中,我为母版页创建了一个ITestable,并使用子页面的子ITestable对象填充列表,子页面本身可以包含子项列表。
我将此对象序列化为JSON,然后将其存储在母版页的隐藏字段中。
我将隐藏字段添加到UIMap。
测试验证代码反序列化ITestable,然后查看需要验证的值。
控件创建自己的ITestable对象,因此他们可以使用验证所需的值轻松填充对象,而不是强制测试代码操纵UI以尝试读取验证值。
例如,树视图可以返回其内容,而测试代码不必单击每个节点并尝试读取其中显示的值。其他属性(可见,已启用等)可以存储在每个ITestable对象的值字典中。
CUIT有一些非常强大的功能。如果微软会记录一些解决这些非平凡验证问题的最佳实践,我将非常感激。我已经阅读了Microsoft文档,但在Web应用程序的主题上没有找到太多内容。