好的,所以我在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}");
最佳答案
不幸的是,我不相信那里。根据MSDN的说法,SendKeys存在计时问题:
SendKeys类易受时序问题的影响,有些
开发人员不得不变通。更新的实现是
仍然容易受到时序问题的影响,但速度稍快一些,可能
需要更改解决方法。
SendKeys类尝试使用
首先使用先前的实现,如果失败,则使用新的
实施。
结果,SendKeys类的行为可能有所不同
在不同的操作系统上。此外,当SendKeys类
使用新的实现,SendWait方法将不会等待
将消息发送到另一个进程时要处理的消息。如果
您的应用程序依赖一致的行为,无论
操作系统,您可以强制SendKeys类使用新的
通过将以下应用程序设置添加到您的实施中
app.config文件。
<appSettings>
<add key="SendKeys" value="SendInput"/>
</appSettings>
若要强制SendKeys类使用以前的实现,请改用值“ JournalHook”。
您可以尝试在实现之间进行更改,以查看结果是否有所变化。
或者,根据此post,在您的输入应该起作用之后,只需使用
Thread.Sleep(0);
。这不是最优雅的解决方案,但如果可行,它将比500ms暂停更快。关于c# - 发送多个按键WatiN,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8577427/