Visual Studio编码的UI测试播放无法找到控件

时间:2013-10-25 04:18:16

标签: visual-studio-2012 coded-ui-tests

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

  

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

     

无法找到与搜索条件匹配的任何控件   Id ='logoutForm'&& ControlType ='Custom'--->   System.Runtime.InteropServices.COMException:错误HRESULT E_FAIL有   已通过调用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>

enter image description here 我只是不确定问题是什么以及它为什么失败。我已经尝试删除空白字段或添加显式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));

3 个答案:

答案 0 :(得分:1)

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

  1. 重新启动Visual Studio,很烦人,但是只要我看到这个错误不应该出现,重启就是一个快速修复。
  2. 如果问题仍然存在:您是否可以将控制权削减到只有TechnologyName:'Web'Id:'logoutForm'?如果对象具有ID,则通常不需要其他信息。
  3. 仍然没有工作?我肯定需要更多信息才能知道出了什么问题:)

答案 1 :(得分:0)

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

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

  2. 您是否尝试过visual studio 2013?我正在使用Ultimate,并且到目前为止工作良好。

答案 2 :(得分:0)

你得到我的每一个同情,我感受到你的痛苦。我不知道我是否面临与您相同的问题,但似乎IE 11和Coded UI似乎* 讨厌 *彼此。当然,当我将IE作为不同的用户运行时,这是我的经验。我已经向微软报告了此消息但没有任何乐趣 - 请参阅此问题的链接:

Cannot run Coded UI tests as different user on Windows 8.1

我的建议(并且你不喜欢它)是做我正在做的事情,并在其上使用旧版本的IE / Visual Studio等维护虚拟机,并在处理编码的UI测试时使用它。可怕但它似乎是唯一的选择。