3

我在VS2010中用CUIT记录了一些测试用例。前一天一切正常。所以,今天我再次运行,所有测试都失败了,并发出警告:以下元素不再可用......我得到了异常:无法在隐藏控件上执行“单击”,这是不正确的,因为所有控件没有隐藏。我在另一台机器上试过,他们也失败了。

有谁知道为什么会这样?是因为 Web 应用程序有别的原因吗?请帮忙,谢谢。

PS:所以我尝试使用与“隐藏控件”相同的控件录制新测试,并且新测试有效!?我不明白为什么。

编辑

当我在录制时尝试捕获元素或控件时,会出现警告“以下元素等等……”。按钮的源代码被称为“隐藏”

public HtmlImage UIAbmeldenImage
    {
        get
        {
            if ((this.mUIAbmeldenImage == null))
            {
                this.mUIAbmeldenImage = new HtmlImage(this);
                #region Search Criteria
                this.mUIAbmeldenImage.SearchProperties[HtmlImage.PropertyNames.Id] = null;
                this.mUIAbmeldenImage.SearchProperties[HtmlImage.PropertyNames.Name] = null;
                this.mUIAbmeldenImage.SearchProperties[HtmlImage.PropertyNames.Alt] = "abmelden";
                this.mUIAbmeldenImage.FilterProperties[HtmlImage.PropertyNames.AbsolutePath] = "/webakte-vnext/content/apps/Ordner/images/logOut.png";
                this.mUIAbmeldenImage.FilterProperties[HtmlImage.PropertyNames.Src] = "http://localhost/webakte-vnext/content/apps/Ordner/images/logOut.png";
                this.mUIAbmeldenImage.FilterProperties[HtmlImage.PropertyNames.LinkAbsolutePath] = "/webakte-vnext/e.consult.9999/webakte/logout/index";
                this.mUIAbmeldenImage.FilterProperties[HtmlImage.PropertyNames.Href] = "http://localhost/webakte-vnext/e.consult.9999/webakte/logout/index";
                this.mUIAbmeldenImage.FilterProperties[HtmlImage.PropertyNames.Class] = null;
                this.mUIAbmeldenImage.FilterProperties[HtmlImage.PropertyNames.ControlDefinition] = "alt=\"abmelden\" src=\"http://localhost/web";
                this.mUIAbmeldenImage.FilterProperties[HtmlImage.PropertyNames.TagInstance] = "1";
                this.mUIAbmeldenImage.WindowTitles.Add("Akte - Test Akte Coded UI VS2010");
                #endregion
            }
            return this.mUIAbmeldenImage;
        }
    }
4

7 回答 7

4

虽然我正在运行 Visual Studio 2012,但我觉得奇怪的是我们在同一天开始遇到同样的问题,我看不出我的网页的编码 UI 测试的 DOM 有任何差异,但出于某种原因 VS是说控件被隐藏并指定了它正在寻找的元素的正确 ID(我验证了 ID 仍然是同一个)。我什至尝试重新录制动作,因为我认为一定有什么改变了,但我得到了同样的错误。

由于这听起来像同一个问题,同时发生我认为这可能与某些自动更新有关?这是我目前最好的猜测,我会调查它,如果我发现任何东西,我会更新我的帖子。

编辑

我删除了更新 KB2870699,它消除了 IE 中的一些漏洞,这解决了我在测试中遇到的问题。此更新是在 9 月 12 日添加的,因此很合适。希望这对您有所帮助。:)

https://connect.microsoft.com/VisualStudio/feedback/details/800953/security-update-kb2870699-for-ie-breaks-existing-coded-ui-tests#tabs

于 2013-09-16T13:23:28.967 回答
3

解决问题的官方链接:

http://blogs.msdn.com/b/visualstudioalm/archive/2013/09/17/coded-ui-mtm-issues-on-internet-explorer-with-kb2870699.aspx

于 2013-09-18T08:34:00.977 回答
1

问题比这更严重!就我而言,我什至无法记录新的编码 UI 测试。在我单击应用程序的任何网页的任何超链接后,编码的 UI 测试构建器无法记录单击“以下元素不再可用......”。

正如 AdrianHHH 所说,显然删除了更新就可以了!

于 2013-09-17T15:58:40.127 回答
0

我在 VS 2012 上遇到了同样的问题。作为一种解决方法,您可以删除该步骤,然后重新录制。这通常有效。

于 2013-11-20T10:02:59.787 回答
0

SearchProperties(或可能)中可能有一个字段FilterProperties具有由网站设置的值,或者表示桌面上的某种窗口 ID。另一种可能是网页标题每天都在变化或访问访问。浏览器的不同执行或对网页的不同访问会产生不同的价值。SearchProperties从(or )中删除这些值FilterProperties或将标题的检查从 anequals更改contains为 a 以获取标题的常量部分应该可以解决问题。编码的 UI 通常会搜索比所需的最小集合更多的值。

在两个记录的测试中比较相同控件的搜索属性等。

评论中给出了基于更新的额外细节:

我解决了一个类似的问题,如下所示。我将类似于您的问题中显示的属性代码复制到一个名为FindMatchingControls. 我检查了返回了多少控件,在我的例子中最多 3 个。我通过将大量文本写入调试文件来检查找到的控件的各种属性。就我而言,我发现LeftandTop属性对于不需要的,即隐藏的控件是负面的。

对于您的代码,而不仅仅是使用该UIAbmeldenImage属性,您可以调用下面的方法。更改表达式,例如

HtmlImage im = UIMap.abc.def.UIAbmeldenImage;

成为

HtmlImage im = FindHtmlHyperLink(UIMap.abc.def);

方法在哪里:

public HtmlImage FindHtmlHyperLink(HtmlDocument doc)
{
    HtmlImage myImage = new HtmlImage(doc);
    myImage.SearchProperties[HtmlImage.PropertyNames.Id] = null;
    myImage.SearchProperties[HtmlImage.PropertyNames.Name] = null;
    myImage.SearchProperties[HtmlImage.PropertyNames.Alt] = "abmelden";
    myImage.FilterProperties[HtmlImage.PropertyNames.AbsolutePath] = "/webakte-vnext/content/apps/Ordner/images/logOut.png";
    myImage.FilterProperties[HtmlImage.PropertyNames.Src] = "http://localhost/webakte-vnext/content/apps/Ordner/images/logOut.png";
    myImage.FilterProperties[HtmlImage.PropertyNames.LinkAbsolutePath] = "/webakte-vnext/e.consult.9999/webakte/logout/index";
    myImage.FilterProperties[HtmlImage.PropertyNames.Href] = "http://localhost/webakte-vnext/e.consult.9999/webakte/logout/index";
    myImage.FilterProperties[HtmlImage.PropertyNames.Class] = null;
    myImage.FilterProperties[HtmlImage.PropertyNames.ControlDefinition] = "alt=\"abmelden\" src=\"http://localhost/web";
    myImage.FilterProperties[HtmlImage.PropertyNames.TagInstance] = "1";
    myImage.WindowTitles.Add("Akte - Test Akte Coded UI VS2010");

    UITestControlCollection controls = myImage.FindMatchingControls();


    if (controls.Count > 1)
    {
        foreach (UITestControl con in controls)
        {
            if ( con.Left < 0 || con.Top < 0 )
            {
                // Not on display, ignore it.
            }
            else
            {
                // Select this one and break out of the loop.
                myImage = con as HtmlImage;
                break;
            }
        }
    }

    return myImage;
}

请注意,以上代码未经编译或测试,应视为想法而非最终代码。

于 2013-09-12T13:23:16.207 回答
0

关闭VS2010,再次“以管理员身份运行”启动它。

于 2013-09-12T13:23:57.213 回答
0

分析 Coded UI 测试失败时最大的问题之一是错误堆栈跟踪指示可能与失败的实际原因完全无关的代码行。

我建议您在测试中启用 HTML 日志记录 - 这将逐步显示 Coded UI 如何尝试执行测试的详细信息 - 以及您的应用程序的屏幕截图。它还将突出显示编码 UI 尝试搜索/操作的红色控件。这对于排除测试失败的实际原因非常有用。

要启用跟踪,您只需将以下代码添加到您的 app.config 文件中——

在此处输入图像描述

于 2016-07-08T13:15:07.843 回答