Так что недавно мы заставили наше приложение работать в режиме IE9, и с тех пор текст WatiN, 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 и стандарты.С тех пор JS не запускается, когда вызывается TriggerClientChange, который запускает 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 не был вынужден.Да, это работает при ручном наборе текста в текстовом поле, но теперь сценарии не меняют элемент, как раньше.Любая помощь будет великолепна.