无法确定我的Web应用程序中是否存在某个UITestControl

Dan*_*one 9 c# web-applications coded-ui-tests visual-studio-2012

我目前正在尝试使用C#为Web应用程序自动化一些编码的UI测试.我遇到的一个常见问题是,确定UITestControl页面上是否存在对象非常困难.遗憾的是,微软在其MSDN网站上提供的有关编码UI测试的文档实际上并不存在(请参阅此处的页面UITestControl).

基本上我要问的是:

  • 确定UITestControl页面上是否存在的最佳方法是什么?
  • UITestControl.Exists物业如何运作?
  • UITestControl.Find()方法有什么作用?
  • UITestControl.TryFind()方法如何工作?

我是怎么试图处理它的:

正如我之前提到的,所有这些类和方法的文档大多是空白的.你可以用来描述任何方法和属性的最多是Intellisense中的1行描述,所以我一直在试验列出的方法.

首先,我尝试检查该UITestControl.Exists属性是否属实,但随着时间的推移并咨询其他人的经验,即使浏览器未打开,也很明显它总是返回true.由于看起来最明显的选项不起作用,我尝试使用该UITestControl.Find()方法,但由于它不需要参数并且什么都不返回,所以我无法弄清楚它的作用.我尝试使用这种UITestControl.TryFind()方法,偶尔也可以使用,但我发现当我没有在正确的页面上时,它似乎只会返回错误; 否则它总是返回true.显然我不知道它是如何工作的,不应该用它作为测试.

我想如果我不能得到提供的方法来完成他们的工作,我必须尝试制作自己的工具.我最近尝试Mouse.Hover(UITestControl)在try/catch块中使用来确定控件是否存在如下:

public bool DoesExist(UITestControl control){
   if(control == null)
      return false;

   try{ Mouse.Hover(control); }
   catch (UITestException)
   {
      return false;
   }

   return true;
}
Run Code Online (Sandbox Code Playgroud)

它有时会起作用,但在某些情况下它似乎会因为我不理解的原因而返回误报.我仍然是盲目的,我几乎没有想法.

我使用的是Visual Studio 2012和Microsoft .NET Framework 4.5.50709版.

Adr*_*HHH 3

Find()关于和方法的部分答案TryFind()

在控件的类实例中设置各种搜索属性后,该Find()方法将实际搜索要匹配的控件。它们SearchProperties用于尝试找到控件。如果没有找到控件,那么搜索就会失败 - 忘记到底发生了什么,可能会抛出异常,但文档没有说明这一点。如果找到一个控件则完成Find()。如果找到两个或更多,则通过使用FilterProperties将找到的控件数量减少到一个来继续搜索。

编码 UI 记录器生成的代码风格UIControl aControl = this.UIMap.uione.uitwo.uithree;导致了一个问题:如何uione获取引用控件的值以便uitwo可以进行评估?我找到的唯一答案是在http://blogs.msdn.com/b/balagans/archive/2009/12/28/9941582.aspx的描述部分,其中表示“开始搜索控件(通过Find明确() 或通过在操作或属性验证中对控件的任何使用来隐含) ”。

因此Find()执行对控件的搜索,并且可以显式或隐式调用它。

TryFind()与 基本相同,Find()只是它返回一个布尔值,指示是否找到该控件。同样,文档很差,但我相信如果恰好找到一个控件,TryFind()就会返回,否则会返回。truefalse

另一个有用的 find 方法是FindMatchingControls返回与搜索条件匹配的所有控件的集合(可能为空)。

根据yonitdm的回答,BoundingRectangle当有多个匹配项但大多数项未显示时,使用 可以提供帮助。也可以使用Top和的值。Left进行FindMatchingControls并筛选结果以忽略任何负面TopLeft可能有效的结果。

在开发测试时,该DrawHighlight方法很有用,它在控件周围绘制一个矩形。与使用十字线工具记录断言时绘制的矩形相同。

编码UI 内容索引有很多有用的信息。“UI 测试框架如何查找(搜索)控件”的链接可能对您特别有帮助。