WPF CodedUI测试:以编程方式启动应用程序

时间:2012-05-14 20:47:35

标签: wpf coded-ui-tests

如果我将登录凭据中输入的操作记录到对话框中,并在UImap1.uitests中调用此Submit()。自动生成的代码如下所示:

 public void Launch()
    {
        #region Variable Declarations
        WpfEdit uIUsernameBoxEdit = this.UIOCC600OILoginWindow.UIUsernameBoxEdit;
        WpfEdit uIPasswordBoxEdit = this.UIOCC600OILoginWindow.UIPasswordBoxEdit;
        WpfButton uIOKButton = this.UIOCC600OILoginWindow.UIOKButton;
        #endregion

        // Type 'username' in 'usernameBox' text box
        uIUsernameBoxEdit.Text = this.LaunchParams.UIUsernameBoxEditText;

        // Click 'passwordBox' text box
        Mouse.Click(uIPasswordBoxEdit, new Point(63, 13));

        // Type '********' in 'passwordBox' text box
        Keyboard.SendKeys(uIPasswordBoxEdit, this.LaunchParams.UIPasswordBoxEditSendKeys, true);

        // Click 'OK' button
        Mouse.Click(uIOKButton, new Point(33, 14));
    }

现在,如果我在我的CodedUI测试类中使用ClassInitialize装饰的方法手动启动应用程序,如下所示:

      [ClassInitialize()]
        public static void MyTestInitialize(TestContext context)
        {
           Process.Start(@"C:\Program Files (x86)\MyCompany\MyApp.exe");
            Playback.Wait(2000);

            var uimap = new LaunchApplicationMap();
            var loginParams = uimap.EnterLoginCredentialsParams;
            loginParams.UIUsernameBoxEditText = "username";
            loginParams.UIPasswordBoxEditSendKeys = Playback.EncryptText("password
");
            uimap.Launch();
            Playback.Wait(5000);
        }

为什么我会得到以下空的异常,如下所示?

enter image description here

这也是堆栈跟踪:

System.NullReferenceException was unhandled by user code
  Message=Object reference not set to an instance of an object.
  Source=Microsoft.VisualStudio.TestTools.UITest.Framework
  StackTrace:
       at Microsoft.VisualStudio.TestTools.UITest.Framework.UITestService.TechnologyManagerByName(String technologyName)
       at Microsoft.VisualStudio.TestTools.UITesting.UITestControl.ValidateSearchProperties()
       at Microsoft.VisualStudio.TestTools.UITesting.UITestControl.FindInternal()
       at Microsoft.VisualStudio.TestTools.UITesting.UITestControl.FindControlIfNecessary()
       at Microsoft.VisualStudio.TestTools.UITesting.UITestControl.SetProperty(String propertyName, Object value)
       at Microsoft.VisualStudio.TestTools.UITesting.WpfControls.WpfEdit.set_Text(String value)
       at UITests.UIMaps.LaunchApplicationMapClasses.LaunchApplicationMap.Launch() in C:\dev\OCC600\Source - Copy\Tests\UITests\UIMaps\LaunchApplicationMap.Designer.cs:line 44
       at UITests.LogsViewTests.MyTestInitialize(TestContext context) in C:\dev\OCC600\Source - Copy\Tests\UITests\LogsViewTests.cs:line 70
  InnerException: 

TIA。

1 个答案:

答案 0 :(得分:3)

您需要初始化播放引擎以在测试方法之外使用CodedUI。该框架自动初始化testinitalize / cleanup方法中的回放/清理,因此您不会在那里看到它。

ClassInitialize / AssemblyInitialize在任何测试开始之前发生,因此您必须调用Playback.Initialize()。