Отладка 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 ответ
Каркас работает по:
Гостья
- тестовый хост - это либо скрипт specflow, либо консольное приложение
- этот тестовый хост предоставляет HTTP-сервер, предоставляющий службу WCF - https://github.com/Expensify/WindowsPhoneTestFramework/blob/master/Server/WCFHostedAutomationController/Service/IPhoneAutomationService.cs
- основной метод, представленный здесь
GetNextCommand
а такжеSubmitResult
GetNextCommand
возвращает любой из классов, полученных изCommandBase
- один из этих классов - https://github.com/Expensify/WindowsPhoneTestFramework/tree/master/Server/WCFHostedAutomationController/CommandsSubmitResult
ожидает любой из классов, полученных изResultBase
- один из этих классов - https://github.com/Expensify/WindowsPhoneTestFramework/tree/master/Server/WCFHostedAutomationController/Results
Клиент
- клиент работает в потоке внутри приложения
- клиент подключается к службе, а затем непрерывно опрашивает команды
- когда клиент получает команду, он обрабатывает команду, используя часть кода "частичный класс" - например, в 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
Как только они обновлены, вы можете написать частичный код класса для вашей новой Команды в Клиенте.
Альтернатива
В качестве альтернативного подхода существует "общая" пара команд и результатов -
- GenericCommand https://github.com/Expensify/WindowsPhoneTestFramework/blob/master/Server/WCFHostedAutomationController/Commands/GenericCommand.cs
- SuccessResult - "ResultText" можно использовать для любого сообщения - https://github.com/Expensify/WindowsPhoneTestFramework/blob/master/Server/WCFHostedAutomationController/Results/SuccessResult.cs
Если вы хотите использовать их, то общие команды передаются обработчикам, статически зарегистрированным в 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 на хосте.
- Обычно вы можете устанавливать точки останова в пределах ваших частичных классов Command.
- Основной цикл выполнения находится в https://github.com/Expensify/WindowsPhoneTestFramework/blob/master/Client/AutomationClient/AutomationClient.cs
GetAndProcessNextCommand
является ядром цикла обработки в цикле выполнения.
Я надеюсь, что это поможет... если нет, возможно, попробуйте опубликовать пример кода большего размера (возможно, с помощью gist или github)