我是Coded UI测试的新手,所以这里有一个简单的"问题:
尝试浏览菜单选项,我记录了已尝试播放的操作。我收到以下消息:The playback failed to find the control with the given search properties
以下是录制工具生成的代码:
public void NavegarSituacao()
{
#region Variable Declarations
HtmlCustom uINotíciasCustom = this.UIHttpcmshomepsafecomIWindow.UIHttpcmshomepsafecomDocument.UINotíciasCustom;
HtmlCustom uIEntretenimentoCustom = this.UIHttpcmshomepsafecomIWindow.UIHttpcmshomepsafecomDocument.UIEntretenimentoCustom;
HtmlCustom uIMulherCustom = this.UIHttpcmshomepsafecomIWindow.UIHttpcmshomepsafecomDocument.UIMulherCustom;
HtmlCustom uIEsportesCustom = this.UIHttpcmshomepsafecomIWindow.UIHttpcmshomepsafecomDocument.UIEsportesCustom;
HtmlCustom uIHomemCustom = this.UIHttpcmshomepsafecomIWindow.UIHttpcmshomepsafecomDocument.UIHomemCustom;
HtmlCustom uITecnologiaCustom = this.UIHttpcmshomepsafecomIWindow.UIHttpcmshomepsafecomDocument.UITecnologiaCustom;
HtmlCustom uIVídeosCustom = this.UIHttpcmshomepsafecomIWindow.UIHttpcmshomepsafecomDocument.UIVídeosCustom;
#endregion
// Click 'Notícias' custom control
Mouse.Click(uINotíciasCustom, new Point(89, 21));
// Click 'Entretenimento' custom control
Mouse.Click(uIEntretenimentoCustom, new Point(90, 15));
// Click 'Mulher' custom control
Mouse.Click(uIMulherCustom, new Point(90, 9));
// Click 'Esportes' custom control
Mouse.Click(uIEsportesCustom, new Point(84, 18));
// Click 'Homem' custom control
Mouse.Click(uIHomemCustom, new Point(82, 16));
// Click 'Tecnologia' custom control
Mouse.Click(uITecnologiaCustom, new Point(85, 8));
// Click 'Vídeos' custom control
Mouse.Click(uIVídeosCustom, new Point(70, 11));
}
有没有办法通过某种定位器捕获这些元素(这些元素没有id)?像这样:
public HtmlCustom UIHomemCustom
{
get
{
if ((this.mUIHomemCustom == null))
{
this.mUIHomemCustom = new HtmlCustom(this);
#region Search Criteria
this.mUIHomemCustom.SearchProperties["TagName"] = "LI";
this.mUIHomemCustom.SearchProperties["Id"] = null;
this.mUIHomemCustom.SearchProperties[UITestControl.PropertyNames.Name] = null;
this.mUIHomemCustom.FilterProperties["Class"] = null;
this.mUIHomemCustom.FilterProperties["ControlDefinition"] = "data-value=\"201405231131464799\"";
this.mUIHomemCustom.FilterProperties["InnerText"] = "Homem";
this.mUIHomemCustom.FilterProperties["TagInstance"] = "8";
this.mUIHomemCustom.FilterProperties["Xpath"] = "#default > div.wrapper > div.menu > div > ul > li:nth-child(5)";
this.mUIHomemCustom.WindowTitles.Add("http://cms.home.psafe.com/");
#endregion
}
return this.mUIHomemCustom;
}
}
这是菜单:
答案 0 :(得分:3)
关于CODEDUI播放的一个有趣的事情是它不一定考虑用户在录制期间的时间因素。这些是我多年来学到的关于这类错误的事情......
答案 1 :(得分:3)
进入用户界面地图,将FilterProperty
的{{1}}更改为InnerText
。首先应用搜索属性 - 如果找到一个完全匹配,它甚至不会查看过滤器属性。在这种情况下,关于控件(文本值)最重要的是过滤器属性。
它正在尝试查找没有ID的SearchProperty
标记。毫无疑问,它会找到多个匹配项。然后它应用过滤器属性,这些属性可能是从页面加载到页面加载的变化。
您还可以将<LI>
属性应用于ID
标记,然后更新UI地图搜索属性,以便搜索该特定ID,这也可以解决问题。
通常,当您将Coded UI与Web应用程序一起使用时,最好确保页面上的所有内容都具有唯一的“ID”属性。这使得Coded UI更容易归零您尝试与之交互的页面元素。
答案 2 :(得分:2)
我遇到了类似的问题并遇到了这个问题。在我的情况下,我使用较旧的CodedUI测试,这些测试是用较旧版本(12.0.21005.1)录制的。相同的错误消息(&#34;播放无法找到具有给定搜索属性的控件&#34;)并且错误明确提到了它无法在页面上找到的文本输入。
我的答案是,当页面发生变化时(点击上一页的链接后),BrowserWindow对象正在丢失它的引用。我不知道为什么。
解决方案是在日志语句中调用BrowserWindow.TryFind(),然后按先前记录的方式找到所有工作。
Jus认为,如果其他人有这个问题,我会分享。