使用CodedUITest方法从快捷方式执行.exe

时间:2014-07-10 20:22:37

标签: c# unit-testing coded-ui-tests

我试图在我的某个测试中添加一些内容,但我无法成功。 基本上我的测试是进入桌面,双击.exe然后关闭它。 它工作正常,但我需要从快捷方式执行该.exe文件,例如我在桌面上有.exe文件的快捷方式,我想访问它。

这是我的.cs代码(部分内容),它启动了我的UI地图方法

[TestMethod]
    public void LaunchPadTestMethod()
    {
        // To generate code for this test, select "Generate Code for Coded UI Test" from the shortcut menu and select one of the menu items.
        this.UIMap.LaunchPadOpen_Close();
    }

这是我的UImap .cs方法

public partial class UIMap
    {



        /// <summary>
        /// LaunchPadOpen_Close - Use 'LaunchPadOpen_CloseParams' to pass parameters into this method.
        /// </summary>
        public void LaunchPadOpen_Close()
        {
            #region Variable Declarations
            WinButton uIExitButton = this.UILoginWindow.UIExitWindow.UIExitButton;
            #endregion

            // Launch '%USERPROFILE%\Desktop\financialApp\financialApp\bin\Debug\financialApp.exe'
            ApplicationUnderTest uILoginWindow = ApplicationUnderTest.Launch(this.LaunchPadOpen_CloseParams.UILoginWindowExePath, this.LaunchPadOpen_CloseParams.UILoginWindowAlternateExePath);

            // Click 'Exit' button
            Mouse.Click(uIExitButton, new Point(39, 16));

        }

        public virtual LaunchPadOpen_CloseParams LaunchPadOpen_CloseParams
        {
            get
            {
                if ((this.mLaunchPadOpen_CloseParams == null))
                {
                    this.mLaunchPadOpen_CloseParams = new LaunchPadOpen_CloseParams();
                }
                return this.mLaunchPadOpen_CloseParams;
            }
        }

        private LaunchPadOpen_CloseParams mLaunchPadOpen_CloseParams;
    }
    /// <summary>
    /// Parameters to be passed into 'LaunchPadOpen_Close'
    /// </summary>
    [GeneratedCode("Coded UITest Builder", "12.0.21005.1")]
    public class LaunchPadOpen_CloseParams
    {


        public  class GestCollURL
        {
            //------------------------------------------Class for getting current URL--------------------
            public static String getCurrentGestCollUrl()
            {

                string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
                //MessageBox.Show(path);

                path = path + @"\financialApp.exe";

                // MessageBox.Show(path);

                return path;
            }
            //--------------------------------------------------------------------------------------------
        }

        #region Fields
        /// <summary>
        /// Launch '%USERPROFILE%\Desktop\financialApp\financialApp\bin\Debug\financialApp.exe'
        /// </summary>

        // ORIGINAL !!!!!!!!!!!!!!!!!
        //public string UILoginWindowExePath = "C:\\Users\\ExtremeSwat\\Desktop\\financialApp\\financialApp\\bin\\Debug\\financialApp.exe" +
        //    "";


        public string UILoginWindowExePath =  GestCollURL.getCurrentGestCollUrl()+
            "";

        /// <summary>
        /// Launch '%USERPROFILE%\Desktop\financialApp\financialApp\bin\Debug\financialApp.exe'
        /// </summary>
        ///

        //ORIGINAL!!!!!!!!!!!!!!!!!!
       // public string UILoginWindowAlternateExePath = "%USERPROFILE%\\Desktop\\financialApp\\financialApp\\bin\\Debug\\financialApp.exe";
        public string UILoginWindowAlternateExePath = GestCollURL.getCurrentGestCollUrl() + "";
        #endregion
}
}

我创建了一个类,其中我有一个静态方法,我找到当前的桌面URL,然后连接我需要的可执行文件。 它有效,但我需要执行快捷方式,例如financialApp.exe的快捷方式

编辑1

从.exe更改为.ink或更改为空将导致我的测试失败

编辑3 - 最终工作版,感谢Simon的建议 此代码块生成我想要的URL

 public class GestCollURL
    {
        public static String getCurrentGestCollUrl()
        {
          string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            //MessageBox.Show(path);
            path = path + @"\financialApp.lnk";
            return path;
        }
    }

此代码重载Launch方法

public static ApplicationUnderTest Launch(ProcessStartInfo startInfo)
        {
            ApplicationUnderTest abba = new ApplicationUnderTest();
            Process launchPad = new Process();
            launchPad.StartInfo.UseShellExecute = startInfo.UseShellExecute;
            launchPad = Process.Start(TestingStuff.LaunchPadOpen_CloseParams.GestCollURL.getCurrentGestCollUrl());

            return abba;
        }

这就是我所说的

(in the same class)
ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.UseShellExecute = true;
            Launch(startInfo);

1 个答案:

答案 0 :(得分:3)

您应该使用此启动重载:ApplicationUnderTest.Launch Method (ProcessStartInfo)。它允许您准确指定启动被测试应用程序的方式。

请确保将UseShellExecute设置为true,因为链接和快捷方式是无法像普通exes一样启动的shell(资源管理器)对象。

  

使用操作系统shell启动进程时,可以   启动任何文档(与之关联的任何已注册文件类型)   具有默认打开操作的可执行文件)并执行操作   在文件上,例如使用Process对象进行打印。什么时候   UseShellExecute为false,您只能使用以逗号启动可执行文件   过程对象。

它可能只使用简单的ProcessStartInfo构造函数,路径作为参数,具体取决于您的上下文。