检查Windows应用程序是否正在运行(不是进程)

时间:2016-07-25 13:28:45

标签: c# automated-tests

我希望在自动化测试开始时检查应用程序是否已打开。我可以通过执行以下操作来检查进程是否正在运行

foreach (Process proc in Process.GetProcesses()) 
{
    if (proc.ProcessName.Contains(name))
    {
        return true;
    }
}

但是,我想要找到的进程在应用程序实际打开之前大约一分钟启动,并准备好被测试方法使用(它是一个非常慢的启动应用程序)。上面的代码示例查看所有正在运行的Windows进程,但我想知道,有没有办法做类似的方法,但要看看运行的Windows应用程序?

4 个答案:

答案 0 :(得分:2)

Process类中已有一种方法可用于检查具有UI的应用是否已完全启动:

Process.WaitForInputIdle(int milliseconds)

这将等待milliseconds ms以使消息循环变为空闲(并返回bool以指示成功状态)。根据您正在等待的应用程序,您可能希望允许30秒或更长时间。

可能适合您,但请注意,根据我对某些应用程序的体验,它并不完全可靠!

Windows API documentation提供了有关WaitForInputIdle()在幕后调用的Windows API函数的更多详细信息。

答案 1 :(得分:1)

启动进程后,您可以说应用程序已启动。 您想要的是等待应用程序启动进度完成与否。

这意味着,当进程启动时,应用程序启动开始。应用程序启动完成后,即可进行用户输入。所以我认为你应该看一下以下问题及其答案。

Programmatically, how does this application detect that a program is ready for input

答案 2 :(得分:0)

Apllication是进程。 如果你可以修改应用程序,在应用程序启动时你可以创建文件,最后删除它。所以你可以chceck文件存在。如果文件存在app启动/启动。

如果在创建主表单时需要信息,请使用:

<强>的Winforms Form.Shown事件。

WPF Loaded活动

答案 3 :(得分:0)

uITestControl.Exists为我做了诀窍。

此方法将返回与正在打开的应用程序窗口的存在相对应的布尔值。这允许创建一个if语句,如果尚未打开,可以打开应用程序,如果已经打开,则不执行任何操作。