2016-07-25 127 views
0

我希望在自动化测试开始时检查应用程序是否开放。我可以检查过程由做运行以下检查Windows应用程序是否正在运行(而不是进程)

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

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

+1

“windows进程”和“windows应用程序”之间有什么不同? – adv12

+0

查看任务管理器,应用程序和进程都有一个选项卡。与我的应用程序相对应的进程开始运行,并在单击图标时显示在进程菜单右侧,但应用程序实际上并未显示在“应用程序”菜单中,直到稍后实际打开窗口时才显示。我想确保这个窗口是开放的。不仅仅是这个过程正在运行。我接受任何方法来检查这一点。 –

+0

@Nate winforms或WCF? – BWA

回答

0

uITestControl.Exists奏效了我。

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

+1

虽然此代码片段可能会解决问题,但[包括解释](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于提高帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要使用解释性注释来挤占代码,因为这会降低代码和解释的可读性! – FrankerZ

0

Apllication is proces。 如果您可以修改应用程序,则可以在应用程序启动时创建文件并在最后删除它。所以你可以chceck文件存在。如果文件存在应用程序启动/启动。

如果你需要的信息时,创建形式主要用途:

的WinForms Form.Shown事件。

WPFLoaded事件

+0

这对我有效,但是,我需要确保应用程序已完全加载并准备好在使用之前使用..这是我试图解决的问题..希望有意义 –

2

有类过程已经是一个方法,你可以用它来检查,如果有用户界面的应用程序已经全面启动:

Process.WaitForInputIdle(int milliseconds)

这将等待到milliseconds毫秒,使消息循环变为空闲状态(并返回一个布尔值来指示成功状态)。根据您等待的应用程序,您可能需要等待30秒或更长时间。

可能为你工作,但请注意,根据我对某些应用程序的经验,它不是完全可靠的!

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

+0

有没有方式为我检查过程是否准备好为用户输入?而不是等待它做好准备?如果它已经准备好了呢? –

+0

@Nate'WaitForInputIdle()'确认它已准备好用于用户输入。如果已经准备好了,'WaitForInputIdle()'立即返回。您是否阅读了我在答案中发布的链接中的文档? –

+0

我在找的是'uITestControl.Exists'。有了这个,我可以做'if(uITestControl.Exists == true){//应用程序可以使用} else {//应用程序没有准备好}' 你只需要确保'uITestControl'是一块应用程序只在应用程序实际运行时才有效。谢谢您的帮助! –

1

当一个进程启动时,你可以说应用程序已经启动。 你想要的是等到应用程序启动过程完成或没有完成。

这意味着,当进程启动时,应用程序启动开始。当应用程序启动完成时,已准备好用于用户输入。所以我认为你应该看看下面的问题和答案。

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

+0

这与我正在寻找的更接近,但我如何使用它来检查应用程序是否已准备好用于用户输入。有没有办法,我可以检查,所以我可以说 '如果(InputIdle ==真){ // 做一些 } 其他 //打开application' –

+0

根据[这](HTTP任何布尔属性:/ /stackoverflow.com/q/1404658/6170142),因为您询问是否有任何第三方应用程序已准备好用于用户输入,所以通常无法检测。看看[this](http://stackoverflow.com/q/1404658/6170142)问题。 –

相关问题