私はこれで髪を引き裂いています。IE 11 に対して Visual Studio 2012 でビルドされた簡単なコード化された UI テストがあります。ログインしようとしているのは、ユーザーがログインしていることを UI が表示することを確認してからログアウトすることだけです。コード化された UI テストは、ログアウトするまで機能します。ログアウトしようとすると、次のようになります。
TechnologyName: 'Web' ControlType: 'Custom' TagName: 'form' Id: 'logoutForm'
検索条件 Id='logoutForm' && ControlType='Custom' に一致するコントロールが見つかりませんでした ---> System.Runtime.InteropServices.COMException: COM コンポーネントの呼び出しからエラー HRESULT E_FAIL が返されました。
フィルター/検索条件は正しく表示されます。なぜ機能しないのかわかりません。ログアウトボタンの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));