C# 播放未能在编码的UI中找到具有给定搜索属性的控件

C# 播放未能在编码的UI中找到具有给定搜索属性的控件,c#,visual-studio,coded-ui-tests,C#,Visual Studio,Coded Ui Tests,我是编码UI测试的新手,所以这里有一个“简单”的问题: 尝试在菜单选项中导航时,我记录了动作并尝试播放。我收到以下消息:播放无法找到具有给定搜索属性的控件 以下是录制工具生成的代码: public void NavegarSituacao() { #region Variable Declarations HtmlCustom uINotíciasCustom = this.UIHttpcmshomepsafecomIWindow.

我是编码UI测试的新手,所以这里有一个“简单”的问题:

尝试在菜单选项中导航时,我记录了动作并尝试播放。我收到以下消息:
播放无法找到具有给定搜索属性的控件

以下是录制工具生成的代码:

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;
            }
        }
这是菜单:


关于CODEDUI回放的一个有趣的事情是,它在录制过程中不一定考虑用户的时间因素。这些是我多年来学到的关于这类错误的东西

  • 当前窗口或控件不是最顶部的窗口
  • 搜索条件太严格了,问问自己这个搜索条件中是否有与录音不一样的地方。在这种情况下,我可以看到一个可能的问题:“数据值=\”201405231131464799\”这个数字每次都一样吗
  • 在控件准备就绪之前搜索该控件。这是通过调用(在您的情况下)Custom.WaitForReady()修复的
  • 我也看到了这一点(我不完全理解),因为这些录音没有X,Y坐标;第二个参数中定义的点除外。如果录制屏幕大小和播放屏幕大小不相同,有时(但并非总是)播放“找不到控件”。可以尝试忽略点参数
  • 元素根本不可见

  • 关于CODEDUI回放的一个有趣的事情是,它在录制过程中不一定考虑用户的时间因素。这些是我多年来学到的关于这类错误的东西

  • 当前窗口或控件不是最顶部的窗口
  • 搜索条件太严格了,问问自己这个搜索条件中是否有与录音不一样的地方。在这种情况下,我可以看到一个可能的问题:“数据值=\”201405231131464799\”这个数字每次都一样吗
  • 在控件准备就绪之前搜索该控件。这是通过调用(在您的情况下)Custom.WaitForReady()修复的
  • 我也看到了这一点(我不完全理解),因为这些录音没有X,Y坐标;第二个参数中定义的点除外。如果录制屏幕大小和播放屏幕大小不相同,有时(但并非总是)播放“找不到控件”。可以尝试忽略点参数
  • 元素根本不可见

  • 进入UI映射,将
    InnerText
    FilterProperty
    更改为
    SearchProperty
    。首先应用搜索属性——如果它找到一个完全匹配的,它甚至不查看过滤器属性。在本例中,控件(文本值)最重要的一点是过滤器属性

    它试图找到一个没有ID的
  • 标记。它无疑会找到多个匹配项。然后应用过滤器属性,这些属性可能随页面加载的不同而不同

    您还可以将
    ID
    属性应用于
  • 标记,然后更新UI-map搜索属性,以便它搜索该特定ID,这也将解决问题


    一般来说,在web应用程序中使用编码UI时,最好确保页面上的所有内容都具有唯一的“ID”属性。这使得编码的UI更容易锁定您试图与之交互的页面元素。

    进入UI映射,将
    InnerText
    FilterProperty
    更改为
    SearchProperty
    。首先应用搜索属性——如果它找到一个完全匹配的,它甚至不查看过滤器属性。在本例中,控件(文本值)最重要的一点是过滤器属性

    它试图找到一个没有ID的
  • 标记。它无疑会找到多个匹配项。然后应用过滤器属性,这些属性可能随页面加载的不同而不同

    您还可以将
    ID
    属性应用于
  • 标记,然后更新UI-map搜索属性,以便它搜索该特定ID,这也将解决问题


    一般来说,在web应用程序中使用编码UI时,最好确保页面上的所有内容都具有唯一的“ID”属性。这使得编码UI更容易集中在您试图与之交互的页面元素上。

    我也遇到过类似的问题。在我的例子中,我使用的是较旧的CodedUI测试,这些测试是用稍旧的版本(12.0.21005.1)记录的。相同的错误消息(“回放无法找到具有给定搜索属性的控件”),错误特别提到了在页面上找不到的文本输入

    对我来说,答案是当页面更改时(在单击上一页的链接后),BrowserWindow对象正在丢失其引用。我不知道为什么

    解决方案是在log语句中调用BrowserWindow.TryFind(),然后按先前记录的方式查找所有工作


    Jus认为我会与他人分享,以防其他人有此问题。

    我也遇到过类似的问题。在我的例子中,我使用的是较旧的CodedUI测试,这些测试是用稍旧的版本(12.0.21005.1)记录的。相同的错误消息(“回放无法找到具有给定搜索属性的控件”),错误特别提到了在页面上找不到的文本输入

    对我来说,答案是当页面更改时BrowserWindow对象失去了它的引用(在单击上一个链接之后)