1

MSFT が提供する UI オートメーション フレームワークを使用して WPF アプリケーションをテストしようとしています。アプリケーションのビジュアル コントロールを操作するために作成されたコマンドレットを呼び出す、いくつかの PowerShell スクリプトが作成されました。

アプリケーション内に「DropDownEntry」というエントリを持つドロップダウンがあります。私のコマンドレットでは、次のようにしようとしています:

 AutomationElement getItem = DropDown.FindFirst(TreeScope.Descendants,
 new AndCondition(
 new PropertyCondition(AutomationElement.ControlTypeProperty,ControlType.ListItem),
 new PropertyCondition(AutomationElement.NameProperty, "DropDownEntry",PropertyConditionFlags.IgnoreCase)));

上記のスニペットは、実行時に「null」を返します。これは、基本的に、上記のロジックがドロップダウン エントリを見つけることができなかったことを意味します。

なぜこれが起こっているのか誰か教えてもらえますか?コントロールの名前と値を確認しました。すべてが順調に進んでいるようです。なぜこれが起こるのかわかりません。どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

2

自動化するのはDropDownコントロールであるため、DropDownがドロップダウンされるまで、UIAutomationを介して子アイテムを使用できない可能性があります。

DropDown要素からExpandCollapseパターンを取得してから、そのExpandメソッドを呼び出す必要があります。

パターンを把握するのに役立つ拡張メソッドをいくつか作成しました。これが1つの例です

public static class PatternExtensions
{
    public static ExpandCollapsePattern GetExpandCollapsePattern(this AutomationElement element)
    {
        return element.GetPattern<ExpandCollapsePattern>(ExpandCollapsePattern.Pattern);    
    }

    public static T GetPattern<T>(this AutomationElement element, AutomationPattern pattern) where T : class
    {
        object patternObject = null;
        element.TryGetCurrentPattern(pattern, out patternObject);

        return patternObject as T;
    }
}

次のように使用します。

DropDown.GetExpandCollapsePattern().Expand()

次に、元のコードを実行して子要素を見つけることができます。

于 2010-04-20T08:27:08.950 に答える
1

まだ行っていない場合は、UISpyを使用してアプリケーションを調べて、プロパティを確認することをお勧めします。

于 2010-04-19T21:59:33.270 に答える