播放无法在Coded UI中找到具有给定搜索属性的控件

时间:2015-01-29 16:59:26

标签: c# visual-studio coded-ui-tests

我是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;
            }
        }

这是菜单:

Menu

3 个答案:

答案 0 :(得分:3)

关于CODEDUI播放的一个有​​趣的事情是它不一定考虑用户在录制期间的时间因素。这些是我多年来学到的关于这类错误的事情......

  1. 当前窗口或控件不是Top Most窗口。
  2. 搜索条件过于严格,请问自己此搜索条件中是否存在与录制内容不同的内容。在这种情况下,我可以看到一个可能的问题:“data-value = \”201405231131464799 \“”这个数字每次都一样吗?
  3. 在准备完成之前搜索控件。通过调用(在您的情况下)Custom.WaitForReady()
  4. 来解决此问题
  5. 我也看过这个(我不完全理解)因为这些录音没有X,Y坐标;除了第二个参数中定义的Point。如果录制屏幕尺寸和播放屏幕尺寸不相同,有时(但不总是)播放“无法找到控件”。您可以尝试省略点参数。
  6. 该元素根本不可见。

答案 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认为,如果其他人有这个问题,我会分享。