发送多个按键 WatiN

发布于 2024-12-22 06:21:35 字数 488 浏览 1 评论 0原文

好的,我正在 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}");

Ok so I am running tests in WatiN and I am using the SendKeys method. According to the MSDN website I can enter:

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

And this will enter left two times. This however does not work, I believe because the application needs time between each keypress. I order to do what I need the program to do I used Thread.Sleep between each keypress to ensure they were getting read. Is there a more efficient/proper way to do this? This is my current method code:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

思念满溢 2024-12-29 06:21:35

不幸的是,我不相信有。根据 MSDN 存在计时问题使用发送键:

SendKeys 类容易受到计时问题的影响,有些
开发人员不得不想办法解决这个问题。更新后的实现是
仍然容易受到计时问题的影响,但速度稍快一些,并且可能
需要更改解决方法。

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

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

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

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

您可以尝试更改实现以查看结果是否有变化。

或者,根据此帖子,仅使用Thread。 Sleep(0); 在您的输入应该起作用之后。这不是最优雅的解决方案,但如果它有效,它将比 500 毫秒的暂停更快。

Unfortunately, I don't believe there is. According to MSDN there are timing issues with SendKeys:

The SendKeys class is susceptible to timing issues, which some
developers have had to work around. The updated implementation is
still susceptible to timing issues, but is slightly faster and may
require changes to the workarounds.

The SendKeys class tries to use
the previous implementation first, and if that fails, uses the new
implementation.

As a result, the SendKeys class may behave differently
on different operating systems. Additionally, when the SendKeys class
uses the new implementation, the SendWait method will not wait for
messages to be processed when they are sent to another process.
If
your application relies on consistent behavior regardless of the
operating system, you can force the SendKeys class to use the new
implementation by adding the following application setting to your
app.config file.

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

To force the SendKeys class to use the previous implementation, use the value "JournalHook" instead.

You could try changing between implementations to see if there is a change in your results.

Alternately, according to this post just using Thread.Sleep(0); after your input should work. Not the most elegant solution but if it works it would be faster than a 500ms pause.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文