2012-09-19 42 views
3

我已经使用了WindowsPhoneTestFramework并且很棒,但它不支持我需要的一些功能,比如设置更改模拟器布局的元素的宽度和高度以在横向和纵向测试,等等。由于某些原因,尝试添加简单的命令如宽度和高度时,它不起作用,因此需要调试AutomationClient。 例如,我需要看看在WindowsPhoneTestFramework.Client.AutomationClient.Remote中创建的SetWidthCommand中发生了什么,并理解为什么该属性在测试中的应用程序中未更新。调试WindowsPhoneTestFramework AutomationClient

我创建了SetWidth命令,并从像控制台呼叫:setWidth ID = widthValue

我可以调试,直到我得到的地方,创建与 AutomationIdentifier的命令和值和SyncExecuteCommand后,我得到的ApplicationAutomationController结果作为false.This意味着什么是错的客户端,让我怎么调试Client.AutomationClient.Remote 的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(); 
    } 

谢谢。

+0

can ypu可以解释更多关于'你不工作'的含义吗?编辑问题以解释发生了什么 - 您是否看到异常?它不启动?它是否开始,但没有达到断点?将尽力帮助:) – Stuart

+0

你问什么问题?对于提问和回答问题,Stackoverflow非常出色。请不要留下评论,而是编辑文本以提出问题 - 一个说“为什么?”,“如何?”或“什么?”的句子。 (我正在尝试帮助 - 老实说!) – Stuart

+0

我仍然不确定你的问题是什么......但我试图解释下面的一些观点 - 如果这些都无济于事......请问一个“如何? “问题 - 因为我真的不明白你在问什么: – Stuart

回答

1

框架的工作原理是:

主机

客户端

要添加一个命令或结果

由于这种机制使用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用“的myKey”的pleaseDo

调试

从你的问题,我假设你是已经成功调试主机。

调试客户端的最简单的方法是:


我希望帮助...如果不是,也许尝试发布一个更大的代码示例(也许使用gist或github)

+0

是的,谢谢你,这是我的问题,除了**调试**部分我无法做到这一点,我做了所有上述问题。现在可以调试客户端:) –

+0

:)如果是这样的答案,请勾选它接受它 - 然后使用堆栈溢出的其他人可能会从中受益。欢迎来到堆栈溢出! – Stuart

+0

注册GenericCommand的代码无法编译。 msg的错误是“一个名为command的局部变量不能在这个范围内声明,因为它会给命令赋予不同的含义....”有什么问题? – deepsky