Отладка WindowsPhoneTestFramework AutomationClient

Я использовал WindowsPhoneTestFramework и отлично, но он не поддерживает некоторые функции, которые мне нужны, такие как установка ширины и высоты элемента изменения макета эмулятора для тестирования в альбомной и портретной ориентации и т. Д. При попытке добавить Простые команды, такие как ширина и высота, по какой-то причине не работают, и здесь возникает необходимость отладки AutomationClient. Например, мне нужно посмотреть, что происходит в SetWidthCommand, который я создал в WindowsPhoneTestFramework.Client.AutomationClient.Remote, и понять, почему свойство не обновляется в тестируемом приложении.

Я создал команду SetWidth и вызов из консоли, как: setWidth id=widthValue

Я могу отлаживать, пока не доберусь до ApplicationAutomationController, где создается команда с AutomationIdentifier и значением, а после SyncExecuteCommand я получаю результат как false. Это означает, что что-то не так в клиенте, поэтому как мне отладить SetWidthCommand в Client.AutomationClient. Удаленный Это SetWidthCommand в Client.AutomationClient.Remote

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();
    }

Спасибо.

1 ответ

Каркас работает по:

Гостья

Клиент

  • клиент работает в потоке внутри приложения
  • клиент подключается к службе, а затем непрерывно опрашивает команды
  • когда клиент получает команду, он обрабатывает команду, используя часть кода "частичный класс" - например, в https://github.com/Expensify/WindowsPhoneTestFramework/tree/master/Client/AutomationClient/Remote
  • как часть этой обработки, клиент должен всегда возвращать результат в службу

Чтобы добавить команду или результат

Поскольку этот механизм использует WCF, то, если вы хотите добавить новую Команду или новый Результат к обработке, вам сначала нужно будет добавить их на Хост, затем вам нужно будет обновить код клиента - для этого вам нужно будет необходимо использовать инструменты Visual Studio для обновления автоматически сгенерированных классов WCF в https://github.com/Expensify/WindowsPhoneTestFramework/tree/master/Client/AutomationClient/Service%20References

Это обновление 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);
    };
});

Это будет использоваться для обработки любого GenericCommand с pleaseDo поле "MyKey"

отладка

Исходя из вашего вопроса, я предполагаю, что вы уже успешно отлаживаете хост.

Самый простой способ отладки на стороне клиента - это:

  • сначала запустите хост (например, консоль в отладчике)
  • затем запустите приложение в отладчике - оно должно запуститься и подключиться к службе WCF на хосте.

Я надеюсь, что это поможет... если нет, возможно, попробуйте опубликовать пример кода большего размера (возможно, с помощью gist или github)

Другие вопросы по тегам