如果查看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已被击中。
这似乎是错误的。我在这里遗漏了一些东西 - 如果不这样的话,我无法相信没有其他人会看到这个问题。
提前致谢,
儒略。
答案 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代码已经过审核。