2012-08-03 66 views
3

我做了一個簡單的PrintScreen方法,當我的自動化測試失敗時使用。這只是我可以通過電子郵件發送錯誤和當時屏幕的一個打印屏幕。 這是PrintScreen.Save()的代碼的樣子。當我在我的電腦上運行測試如何可靠地將「PrintScreen」(保存屏幕內容)通過RDP連接?

public static class PrintScreen 
{ 
    public static string Save(string fileName) 
    { 
     var printScreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); 
     var graphics = Graphics.FromImage(printScreen); 
     graphics.CopyFromScreen(0, 0, 0, 0, printScreen.Size); 
     if (File.Exists(fileName)) 
      File.Delete(fileName); 
     printScreen.Save(fileName, ImageFormat.Jpeg); 
     Thread.Sleep(500); 
     return fileName; 
    } 
} 

的方法工作正常。但我們使用另一臺計算機進行計劃的自動化測試。我通過RDP連接到它(自動化測試需要與桌面進行交互,在計算機被鎖定時無法運行。)這是我的問題。有時候,打印屏幕沒有在屏幕上。

所以我的問題是這樣的:有沒有其他的方式來寫一個「更好」的方法,或者在我的當前方法有什麼問題嗎?任何建議,歡迎。

我的調查結論是這樣的。

  • 屏幕保護程序或simular滅活。
  • 它在我的本地機器上完美運行。
  • 當我調試它時,一切正常。
  • 遠程計算機只有一個屏幕。

從保存到我丟失的文件可能有任何錯誤?

問候 喬納斯

+3

「有時候,打印屏幕沒有顯示屏幕」意味着你得到一個錯誤,你會得到一個空白的圖像......? – Alex 2012-08-03 08:04:32

+3

'Thread.Sleep'已經看起來有嫌疑了(除了當前遇到的任何問題) - 爲什麼它在那裏? – 2012-08-03 08:04:54

+0

@Alex文件中的輸出爲空或文件dosn't不存在。 – 2012-08-03 08:23:56

回答

0

很抱歉打擾你這個問題的傢伙..但是有沒有在代碼中的任何具體的錯誤。 事實證明,這是反病毒程序正在刪除一些這些文件,但不是所有人。我的本地計算機上的病毒程序並不相同。 我現在已經成功地將我的流程添加爲安全流程,現在我認爲它可行。我試了幾次,它效果更好。

感謝您的回覆,他們讓我想起我的代碼更加深刻,並且很抱歉花費您的時間。 // Jonas

+1

[Rubber Ducking](http://en.wikipedia.org/wiki/Rubber_duck_debugging)沒有任何問題。 – 2012-08-03 09:27:22