我正用这个撕掉我的头发。我在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> 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));
答案 0 :(得分:1)
根据您提供的有限信息,我有一些建议可以帮助您入门:
答案 1 :(得分:0)
我有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测试时使用它。可怕但它似乎是唯一的选择。