C# Can';t确定我的web应用中是否存在某个UITestControl
我目前正在尝试使用C#为web应用程序自动化一些编码的UI测试。我经常遇到的一个问题是,很难确定页面上是否存在C# Can';t确定我的web应用中是否存在某个UITestControl,c#,web-applications,visual-studio-2012,coded-ui-tests,C#,Web Applications,Visual Studio 2012,Coded Ui Tests,我目前正在尝试使用C#为web应用程序自动化一些编码的UI测试。我经常遇到的一个问题是,很难确定页面上是否存在UITestControl对象。不幸的是,微软在其MSDN网站上关于编码UI测试的任何文档实际上都是不存在的() 基本上我要问的是: 确定页面上是否存在UITestControl的最佳方法是什么 UITestControl.Exists属性如何工作 UITestControl.Find()方法的作用是什么 UITestControl.TryFind()方法是如何工作的 我是如何处理的
UITestControl
对象。不幸的是,微软在其MSDN网站上关于编码UI测试的任何文档实际上都是不存在的()
基本上我要问的是:
- 确定页面上是否存在
的最佳方法是什么UITestControl
属性如何工作UITestControl.Exists
UITestControl.Find()方法的作用是什么
方法是如何工作的UITestControl.TryFind()
UITestControl.Exists
属性是否为true,但随着时间的推移,并参考其他人的经验,很明显,即使浏览器未打开,它也会返回true。由于最明显的选项不起作用,我尝试使用UITestControl.Find()
方法,但由于它不带参数,也不返回任何内容,所以我无法理解它的作用。我尝试使用UITestControl.TryFind()
方法,偶尔它也会起作用,但我发现只有当我不在正确的页面上时,它才会返回false;否则它总是返回真的。很明显,我不知道它是如何工作的,不应该把它作为一个测试
我想如果我不能得到提供的方法来完成他们的工作,我就必须尝试自己制作工具。我最近尝试在try/catch块中使用鼠标悬停(UITestControl)
,以确定控件是否存在,如下所示:
public bool DoesExist(UITestControl control){
if(control == null)
return false;
try{ Mouse.Hover(control); }
catch (UITestException)
{
return false;
}
return true;
}
它有时有效,但在某些情况下,由于我不理解的原因,它似乎会返回假阳性。我还是在瞎飞,我几乎没有主意了
我正在使用Visual Studio 2012和Microsoft.NET Framework版本4.5.50709。关于
Find()
和TryFind()方法的部分答案
在类实例中为控件设置各种搜索属性后,Find()
方法实际搜索要匹配的控件。SearchProperties
用于尝试查找控件。如果找不到任何控件,则搜索将失败-完全忘记发生了什么,可能会引发异常,但文档没有说明这一点。如果找到一个控件,则Find()
完成。如果找到两个或多个控件,则继续搜索,方法是使用filterproperty
将找到的控件数减少为一个
编码的UI记录器生成样式为UIControl aControl=this.UIMap.uione.uitwo.uithree的代码
这导致了一个问题,uione
如何获取引用控件的值,从而可以计算uitwo
?我找到的唯一答案是在描述部分,其中说“开始搜索控件(通过Find()显式搜索,或通过在操作或属性验证中使用控件隐式搜索)”
因此,Find()
执行对控件的搜索,可以显式或隐式调用该控件
TryFind()
与Find()
基本相同,只是它返回一个布尔值,指示是否找到了控件。同样,文档很差,但我认为TryFind()
返回true
如果只找到一个控件,则返回false
另一个有用的查找方法是FindMatchingControls
,它返回与搜索条件匹配的所有控件的集合(可能为空)
根据yonitdm的回答,当有多个项目匹配但大多数项目未显示时,使用边框可以有所帮助。也可以使用Top
和Left
的值。执行FindMatchingControls
并筛选结果以忽略顶部为负的或左侧为负的可能会起作用
在开发测试时,DrawHighlight
方法很有用,它会在控件周围绘制一个矩形。使用十字线工具记录断言时绘制的相同类型的矩形
这个索引有很多好的信息。“UI测试框架如何查找(搜索)控件”的链接可能对您特别有帮助。我们没有使用obj.Exists()而是编写了自己的Exists方法,该方法使用and>0的组合方法来确保控件有一个屏幕点
埃塔-哎呀,对不起,遗漏了一个重要的部分。更新为add.Width以确保其大于0,如果Width不起作用,则可能需要使用length。我正在使用tryfind()。。它工作得很好
if (obj_webor.GenLink.TryFind())
{
logdata.WriteLine(obj_webor.GenInnerText + " Exist !");
}
else
{
logdata.WriteLine(obj_webor.GenInnerText + " Does Not Exist");
}
之前我使用的是obj_webor.GenLink.exist()。。但如果控件不存在且发生异常,则is将给出错误。tryfind还可以非常感谢,对于这4个问题中的任何一个,即使是部分答案,我们都将不胜感激。TryFind()
和Find()
的一个问题是很难辨别它是如何与程序生成的元素交互的,从我有限的理解来看,它似乎经常无法找到存在的元素,并成功地找到已经停止存在或从未存在过的元素。哈哈,我也在尝试写我自己的。坏消息,EnsureClickable()
顺利通过,以及BoundingRectangle