2011-09-26 3 views
0

Si vous regardez le code WatiN.Core.Element.cs vous voyez ce qui suit:Watin tir événement KeyDown pour le code clavier erroné

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

Ceci est le code utilisé pour simuler le tir d'événements côté client , par exemple lors de l'automatisation de la saisie de texte dans un champ de texte. Il me semble que ce code génère les mauvais keyCodes.

Disons que je tape la lettre "v" dans une zone de texte. (int) 'v' renvoie 118. 118 est le code de clé pour F7 pas le code de clé pour "v" qui est 86.

Effectivement, mon application détecte que F7 a été touché.

Cela semble juste carrément faux. Ai-je manqué quelque chose ici? Je ne peux pas croire que personne d'autre ne verrait ce problème si je ne l'étais pas.

Merci d'avance,

Julian.

Répondre

0

Je pense que deux choses se passent ici. Appeler ((int) '[caractère]') renvoie la valeur ASCII décimale de ce caractère. Minuscules v est 118. Majuscules V est 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()); 

En regardant à travers la pile d'appel pour WatiN.Core.Element.KeyPress il obtient finalement vers le bas pour appeler la ligne de code suivante dans la méthode SetValueWhenOnKeyPress dans IEFireEventHandler .cs.

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

addChar est l'élément codeTouche retourné dans GetKeyCodeEventProperty. newValue est ce qui est utilisé pour définir la valeur de l'élément, donc quand vous faites quelque chose comme myTextField.TypeText ('v') un v en minuscule est tapé dans votre zone de texte.

Remarque: Le code WatiN 2.1 a été examiné pour cela.