编码 UI 测试线程问题/定期执行重复操作

Coded UI Test issues with threads / performing repeated actions periodically

我在内置于 VB 的系统中进行自动化测试,因此我无法使用 "Coded UI Test Builder" 工具在此系统中进行大量控制。话虽如此,我构建了一个方法来截屏并比较区域以验证系统是否抛出错误window(不是真正的window,我也无法使用该工具获取此错误)并且这个函数在另一个线程中被定期调用,但我收到了异常:

Microsoft.VisualStudio.TestTools.UITest.Extension.UITestException: The Coded UI Test is running in Single Thread Apartment (STA) mode of COM. In this mode, all the playback calls should happen from the TestMethod thread only and UITestControl should not be shared across TestMethods.

然后我发现UITest不支持多线程,每次与系统交互后我都被迫调用该函数来验证错误(例如生成报告,验证错误,关闭报告,验证错误)。

可能是更好的方法或软件设计模式,但我才刚刚开始进行自动化测试,不知道应该如何改进该测试。

我的问题是:这是更好的方法吗?这是什么。

没错。 Coded UI 不支持多线程,因为它写在异常中, UITestControl 不能在多个测试方法中共享。

但是,您可以启动另一个线程,在不使用 Coded UI 及其回放的情况下制作屏幕截图。如果您要查找特定的消息框,可以将 Coded UI 函数与 WinApi 函数结合使用。您可以从另一个线程 运行 与您的编码 UI.

并行调用 WinApi 函数

我建议避免多线程并坚持使用编码 UI 顺序方法。那是当你执行一个操作(鼠标点击、键盘输入等)然后验证与 UI 的交互是否按预期工作时。

如果您的错误消息偶尔出现并阻止其他控件,您可以考虑使用 Playback.Cleanup() (about Cleanup() on MSDN)。当测试播放中断或完成时,将自动调用此方法。如果您的错误消息由模态对话框表示,那么我假设其他控件将被阻止。当 Playback 无法对控件执行所需的操作时,它会停止并调用 Cleanup() 方法,您可以在其中明确检查您的预期错误是否导致播放停止。

但我仍然建议使用顺序方法并检查 UI 与编码 UI 方法(断言等)交互的结果

希望其中一项对您有所帮助。如果不是,请提供有关您正在努力处理的错误消息的附加信息。