WatiN запускает событие KeyDown для неправильного keyCode - PullRequest
0 голосов
/ 26 сентября 2011

Если вы посмотрите на код в WatiN.Core.Element.cs, вы увидите следующее:

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

Этот код используется для имитации запуска событий на стороне клиента, например, при автоматизации ввода текста в текстовое поле. Мне кажется, что этот код генерирует неправильные коды клавиш.

Допустим, я набираю букву "v" в текстовом поле. (int) 'v' возвращает 118. 118 - это keyCode для F7, а не keyCode для "v", который равен 86.

Конечно, мое приложение обнаруживает, что F7 был поражен.

Это просто кажется неправильным. Я что-то здесь упускаю - я не могу поверить, что никто бы не увидел эту проблему, если бы я не был.

Заранее спасибо,

Джулиан.

1 Ответ

0 голосов
/ 26 сентября 2011

Я думаю, что здесь происходит пара вещей.Вызов ((int) '[символ]') возвращает десятичное значение 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 , он в конечном итоге сводится к вызову следующей строки кода вmethod SetValueWhenOnKeyPress в IEFireEventHandler.cs.

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

addChar - это элемент keyCode, возвращаемый в GetKeyCodeEventProperty .newValue - это то, что используется для установки значения элемента, поэтому, когда вы делаете что-то вроде myTextField.TypeText ('v'), в текстовое поле вводится строчная буква v.

Примечание : WatiNКод 2.1 был рассмотрен для этого.

...