发送多个按键WatiN

时间:2011-12-20 15:04:50

标签: c# watin sendkeys

好的,所以我在WatiN中运行测试,我正在使用SendKeys方法。根据MSDN网站,我可以输入:

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}");

1 个答案:

答案 0 :(得分:3)

不幸的是,我不相信有。根据{{​​3}},SendKeys存在时间问题:

  

SendKeys类容易受到时序问题的影响   开发人员不得不解决。更新后的实施是   仍然容易受到计时问题的困扰,但可能会稍快一些   需要更改变通方法。

     

SendKeys类尝试使用   先前的实现,如果失败,则使用新的   实现。

     

因此,SendKeys类可能表现不同   在不同的操作系统上。 另外,当SendKeys类时   使用新的实现,SendWait方法不会等待   将消息发送到另一个进程时要处理的消息。如果   无论如何,您的应用程序都依赖于一致的行为   在操作系统中,可以强制SendKeys类使用新的   通过将以下应用程序设置添加到您的实现   app.config文件。

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

要强制SendKeys类使用先前的实现,请使用值“JournalHook”。

您可以尝试在实施之间进行更改,以查看结果是否发生了变化。

或者,根据此MSDN,只需在输入后使用Thread.Sleep(0);即可。不是最优雅的解决方案,但如果它工作,它将比500毫秒暂停更快。

相关问题