2011-12-20 42 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