2011-12-20 62 views
1

好吧,我正在WatiN中運行測試,並使用SendKeys方法。根據MSDN網站我可以輸入:發送多個按鍵WatiN

System.Windows.Forms.SendKeys.SendWait("{LEFT 2}"); 

而且這將進入左側兩次。然而這不起作用,我相信因爲應用程序在每次按鍵之間需要時間。我爲了做我需要的程序來做我在每次按鍵之間使用Thread.Sleep,以確保他們正在閱讀。 有沒有更高效/正確的方法來做到這一點?這是我目前的方法代碼:

System.Windows.Forms.SendKeys.SendWait("{LEFT}"); 
Thread.Sleep(500); 
System.Windows.Forms.SendKeys.SendWait("{LEFT}"); 
Thread.Sleep(500); 
System.Windows.Forms.SendKeys.SendWait("{ENTER}"); 
+0

我在嘗試調試時遇到了這個問題。我認爲*發生的事情是sendkey發送到活動窗口。並且因爲我設置了一個斷點,所以活動窗口被更改爲visual studio。 – 2011-12-20 15:34:21

+0

這可能有幫助... http://stackoverflow.com/questions/5597848/key-strokes-in-watin – 2011-12-20 17:03:39

+0

謝謝,但我的問題不是它不會工作。按鍵是閱讀,只是我想知道是否有一個更聰明的方式來做到這一點。 – 2011-12-20 17:50:13

回答

2

不幸的是,我不相信有。據MSDN有帶的SendKeys時間問題:

SendKeys類是容易計時問題,其中一些 開發商不得不解決。更新後的實現是 仍然容易受到時間問題的影響,但速度稍快,並且可能需要更改變通方法 。

SendKeys類嘗試先使用先前的實現 ,如果失敗,則使用新的 實現。

因此,SendKeys類在不同的操作系統上的行爲可能不同 。 此外,SendKeys類 使用新的實現時,SendWait方法將不會等待 消息發送到另一個進程時處理。如果 不管 操作系統如何,您的應用程序都依賴於一致的行爲,您可以通過將以下應用程序設置添加到 app.config文件中,強制SendKeys類使用新的 實現。

<appSettings> 
    <add key="SendKeys" value="SendInput"/> 
</appSettings> 

要強制SendKeys類使用以前的實現,使用值 「JournalHook」 代替。

您可以嘗試在實現之間切換以查看結果是否有變化。

或者,根據此post只需使用Thread.Sleep(0);您的輸入應該工作後。不是最優雅的解決方案,但如果它有效,它將比500ms的停頓更快。

+0

我不知道,睡眠(0)不適合我。他們仍然沒有閱讀。但是,我看起來真的沒有更好的方法來做到這一點。 – 2011-12-20 16:07:59