【问题标题】:Angular model is not updated by watin角度模型未由 watin 更新
【发布时间】:2017-03-20 04:45:34
【问题描述】:

我正在使用watinspecflow 来自动化我的angular 应用程序的浏览器测试。我遇到了TextField.TypeText("some string") 函数的问题,它不会更新角度模型值。

示例代码如下:

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

尝试强制将输入字段标记为已更改。我对选择下拉菜单也有类似的问题。但是单选按钮似乎可以正常工作。

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: angularjs specflow watin


    【解决方案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();
    }
    

    【讨论】:

      猜你喜欢
      • 2016-02-29
      • 1970-01-01
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-02
      相关资源
      最近更新 更多