2013-05-28 29 views
1

我正在使用Visual Studio 2010 Ultimate - visual c# - codedUI。测试自动化 - CodedUI无法区分应用程序中的不同控件

我正在为一个客户端进行一些自动化测试(烟雾测试,回归测试等),但是我试图做测试自动化的应用程序并不合作。 我已经自动化了所有客户端的Web应用程序,没有任何问题,但对于他们的桌面应用程序,我似乎无法获得任何控件之间的任何唯一标识符。

下面是一个示例codedUI记录,我通过一种树状结构,走在应用程序 - 我强调在列表中几个不同的项目,展开列表中,单击某个项目,浏览一个启动窗口等

/// <summary> 
    /// SomeRecordedMethod 
    /// </summary> 
    public void SomeRecordedMethod() 
    { 
     #region Variable Declarations 
     WinTitleBar uINavigatorTitleBar = this.UISomeRandomCompanyWindow.UINavigatorWindow.UINavigatorTitleBar; 
     WinEdit uIObjectdescEdit = this.UISomeRandomCompanyWindow.UINavigatorWindow.UIDw_navigatorClient.UIObjectdescEdit; 
     WinClient uICalendar1Client = this.UISomeRandomCompanyWindow.UIMaintainCalendar1Window.UIItemWindow.uICalendar1Client; 
     #endregion 

     // Click 'Navigator' title bar 
     Mouse.Click(uINavigatorTitleBar, new Point(241, 9)); 

     // Click 'objectdesc' text box 
     Mouse.Click(uIObjectdescEdit, new Point(19, 11)); 

     // Click 'objectdesc' text box 
     Mouse.Click(uIObjectdescEdit, new Point(39, 10)); 

     // Double-Click 'objectdesc' text box 
     Mouse.DoubleClick(uIObjectdescEdit, new Point(37, 11)); 

     // Double-Click 'objectdesc' text box 
     Mouse.DoubleClick(uIObjectdescEdit, new Point(20, 11)); 

     // Double-Click 'objectdesc' text box 
     Mouse.DoubleClick(uIObjectdescEdit, new Point(42, 5)); 

     // Double-Click 'objectdesc' text box 
     Mouse.DoubleClick(uIObjectdescEdit, new Point(61, 11)); 

     // Click 'Calendar [1]' client 
     Mouse.Click(uICalendar1Client, new Point(632, 141)); 

     // Click 'Calendar [1]' client 
     Mouse.Click(uICalendar1Client, new Point(671, 200)); 

     // Click 'Calendar [1]' client 
     Mouse.Click(uICalendar1Client, new Point(675, 301)); 

     // Click 'Calendar [1]' client 
     Mouse.Click(uICalendar1Client, new Point(686, 396)); 

     // Click 'Calendar [1]' client 
     Mouse.Click(uICalendar1Client, new Point(686, 544)); 

     // Click 'Calendar [1]' client 
     Mouse.Click(uICalendar1Client, new Point(478, 547)); 

     // Click 'Calendar [1]' client 
     Mouse.Click(uICalendar1Client, new Point(579, 552)); 

     // Click 'Calendar [1]' client 
     Mouse.Click(uICalendar1Client, new Point(579, 552)); 
    } 

注意'objectdesc'和'Calendar [1]'的多个实例。每一次重复的发生都是不同的控制,但是动作记录并没有挑选出来。

当我尝试运行测试时,我明显得到:Microsoft.VisualStudio.TestTools.UITest.Extension.UITestControlNotFoundException:播放无法找到具有给定搜索属性的控件。

我是新来测试Visual Studio中的自动化,所以我不知道我有什么选择在这一点上。任何建议将不胜感激。

谢谢

回答

2

对于许多控件不需要new Point(x,y)参数Mouse.Click(),但提供的是:有两个或两个以上的部分项目,如可以单击一个按钮,但也有一个下拉列表。你显示的代码中的(x,y)值表明所有编码的用户界面正在看到的是一个很大的控制,即整个日历或整个uIObjectdescEdit,而不是其中的字段。

我怀疑应用程序使用了一些不支持编码UI的自定义控件。从开发人员那里了解应用程序是如何编写的,使用了哪些技术(如WPF,Windows Forms,MFC等)以及使用了哪些自定义控件。然后根据Microsoft Coded UI网页上的兼容性列表检查答案。如果使用自定义控件,那么您可能需要向这些控件的作者重复提问。

+0

感谢您的信息阿德里安。今天我不打算接触开发者,但我会看看他们是如何编写应用程序的。根据他们十多年前制定该计划的所有帐户。自那时起,他们一直在着手并更新它。我不认为他们最近使用新技术完成了重建 - 我认为他们使用的任何东西都已经有十年多了。 鉴于此,编码UI /动作录制可能不太可能,对吧? – LuFaMa

+0

让我问一个后续问题 - 如果我不能对自己的CodedUI测试进行自动测试,我有什么选择?过去我曾经使用过像Vtask Studio这样的自动化工具,但这些并不是非常强大的工具,只能用于勉强服务。我不想用这样的东西来做一大堆测试。你有什么建议? – LuFaMa

+0

@LuFaMa - 我没有任何建议。 http://en.wikipedia.org/wiki/List_of_GUI_testing_tools可能会给你更多的想法。您对于旧计划的评论支持我的答案中的理论。与开发人员交谈,您可能很幸运,并且发现他们购买了一个控件库,其中有一个新版本可正确支持Coded UI。 – AdrianHHH

相关问题