1

我用这个把头发扯掉了。我在 Visual Studio 2012 中针对 IE 11 构建了一个简单的编码 UI 测试。我要做的就是登录,检查 UI 是否显示用户已登录,然后注销。编码的 UI 测试一直有效,直到注销。当我尝试注销时,我得到:

TechnologyName:'Web' ControlType:'Custom' TagName:'form' Id:'logoutForm'

未能找到任何与搜索条件匹配的控件 Id='logoutForm' && ControlType='Custom' ---> System.Runtime.InteropServices.COMException: Error HRESULT E_FAIL has been returned from a call to a COM 组件。

过滤器/搜索条件显示正确。我不确定为什么它不起作用。注销按钮的html如下

 <form action="/Account/LogOff" class="navbar-form " id="logoutForm" method="post">  <input name="__RequestVerificationToken" type="hidden" value=""><a class="btn btn-primary btn-sm" href="javascript:document.getElementById('logoutForm').submit()"><i class="icon-remove"></i>  &nbsp;Log off</a>
    </form>

在此处输入图像描述 我只是不确定问题是什么以及为什么会失败。我尝试删除空白字段或添加显式 ID,但均无济于事。我也尝试过使用搜索配置,但似乎没有帮助。在 VS 中,我右键单击超链接并单击定位控件,它会正确突出显示控件。我不知所措。我很感激任何指导。

更新:这是按钮的生成代码

[GeneratedCode("Coded UITest Builder", "11.0.60315.1")]
public class UILogoutFormCustom : HtmlCustom
{

    public UILogoutFormCustom(UITestControl searchLimitContainer) : 
            base(searchLimitContainer)
    {
        #region Search Criteria
        this.SearchProperties["TagName"] = "form";
        this.SearchProperties["Id"] = "logoutForm";
        this.FilterProperties["Class"] = "navbar-form ";
        this.SearchConfigurations.Add(SearchConfiguration.DisambiguateChild);
        this.WindowTitles.Add("someTitle");
        #endregion
    }

    #region Properties
    public HtmlHyperlink UILogoffHyperlink
    {
        get
        {
            if ((this.mUILogoffHyperlink == null))
            {
                this.mUILogoffHyperlink = new HtmlHyperlink(this);
                #region Search Criteria
                this.mUILogoffHyperlink.SearchProperties[HtmlHyperlink.PropertyNames.Id] = "logOffButton";
                this.mUILogoffHyperlink.SearchProperties.Add(new PropertyExpression(HtmlHyperlink.PropertyNames.InnerText, "Log off", PropertyExpressionOperator.Contains));
                this.mUILogoffHyperlink.FilterProperties[HtmlHyperlink.PropertyNames.AbsolutePath] = "document.getElementById(\'logoutForm\').submit()";
                this.mUILogoffHyperlink.FilterProperties[HtmlHyperlink.PropertyNames.Title] = null;
                this.mUILogoffHyperlink.FilterProperties[HtmlHyperlink.PropertyNames.Href] = "javascript:document.getElementById(\'logoutForm\').submit()";
                this.mUILogoffHyperlink.FilterProperties[HtmlHyperlink.PropertyNames.Class] = "btn btn-primary btn-sm";
                this.mUILogoffHyperlink.FilterProperties[HtmlHyperlink.PropertyNames.ControlDefinition] = "class=\"btn btn-primary btn-sm\" href=\"jav";
                this.mUILogoffHyperlink.FilterProperties[HtmlHyperlink.PropertyNames.TagInstance] = "1";
                this.mUILogoffHyperlink.WindowTitles.Add("some title");
                #endregion
            }
            return this.mUILogoffHyperlink;
        }
    }

请注意,搜索配置是我正在尝试的,但通常没有设置。

#region Variable Declarations
        HtmlHyperlink uILogoffHyperlink = this.UIPrefereWindow.UIPrefereDocument.UILogoutFormCustom.UILogoffHyperlink;
        #endregion

        // Click 'Log off' link
        Mouse.Click(uILogoffHyperlink, new Point(26, 23));
4

3 回答 3

1

根据您提供的有限信息,我有一些建议可以帮助您入门:

  1. 重新启动 Visual Studio,很烦人,但每当我看到不应该出现的错误时,重新启动是一个快速修复。
  2. 如果问题仍然存在:您可以将控件缩减为 TechnologyName: 'Web' Id: 'logoutForm' 吗?如果一个对象有一个 ID,通常不需要有其他信息。
  3. 还是行不通?我肯定需要更多信息才能知道出了什么问题:)
于 2013-10-25T13:02:11.907 回答
0

你得到我所有的同情,我感受到你的痛苦。我不知道我是否面临与您相同的问题,但似乎 IE 11 和 Coded UI 似乎 *讨厌* 对方。当然,这是我作为不同用户运行 IE 时的经验。我已将此报告给 Microsoft,但并不高兴 - 请参阅此问题的链接:

无法在 Windows 8.1 上以不同用户身份运行编码 UI 测试

我的建议(你不会喜欢它)是做我正在做的事情并维护一个带有旧版本 IE / Visual Studio 等的 VM,并在进行编码 UI 测试时使用它。可怕,但它似乎是唯一的选择。

于 2014-10-23T15:49:33.713 回答
0

我有 2 条建议给你,希望它们有效:

  1. 你的键盘语言是什么?如果它不是英语(我的键盘也有类似的问题),请将您的设置更改为该设置并重新录制。

  2. 你试过Visual Studio 2013吗?我正在使用 Ultimate,到目前为止工作良好。

于 2013-10-25T07:44:12.350 回答