2016-07-25 168 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)問題。 –

相關問題