viernes, 23 de octubre de 2009

Selinium & UpdatePanel[WaitForXXXXXX]

Selenium , es una aplicacion para hacer test automaticos, simula  acciones de usuarios en un navegador. mas adelante me metere mas en lo que es selinum y ventajas de usar una herramienta como esta.

Bueno en selenium tenemos varios comandos. por el ejemplo el type, click, typeAndWait, ClickAndWait.
bueno la direferencia entre el clickAndWait y click es que el AndWait espera que se recarge la pagina.

Pero con los update panels no recarga la pagina completa, entonces no me sirve  un click ni tampoco un clickAndWait.

En  Selinium Existe la forma de que quede esperando una accion "WaitForXXXXX" , por ejemplo podemos decirle a selenium que espere a que un elemento este habilidado, esto es super bueno si tenemos peteciones http  asincronicas y despues de esto habilitamos un control.  pero con los updatepanel, no siempre hay una accion visible atravez del un control[amenos que pongamos el tipico div de "Cargando"].

Entonces existe el comando WaitForCondicion, donde uno especifica un script javascript mas un tiempo de timeout. para el caso de los updatepanel, vemos que se haya registrado el Endrequest  de la pagina de la siguiente forma esto si estamos con el plugin de firefox:



var busyFunc = selenium.browserbot.getCurrentWindow().Sys.WebForms.PageRequestManager.get_inPostBack;
busy = (busyFunc == null)?true:busy = busyFunc();
busy == false;


En mi caso el test en html quedo asi:
waitForCondition
"var busyFunc = selenium.browserbot.getCurrentWindow().                       Sys.WebForms.PageRequestManager.get_inPostBack;       busy = (busyFunc == null)?true:busy = busyFunc();       busy == false;"
300
En el caso que se programaticamente, para incluilo en un test unitario y luego incluirlo en Cruise control.

selenium.WaitForCondition( "var busyFunc = selenium.browserbot.getCurrentWindow().Sys.WebForms.PageRequestManager.get_inPostBack; busy = (busyFunc == null)?true:busy = busyFunc(); busy == false;", "10000");

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

2 comentarios:

  1. Hola Victor

    Estoy comenzando con esto de los tests con selenium y me surge un problema. Tengo que evaluar el número de elementos disponibles en un select y lo más próximo que veo es esto: (selenium.browserbot.getCurrentWindow().document.getElementById("series").options.length == N)

    pero me falla. el objeto selenium no entiende browserbot ¿que estoy haciendo mal?

    mi email es dmunozva@gmail.com

    Un saludo

    ResponderEliminar
  2. hola Daniel:

    estas usando el plug in de selenium o estas con el servidor de selenium???


    mira yo estuve buscando y encontre storeSelectOptions
    simplemente buscar

    recibe dos parametros, uno el select y otro el nombre de la varible donde deseas dejar el resultado.
    ej:
    storeSelectOptions("myselect","variable");

    despues para mostralo simplemente haces un

    echo ${varible}

    todo esto en el selenium IDE(plug in de firefox).


    esto retorna todos los labels de un select, ahora hay que buscar como hacer un split, ya que separa todos los labels o etiquetas con una coma


    bueno si encuentras como hacer eso me avisas :D.

    suerte y ojala te haya servido mi ayuda.

    ResponderEliminar