所以最近我们强迫我们的应用程序在IE9模式下运行,从那时起WatiN typetext,AppendText与TriggerClientChange(显示如下)不会再激活页面上的JS。
这是情况......它是一个文本字段,用于快速搜索我们的应用程序。 OnFocus,弹出一个菜单,当键入发生时,它会搜索数据库并填充带有结果的选择菜单。在过去两年中,使用AppendText和TypeText与此方法TriggerClientChange一起工作正常
public static void TriggerClientChange(this Element element)
{
//var Id = element.Id.Replace("[", @"\\[").Replace("]", @"\\]");
if (String.IsNullOrEmpty(element.Id))
{
element.Id = "x" + Guid.NewGuid().ToString("N");
}
string selector = "[id=\"" + element.Id + "\"]";
//if (element.Name == null)
// throw new ElementExtensionException("element: " + element.ToString() + " doesn't exist.");
if (element is CheckBox)
{
selector += ":checkbox";
}
element.DomContainer.WaitForComplete();
element.DomContainer.Eval("var elt = window.$('" + selector + "'); if(elt.length > 0) { elt.trigger('change'); }");
element.DomContainer.WaitForAjaxComplete();
element.DomContainer.WaitForComplete();
}
现在我们正在支持IE9和HTML5,我们决定强制使用IE9和标准。从那时起,当在搜索文本字段中输入值时,在调用TriggerClientChange(运行JS)时,不会触发JS。我们尝试过.change的不同排列没有成功,如:
public static void ForceChange(this Element element)
{
element.DomContainer.Eval(String.Format("$({0}).change();", element.GetJavascriptElementReference()));
}
public static void ForceChange(this Element element)
{
element.DomContainer.Eval("$('#" + element.Id + "').change();");
}
不像过去那样产生结果。下面是QuickSearch方法,它将值键入文本框已经工作了很长时间,直到我们强制使用IE9标准
internal void SetQuickSearchTextbox(string val)
{
this.Browser.TextField("navBarQuickContactSearch").AppendText(val);
this.Browser.TextField("navBarQuickContactSearch").TriggerClientChange();
this.Browser.WaitForAjaxComplete();
Thread.Sleep(5000);
ElementCollection results = this.Browser.Div(Find.ByClass("ac_results")).ElementsWithTag("li");
results[1].Click();
}
最后这是TypeText
protected virtual void SendKeyPresses(string value)
{
var length = value != null ? value.Length : 0;
if (TextField.MaxLength != 0 && length > TextField.MaxLength)
{
length = TextField.MaxLength;
}
for (var i = 0; i < length; i++)
{
var character = value[i];
FireKeyDown(character);
FireKeyPress(character);
FireKeyUp(character);
}
}
protected virtual void FireKeyUp(char character)
{
TextField.KeyUp(character);
}
protected virtual void FireKeyPress(char character)
{
TextField.KeyPress(character);
}
protected virtual void FireKeyDown(char character)
{
TextField.KeyDown(character);
}
总结:这些工作一直有效,直到IE9被迫。是的,这在手动输入文本字段时有效,但现在脚本没有。像以前一样更改元素。任何帮助都会很棒。
答案 0 :(得分:0)
我们使用以下代码修复了此问题。它模拟了缺少的jquery事件:
var evt = jQuery.Event("keydown");
evt.keyCode = $.ui.keyCode.RIGHT;
$('input.ac_input').focus().val('SOME TEST TEXT').trigger(evt);
这是一个通过Browser.Eval运行的解决方法。打破它的ie9模式的变化仍未确定。