jquery watin

No se puede activar el evento jQuery change() en la lista de selección de WatiN



tooltip html (6)

Tengo un cuadro de selección

<select id="myselectbox"> <option value=''a''>First option</option> <option value=''b''>Second option</option> </select>

Y jQuery

$(''#myselectbox'').change(function() { ... });

Y una prueba de WatiN.

SelectList list = Browser.SelectList(Find.ById("myselectbox")); list.Select("First option");

En IE, esto cambia el cuadro de selección, pero no activa el controlador de eventos jquery. Soy consciente de los muchos problemas relacionados con el controlador de eventos change () en IE. Así que he intentado agregar una serie de cosas a prueba para forzar el evento a disparar:

list.Blur(); list.Keypress(''/r''); list.Click();

También intenté hacer clic fuera del cuadro de selección para eliminar el enfoque, con la esperanza de que esto desencadenara el evento.

¿Algunas ideas?


"cambio" es el evento. "onchange" es el controlador de eventos. WatiN''s Select () tiene errores; en última instancia, se está disparando "onchange" como si se tratara de un evento, lo que no ayuda al cartel que quiere que se dispare el evento "change".

En última instancia, uno tiene que usar JavaScript / JQuery para activar el evento de "cambio", como se indica en la respuesta, para evitar este error.


El uso del Selector de ID de JQuery puede crear problemas cuando hay dos elementos en una página con la misma ID. El siguiente código debe desglosar el elemento WaitN correspondiente exacto

Element.DomContainer.Eval(String.Format("$({0}).change();", Element.GetJavascriptElementReference()));


Esto funcionó para mí:

public static void SelectByValueAndBlur(this SelectList selectList, string value) { selectList.Focus(); selectList.SelectByValue(value); selectList.Blur(); }


Parece un error en fireEvent de IE. El SelectList.Select () de WatiN genera algo similar a

var newEvt = document.createEventObject(); newEvt.button = 1; watin3.fireEvent(''onchange'', newEvt);

Donde watin3 es el HTMLSelectElement nativo. La llamada a fireEvent no dispara eventos adjuntos jQuery. Puede reprocharlo llamando manualmente a $(''#id'')[0].fireEvent(''onchange'');

Entonces, lo mejor que puedes hacer es disparar manualmente el evento como otros sugirieron usando jQuery.


Podrías disparar manualmente el evento:

$(''#myselectbox'').change();

Los otros eventos de JavaScript que está activando no cambian el valor, por lo que no activarán el evento de change .


Saliendo de la respuesta de Matt Ball y de los pasos adicionales del OP, agregué el siguiente método de extensión a una clase de ayudante de prueba.

using WatiN.Core; namespace Some.Test.Project { public static class WatiNExtensions { public static void ForceChange(this Element e) { e.DomContainer.Eval("$(''#" + e.Id + "'').change();"); } } }

Ahora, hasta ahora de todos modos, he tenido éxito en hacer:

SelectList list = Browser.SelectList(Find.ById("myselectbox")); list.Select("First option"); list.ForceChange();

Está bien, es una conveniencia menor en el mejor de los casos, pero lo encuentro útil. De todos modos, ¡vota de mi parte por el OP y la respuesta!