0

引数として渡そうとしてMicrosoft.VisualStudio.TestTools.UITesting.HtmlControls.HtmlDivいるので、探している特定のコントロールを1行で初期化して見つける必要があります(可能であれば)が、それを理解するのに苦労しています。通常の初期化は次のように行われます...

HtmlDiv htmlDiv = new HtmlDiv(htmlDocument) // where htmlDocument is of Microsoft.VisualStudio.TestTools.UITesting.UITestControl
htmlDiv.SearchProperties[HtmlDiv.PropertyNames.Id] = "header";

私はこのようなことをしようとしています...

myFunction(new HtmlDiv(htmlDocument) {
    SearchProperties[HtmlDiv.PropertyNames.Id] = "header"
});

エラーが発生cannot resolve symbol 'SearchProperties'し、Cannot initialize type 'Microsoft.VisualStudio.TestTools.UITesting.HtmlControls.HtmlDiv' with a collection initializer because it does not implement 'System.Collections.IEnumerable'.

これを機能させる方法はありますか?

4

1 に答える 1

0

これを行う方法がわからなかったので、HtmlDocument ラッパー クラスに、見つかった UITestControl を返すメソッドを作成しました。

public class UiHtmlDocument : HtmlDocument {
    public UiHtmlDocument(UITestControl searchLimitContainer) : base(searchLimitContainer) {}

    public T searchHtmlElementByAttributeValues<T>(Dictionary<string,string> propertyExpressions) where T : UITestControl, new() {
        var uiTestControl = Activator.CreateInstance(typeof(T), this);
        foreach (var propertyExpression in propertyExpressions) {
            ((T)uiTestControl).SearchProperties[propertyExpression.Key] = propertyExpression.Value;
        }
        return (T)uiTestControl;
    }
}

とそのように使用...

myFunction(
    browserWindow.htmlDocument.searchHtmlElementByAttributeValues<HtmlDiv>(
        new Dictionary<string, string> { 
            { HtmlDiv.PropertyNames.Class, "footer" } 
        }
    )
);
于 2012-05-16T13:11:32.367 に答える