持续集成的C#GUI测试

持续集成的C#GUI测试,c#,unit-testing,user-interface,continuous-integration,C#,Unit Testing,User Interface,Continuous Integration,我有一个WPF应用程序和一组GUI单元测试。这些测试加载应用程序,然后移动鼠标并单击内容。如果我在登录时运行它,这可以正常工作 但是,当测试在我们的持续集成服务器上运行时,鼠标总是将其位置报告为(0,0)。如果我让鼠标移动,然后检查它的位置,它仍然是(0,0) 我们在运行服务时选中了“允许服务与桌面交互”,并且Environment.UserInteractive为true 此外,如果我在本地启动一个测试运行,然后锁定屏幕,鼠标也会有相同的行为(位置始终为0,0) 作为服务运行时如何使用鼠标?我

我有一个WPF应用程序和一组GUI单元测试。这些测试加载应用程序,然后移动鼠标并单击内容。如果我在登录时运行它,这可以正常工作

但是,当测试在我们的持续集成服务器上运行时,鼠标总是将其位置报告为(0,0)。如果我让鼠标移动,然后检查它的位置,它仍然是(0,0)

我们在运行服务时选中了“允许服务与桌面交互”,并且Environment.UserInteractive为true

此外,如果我在本地启动一个测试运行,然后锁定屏幕,鼠标也会有相同的行为(位置始终为0,0)

作为服务运行时如何使用鼠标?

我认为这可以解释为什么应用程序无法获得预期的鼠标位置。我假设您正在Vista和更高版本上运行测试

以下是我认为正在发生的事情。您的服务在会话0中运行,该会话是非交互式会话。所以那里根本不存在鼠标

锁定桌面时,Windows会切换到WinLogon桌面并窃取鼠标。在普通桌面上运行的应用程序不再有鼠标可玩。

我认为这可以解释为什么应用程序没有达到预期的鼠标位置。我假设您正在Vista和更高版本上运行测试

以下是我认为正在发生的事情。您的服务在会话0中运行,该会话是非交互式会话。所以那里根本不存在鼠标


锁定桌面时,Windows会切换到WinLogon桌面并窃取鼠标。在普通桌面上运行的应用程序不再有鼠标可玩。

这些UI测试是如何创建的?编码用户界面?您的CI服务器使用什么?UI测试只需启动我们的应用程序,然后使用System.Windows.Forms.Cursor.Position和user32.dll移动并单击鼠标。CI使用Pulse,但这只是从命令行开始测试。请研究在UI测试中使用实际的UI测试框架,如编码UI。你是如何验证测试通过还是失败的?这是MSTest。通过查看编码的UI,我发现:这似乎表明我需要作为流程而不是服务运行。但我不知道如何从CI服务器上执行此操作。请查看。它还有一个额外的好处,就是允许您将应用程序启动到特定会话中。这些UI测试是如何创建的?编码用户界面?您的CI服务器使用什么?UI测试只需启动我们的应用程序,然后使用System.Windows.Forms.Cursor.Position和user32.dll移动并单击鼠标。CI使用Pulse,但这只是从命令行开始测试。请研究在UI测试中使用实际的UI测试框架,如编码UI。你是如何验证测试通过还是失败的?这是MSTest。通过查看编码的UI,我发现:这似乎表明我需要作为流程而不是服务运行。但我不知道如何从CI服务器上执行此操作。请查看。它还有一个额外的好处,那就是允许您在特定会话中启动应用程序。