3

私はWindowsPhoneTestFrameworkを使用しましたが、素晴らしいですが、横向きや縦向きなどでテストするためにエミュレーターのレイアウトを変更する要素の幅と高さを設定するなど、必要な機能の一部をサポートしていません.追加しようとしている間何らかの理由で幅や高さのような単純なコマンドが機能しないため、AutomationClient をデバッグする必要があります。たとえば、WindowsPhoneTestFramework.Client.AutomationClient.Remote で作成した SetWidthCommand で何が起こっているかを確認し、テスト対象のアプリケーションでプロパティが更新されない理由を理解する必要があります。

SetWidth コマンドを作成し、次のようにコンソールから呼び出します: setWidth id=widthValue

AutomationIdentifier と値を含むコマンドが作成される ApplicationAutomationController に到達するまでデバッグできます。SyncExecuteCommand の後に結果が false になります。これは、クライアントに問題があることを意味するため、Client.AutomationClient で SetWidthCommand をデバッグするにはどうすればよいでしょうか。リモート これは Client.AutomationClient.Remote の SetWidthCommand です。

public partial class SetWidthCommand
{
    protected override void DoImpl()
    {

        var element = GetUIElement();
        if (element == null)
            return;

        if (AutomationElementFinder.SetElementProperty(element, "Width", Value))
        {
            SendSuccessResult();
            return;
        }
        //setWidth ContentPanel 400
        if (ValueCommandHelper.TrySetValue(element, Value.ToString(CultureInfo.InvariantCulture)))
        {
            SendSuccessResult();
            return;
        }
        // if width is missing... then give up
        SendNotFoundResult();
    }

ありがとうございました。

4

1 に答える 1

1

フレームワークは次のように機能します。

ザ・ホスト

クライアント

コマンドまたは結果を追加するには

このメカニズムは WCF を使用するため、新しいコマンドまたは新しい結果を処理に追加する場合は、まずこれらをホストに追加する必要があります。次に、クライアント コードを更新する必要があります。これを行うには、https://github.com/Expensify/WindowsPhoneTestFramework/tree/master/Client/AutomationClient/Service%20Referencesで自動生成された WCF クラスを更新するには、Visual Studio ツールを使用する必要があります。

この WCF の更新は非常に面倒ですが、「通常の」WCF 操作です - http://msdn.microsoft.com/en-us/library/bb628652.aspx

これらが更新されると、クライアントで新しいコマンドの部分クラス コードを記述できます。

代替案

別のアプローチとして、「一般的な」コマンドと結果のペアが利用可能です -

これらを使用する場合は、https://github.com/Expensify/WindowsPhoneTestFramework/blob/master/Client/AutomationClient/Remote/GenericCommand.csに静的に登録されたハンドラーに汎用コマンドが渡されます。

たとえば、次のようなものを登録できます。

GenericCommand.AddHandlerFactory("MyKey", (command, action) => {
    return (command) => {
        var result = new SuccessResult() {ResultText = "some example text" };
        result.Send(command.Configuration);
    };
});

pleaseDoこれは、フィールドが「MyKey」のGenericCommand を処理するために使用されます。

デバッグ

あなたの質問から、私はあなたがすでにホストを正常にデバッグしていると仮定しています。

クライアント側をデバッグする最も簡単な方法は次のとおりです。


それが役立つことを願っています...そうでない場合は、より大きなコードサンプルを投稿してみてください(おそらくgistまたはgithubを使用して)

于 2012-09-19T21:14:10.497 に答える