Twitter
RSS

Watir Add-ons

Aunque Watir es una herramienta que constantemente madura, carece de algunas funcionalidades extra, que provocan que el proceso de testing se estanque, por ejemplo uno de los principales inconvenientes que me surgieron al automatizar con esta herramienta fueron los cuadros de dialogo simples, que muestran mensajes de información o advertencias, y hasta incluso confirman las acciones.

El atajo que use en estos casos, fue el mismo que implemento en mis Frameworks de testing, y se basa principalmente en extender la clase de Watir para añadir las nuevas funcionalidades, el "parche" (por ponerle un nombre) es sencillo de implementar, y se puede hacer incluyendolo dentro de otro script ruby, y añadirlo luego de agregar a watir al script.

El parche sin modificar la clase de Watir, pero injectando funcionalidad al objeto browser:


###############################################################
# watirAddOn #
# #
# add functionalities to watir #
###############################################################

def watirAddOn()

browser.instance_eval %{ #modifying the Watir::Browser object!

###############################################################
# Accept all dialogs #
###############################################################

def accept_dialogs
# Accept dialogs
# this method must be send before to handle a JScript Window...
str = "var win_all = getWindows();"
js_eval(str)
str = "var target_win = win_all[win_all.length-1];"
js_eval(str)
str = "target_win.content.confirm = function() {return true}"
js_eval(str)
end

###############################################################
# Cancel all dialogs #
###############################################################

def cancel_dialogs
# Cancel dialogs
# this method must be send before to handle a JScript Window...

str = "var win_all = getWindows();"
js_eval(str)
str = "var target_win = win_all[win_all.length-1];"
js_eval(str)
str = "var ex_con = target_win.content.confirm;"
js_eval(str)
str = "target_win.content.confirm = function() {return false}"
js_eval(str)

end

###############################################################
# Restores the browser status #
###############################################################

def restore_browser_dialogs
# Restore Dialogs
# this method fix up the dialog windows
str = "var win_all = getWindows();"
js_eval(str)
str = "var target_win = win_all[win_all.length-1];"
js_eval(str)
str = "target_win.content.confirm = ex_con;"
js_eval(str)

end

}

end
###############################################################

Con este simple método incluimos funcionalidades para aceptar o cancelar diálogos en Firefox o IE. El uso es sencillo, se debe llamar a "accept_dialog" o "cancel_dialog" antes de que estos se ejecuten, y luego de la ejecución se debe llamar a restore_browser_dialogs para restaurar la configuración del browser. La solución es sencilla pero muy útil.

Ej de uso:

###############################################################
require "watir"
require "watir_addon"


#... Inicialización de Browser ...
watirAddOn
# más instrucciones
accept_dialogs
restore_browser_dialogs
# más instrucciones

# fin de script
###############################################################

Ese sería el ejemplo en pseudo código, recordar que Watir Add On hace referencia a la variable browser, próximamente publicaré la modificación de la clase para que no dependa de la variable browser.

Comments (0)

Publicar un comentario