2017-03-20 4 views
1

J'utilise watin et specflow pour automatiser le test du navigateur pour mon application angular. J'ai rencontré un problème avec la fonction TextField.TypeText("some string") qui ne met pas à jour la valeur du modèle angulaire.Modèle angulaire n'est pas mis à jour par watin

L'exemple de code est le suivant:

public void updateTextField(string value) 
    { 
     GetTextField.TypeText(value); 

     UpdateButton.Click(); 
    } 

    public TextField GetTextField 
    { 
     get { return TextField(Find.ById(_textFieldId)); } 
    } 

    public Button UpdateButton 
    { 
     get { return Button(Find.ById(_updateButtonId)); } 
    } 

Je peux voir le texte tapé dans le navigateur mais le modèle angulaire ne soit pas mis à jour et la valeur saisie dans le champ de texte est ignoré.

J'ai déjà essayé d'ajouter

GetTextField.Change(); 
GetTextField.TriggerEvent("onchange"); 

Pour essayer de forcer le champ de saisie à marquer modifiée. J'ai eu un problème similaire avec le menu déroulant sélectionné. Cependant, les boutons radio semblent fonctionner correctement.

Toute aide sera grandement appréciée. Merci.

Répondre

1

J'ai découvert que la fonction TextField::TypeText() ne déclenche pas l'événement change sur l'élément, donc le modal angulaire n'est pas mis à jour. J'ai écrit une extension à la méthode TextField qui fera le travail.

/// <summary> 
    /// Type text and trigger change in the input field 
    /// </summary> 
    /// <param name="textField"></param> 
    /// <param name="text"></param> 
    public static void SendKeys(this TextField textField, string text) 
    { 
     textField.TypeText(text); 
     TriggerChange(textField); 
    } 

    /// <summary> 
    /// Trigger change on the input element 
    /// </summary> 
    /// <param name="element">Element to trigger change on</param> 
    private static void TriggerChange(Element element) 
    { 
     string script = String.Format(
      "$('[name={1}]').change()", 
      element.Name 
     ); 

     element.DomContainer.RunScript(script); 
    } 

Et je l'utilise comme suit:

public void updateTextField(string value) 
{ 
    GetTextField.SendKeys(value); 

    UpdateButton.Click(); 
}