使用MTM一起运行多于1时,编码的ui测试失败

时间:2014-10-30 11:39:14

标签: coded-ui-tests mtm

我有一个项目计划设置,其中包含一些自动化测试。整个环境似乎设置正确,即控制器已注册到团队项目集合,并且代理程序在实验室中的客户端设置的桌面上以交互方式运行。

这是我面临的问题。我有100个自动测试。如果我一次运行它们就可以正常工作。

如果我运行了2个或更多,它们会在第2次测试时失败并出现以下异常。

该控件无效或无效。

如果我独立运行任何一个测试,它们都会每次都通过。

我猜这与运行之间的状态有关。

我的测试初始化​​如下所示:

[TestInitialize]
        public void Init()
        {
            Playback.PlaybackSettings.WaitForReadyLevel = WaitForReadyLevel.AllThreads;
            Playback.Wait(5000);
            AppManager.EnsureMyAppIsRunning();
            AppManager.SetTestEssentials(); 
        }

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。

我有一个名为AppManager的自定义静态类,它处理与applicationUnderTest的连接。

public static ApplicationUnderTest LaunchApplicationUnderTest(string applicationPath, bool closeOnPlaybackCleanup)
      {
         var processes = Process.GetProcessesByName("MyApplication");

         if (processes.Length > 0)
         {
            _application = ApplicationUnderTest.FromProcess(processes[0]);
         }
         else
         {
            _application = ApplicationUnderTest.Launch(applicationPath);
            _application.CloseOnPlaybackCleanup = closeOnPlaybackCleanup;
         }

         return _application;
      }

在这个课程中,我还有一个静态的UIMap。这意味着UIMap在测试运行开始时创建一次,并且在测试运行之间不会更新。

所以我在我的ApplicationManager中实现了一个新方法:

public static void ResetUIMap()
       {
           _map = new UIMap();
       }

然后我从test initialize中调用它:

[TestInitialize]
        public void Init()
        {
            AppManager.EnsureApplicationUnderTestIsRunning();
            AppManager.SetTestEssentials();
            AppManager.ResetUIMap(); 
        }