我希望在自动化测试开始时检查应用程序是否已打开。我可以通过执行以下操作来检查进程是否正在运行
foreach (Process proc in Process.GetProcesses())
{
if (proc.ProcessName.Contains(name))
{
return true;
}
}
但是,我想要找到的进程在应用程序实际打开之前大约一分钟启动,并准备好被测试方法使用(它是一个非常慢的启动应用程序)。上面的代码示例查看所有正在运行的Windows进程,但我想知道,有没有办法做类似的方法,但要看看运行的Windows应用程序?
答案 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语句,如果尚未打开,可以打开应用程序,如果已经打开,则不执行任何操作。