2017-03-20 124 views
1

我使用watinspecflow來自動化我的angular應用程序的瀏覽器測試。我遇到了一個TextField.TypeText("some string")函數,它沒有更新角度模型值。角度模型沒有被watin更新

的示例代碼如下:

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)); } 
    } 

我可以看到正在鍵入的文本瀏覽器,不過角度模型沒有得到更新,並在文本字段中鍵入的值將被忽略。

我已經嘗試添加

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

要嘗試並強制被標記改變輸入字段。我也有類似的問題與選擇下拉列表。但單選按鈕似乎工作正常。

任何幫助將不勝感激。謝謝。

回答

1

我發現TextField::TypeText()函數不會觸發元素上的change事件,因此角度模態不會更新。我寫了一個可以完成這個工作的TextField方法的擴展。

/// <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); 
    } 

,我如下使用它:

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

    UpdateButton.Click(); 
}