WatiN为错误的keyCode触发KeyDown事件

时间:2011-09-26 12:47:50

标签: watin

如果查看WatiN.Core.Element.cs中的代码,您会看到以下内容:

private static NameValueCollection GetKeyCodeEventProperty(char character)
{
    return new NameValueCollection
               {
                   {"keyCode", ((int) character).ToString()},
                   {"charCode", ((int) character).ToString()}
               };
}

这是用于模拟客户端事件触发的代码,例如在文本字段中自动键入文本时。在我看来,这段代码生成了错误的keyCodes。

假设我在文本框中输入字母“v”。 (int)'v'返回118. 118是F7的keyCode,而不是“v”的keyCode,即86.

我的应用程序确实检测到F7已被击中。

这似乎是错误的。我在这里遗漏了一些东西 - 如果不这样的话,我无法相信没有其他人会看到这个问题。

提前致谢,

儒略。

1 个答案:

答案 0 :(得分:0)

我认为这里发生了一些事情。调用((int)'[character]')返回该字符的十进制ASCII值。小写字母v是118.大写字母V是86.

Console.WriteLine("lowercase: " + ((int)'v').ToString());
Console.WriteLine("uppercase: " + ((int)'V').ToString()); 
Console.WriteLine("V in Keys Enumeration: " + ((int)System.Windows.Forms.Keys.V).ToString());

查看 WatiN.Core.Element.KeyPress 的调用堆栈,它最终会调用IEFireEventHandler.cs中方法 SetValueWhenOnKeyPress 中的以下代码行。< / p>

var newValue = _ieElement.GetAttributeValue("value") + ((char) int.Parse(addChar));

addChar是 GetKeyCodeEventProperty 中返回的keyCode项。 newValue是用于设置Element的值的,因此当您执行类似myTextField.TypeText('v')的操作时,会在文本框中键入小写的v。

注意:WatiN 2.1代码已经过审核。