Windows phone 7 调试WindowsPhoneTestFramework自动客户端

Windows phone 7 调试WindowsPhoneTestFramework自动客户端,windows-phone-7,wp7test,Windows Phone 7,Wp7test,我使用了WindowsPhoneTestFramework,它非常棒,但它不支持我需要的一些功能,例如设置元素的宽度和高度,以更改模拟器的布局,以便在横向和纵向中进行测试,由于某些原因,在尝试添加诸如宽度和高度之类的简单命令时,它不起作用,因此需要调试AutomationClient。 例如,我需要查看我在WindowsPhoneTestFramework.Client.AutomationClient.Remote中创建的SetWidthCommand中发生的情况,并了解为什么在测试的应用程序

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

我已经从控制台创建了SetWidth命令和调用,比如:SetWidth id=widthValue

我可以调试,直到到达ApplicationAutomationController,其中命令 AutomationIdentifier和值被创建,在SyncExecuteCommand之后,我得到的结果为false。这意味着客户端出现了问题,那么如何调试Client.AutomationClient.Remote中的SetWidthCommand 这是Client.AutomationClient.Remote中的setwidth命令

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

谢谢。

框架的工作原理是:

主机

  • 测试主机是specflow脚本或控制台应用程序
  • 此测试主机提供一个HTTP服务器,提供WCF服务-
  • 这里提供的主要方法是
    GetNextCommand
    SubmitResult
    • GetNextCommand
      返回从
      CommandBase
      派生的任何类-其中一个类-
    • SubmitResult
      需要从
      ResultBase
      派生的任何类-其中一个类-
客户

  • 客户端在应用程序内的线程上运行
  • 客户端连接到服务,然后连续轮询命令
  • 当客户端收到命令时,它使用代码的“部分类”部分处理该命令-例如,在
  • 作为该处理的一部分,客户机必须始终向服务返回结果
添加命令或结果

由于此机制使用WCF,因此如果要向处理中添加新命令或新结果,则首先需要将这些命令或结果添加到主机,然后需要更新客户端代码-为此,需要使用Visual Studio工具更新中自动生成的WCF类

这个WCF更新可以非常灵活地完成-但这是“正常”的WCF操作-

更新这些命令后,就可以在客户机中为新命令编写部分类代码

备选方案

作为替代方法,有一个“通用”命令和结果对可用-

  • 通用命令
  • SuccessResult-“ResultText”可用于任何消息-
如果希望使用这些命令,则将通用命令传递给在中静态注册的处理程序

e、 g.您可以注册如下内容:

GenericCommand.AddHandlerFactory("MyKey", (command, action) => {
    return (command) => {
        var result = new SuccessResult() {ResultText = "some example text" };
        result.Send(command.Configuration);
    };
});
这将用于处理任何带有“MyKey”的
pleaseDo
字段的GenericCommand

调试

根据您的问题,我假设您已经成功调试了主机

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

  • 首先启动主机(例如调试器中的控制台)
  • 然后在调试器中启动应用程序-它应该启动并连接到主机内的WCF服务。
    • 通常可以在命令分部类中设置断点
    • 主运行循环处于运行状态
    • GetAndProcessNextCommand
      是运行循环中处理周期的核心


我希望这有助于。。。如果没有,可以尝试发布一个更大的代码示例(可能使用gist或github)

ypu可以解释更多关于“它不工作”的含义吗?编辑问题以解释发生了什么-您是否看到异常?不是开始了吗?它是否启动但未命中断点?我会尽力帮忙:)你在问什么问题?Stackoverflow擅长提问和回答问题。请不要留下评论,而是编辑文本来提问-一个句子,上面写着“为什么?”,“如何?”,或“什么?”(老实说,我想帮你!)我仍然不确定你的问题是什么。。。但我试着解释下面的几点-如果这些都没有帮助。。。请问一个“如何”的问题-因为我真的不明白你在问什么:(是的,谢谢,这是我的问题,我做了以上所有的事情,除了调试部分我不能做。问题解决了,我现在可以调试客户机了:):)如果这是答案,请勾选它接受它-那么其他使用堆栈溢出的人可能会从中受益。欢迎来到堆栈溢出!无法编译注册GenericCommand的代码。错误消息是“名为command的局部变量无法在此范围内声明,因为它将赋予command不同的含义……”。怎么了?