Trucos de Selenium IDE – Intro, recording, waiting

Trucos de Selenium IDE – Intro, recording, waiting

Hasta ahora, Selenium IDE me ha salvado mi vida de tester suficientes veces como para decidir lo siguiente:

  1. Profundizar en esta herramienta esencial para los testers, con la intención de entender propiamente qué es, qué es lo que he estado haciendo con Selenium IDE, cómo puedo sacar mayor beneficio de la misma, etc.
  2. Difundir la palabra sobre esta herramienta (a veces) minusvalorada, defendiendo su honor y ayudando y animando a otros a profundizar, aprender e inspirarse de ella.

Qué mejor manera de hacer esto que blogear? Así que he desarrollado una pequeña serie de posts sobre Selenium IDE, explicando algunos trucos que hago servir, escribiendo porqué y cómo los uso, ya que… To blog is to learn!

Este primer post pretende introducir la serie, explicándonos qué es Selenium IDE y algunos conocimientos básicos sobre la misma. Allá vamos!

Qué es Selenium IDE?

Según SeleniumHQ (el site oficial del proyecto), Selenium IDE es un “add-on para Firefox que hace un sencillo Record-and-playback de interacciones con el navegador”. A partir de esta definición, concentrémonos en algunos conceptos:

  • IDE: IDE son las inciales de “Integrated Development Environment”, y esto quiere decir que estamos delante de una aplicación que nos ayudará a desarrollar utilidades relacionadas con el software.

  • Firefox: sí, Selenium IDE solamente está disponible para Firefox, así que no nos va a ayudar en la ejecución de cross-browser testing, pero es una herramienta ligera e inestimable para automatizar testing funcional de carácter general en navegador.

  • Add-on: un add-on para un navegador (también llamado una extensión del mismo) es un complemento instalable que añade funcionalidades o amplía las que tiene el navegador por defecto. Esto es lo que Selenium IDE nos ofrece, añade funcionalidades de record-and-playback de interacciones con el navegador a nuestro Firefox.

  • Record-and-playback: esto quedaría mejor com record and/or playback. Puedes grabar o no, pero en lo que estamos interesados es en el playback, en la reproducción, porque es lo que realmente nos porporciona capacidades automatizadoras, la reproducción de…

  • Interacciones con el navegador: este es el tema, esto es lo que Selenium IDE hace fantásticamente. Con este add-on podemos grabar, generar, gestionar y ejecutar interacciones von el navegador, simulando los clicks, selecciones, movimientos, escritura… de un usuario real en páginas web y su contenido.

Pues, para resumir esta sección con palabras sencillas, Selenium IDE es un pequeño complemento para nuestro navegador Firefox que nos permite simular interacciones de usuario vía navegador en páginas web. Con él, seremos capaces, entre otras cosas, de ejecutar testing funcional automatizado en navegador web.

Cuándo es Selenium IDE una buena elección para testing automático?

Con Selenium IDE podemos almacenar y organizar casos de test y suites, así que es posible tener una suite de suites automatizada a ejecutar con esta herramienta. Selenium IDE es potente (más de lo que parece), pero limitada; es una gran herramienta para casos de test sencillos pero no tan apropiada para casos más complejos (con muchas ramas, condicionales, casos y demás). Además, tal y como hemos dicho antes, sólo funciona con Firefox, así que si se necesita una herramienta para cubrir casos más complejos y/o funcionando en distintos navegadores, es mejor echarle un vistazo a Selenium Webdriver o Watir. Hay herramientas comerciales que también podrán satisfacer estas necesidades.

Personalmente, yo la uso para ejecutar testing automático ligero, para repetir tareas tediosas pero simples durante una iteración o proyecto, pero sin el objetivo de almacenar o mantener esta automatización; haciendo esto, las pruebas se pueden desarrollar más rápido (aunque seguramente de forma sub-óptima), pero muy efectivas para el coste que implican. Además, Selenium IDE es un fantástico “facilitador” de testing no automático, ya que te puede ayudar en ejecutar rápida y robóticamente pasos tediosos y largos que dejan tu aplicación web lista para ser testeada, en un estado que  sea aburrido de conseguir. Automatizando el camino hasta este punto no estarás cansado ni enfadado, pero sí listo para ejecutar tu mejor testing en él! 🙂

El recording como inicio fácil…

La manera más fácil de empezar un caso de test con Selenium IDE es ejecutarlo manualmente con el botón de grabado a “on”; lamentablemente, hay muchas cosas que se escaparán de este grabado (eventos en background, esperas implicitas que ejecutamos como humanos sin darnos cuenta, cosas así). Por ejemplo, vamos a grabar una simple búsqueda en un motor de búsquedas, buscaremos el término “Software Testing” y veremos si luego aparece un link a la página de la Wikipedia sobre Software Testing en los resultados. Este es el código que obtengo tras grabar esto con Selenium IDE: 

open http://duckduckgo.com/
type id=search_form_input_homepage Software Testing
clickAndWait id=search_button_homepage
verifyElementPresent link=More at Wikipedia

Este test se puede reproducir sin ninguno de los problemas antes mencionados, ya que el grabado de Selenium IDE es suficientemente listo como para convertir mi gesto de “click” en el botón de búsqueda en un comando “clickAndWait”. La referencia implícita (esta pestaña se encuentra en la consola del IDE) de este comando dice…

clickAndWait(locator)

Generated from click(locator)

Arguments:

     * locator – an element locator

Clicks on a link, button, checkbox or radio button. If the click action causes a new page to load (like a link usually does), call waitForPageToLoad. 

Así que, virtualmente, el ejemplo anterior se corresponde al siguiente…

open http://duckduckgo.com/
type id=search_form_input_homepage Software Testing
click id=search_button_homepage
waitForPageToLoad 30000
verifyElementPresent link=More at Wikipedia

…donde el 30000 es simplemente un número arbitrário de milisegundos para llamar a un timeout una vez se hayan superado y la página no se haya cargado aún. El comando “clickAndWait” usa el timeout por defecto especificado en el menú “Options” del IDE, mientras que en “click” + “waitForPageToLoad” tenemos que especificarlo manualmente, luego puede ser mayor o menor que el timeout por defecto.

Podemos alcanzar algo similar usando el comando “pause” del siguiente modo: 

open http://duckduckgo.com/
type id=search_form_input_homepage Software Testing
click id=search_button_homepage
pause 30000
verifyElementPresent link=More at Wikipedia

Ejecutando este trozo de código podemos ver que la ejecución de este test SIEMPRE se espera 30 segundos (30000 milisegundos), sin importar si la página se cargó hace 20 segundos, cosa que suena mucho menos eficiente que las anteriores versiones. El tema es que necesitamos que se haga algo justo después de accionar el botón que nos asegure que la página (o recurso, o botón…) se haya cargado antes de seguir en nuestras comprobaciones, puesto que si tuviéramos el siguiente caso de test…

open http://duckduckgo.com/
type id=search_form_input_homepage Software Testing
click id=search_button_homepage
verifyElementPresent link=More at Wikipedia

…nuestro test seguramente fallaría ejecutándolo a la máxima velocidad, ya que le estamos diciendo a Selenium IDE que verifique justo después de hacer click, cuando resulta que este click provoca la carga de una página nueva, entonces verificar inmediatamente cosas sin esperar a que la página esté completamente cargada nos llevará fácilmente a que Selenium IDE verifique algo que todavía no puede encontrar, retornando un mensaje…

[error] false

…en la pestaña de log de la consola del IDE mientras ejecutaba el comando “verifyElementPresent”, puesto que cuando Selenium IDE está ejecutando este comando no hay link a la Wikipedia en la página (ya que esta no se ha cargado completamente todavía).

Final learnings

Grabar la ejecución de nuestros test cases nos ayudará a definir su esqueleto. Una vez hayamos hecho esto, conviene hacer debugging sobre los mismos (los breakpoints y las ejecuciones paso a paso nos ayudarán con ello) haciéndolos suficientemente robustos como para ser ejecutados a la máxima velocidad sin problemas, sin importar si la red de la oficina parece más lenta de lo normal.

Gracias por leer hasta el final y… nos vemos en el siguiente post de esta serie sobre Selenium IDE!

Anuncios

22 comentarios en “Trucos de Selenium IDE – Intro, recording, waiting

  1. Hola Mauri, justo estaba buscando info relacionada, jajaja, ¿Casualidad? Nooooo

    Estoy investigando y recopilando desde hace una semana, información vinculada con Selenium Webdriver ya que tengo que testear una app desarrollada en java y sobre plataforma IE.

    Debo hacer un testing funcional, básicamente, asi que entiendo que ésta es LA HERRAMIENTAS, ¿estoy en lo cierto?

    • Hola Gustavo!

      No lo dices, pero sobreentiendo que necesitas automatización y que no tienes acceso a ninguna licencia de otras herramientas de pago, entonces efectivamente sí, es LA herramienta 😉

      Suerte con el testeo y hasta pronto!

      Mauri

    • Hola!

      Pues depende de a lo que te refieras con “pop-up”, si te refieres a diálogos emergentes generados por JavaScript como un alert(), sí se puede, mediante aquellos métodos que terminan con “Confirmation” como “assertConfirmation” y similares.

      Si te refieres a pop-ups del tipo web, dependerá. Si tu test debe pasar de validar cosas en una página a hacerlo en un pop-up, Selenium IDE no controla bien los cambios de ventana ni de instancia de navegador. En cambio, si no debes tu pop-up y lo puedes abrir normalmente invocando su URL, no deberías tener ningún problema.

      Siempre puedes buscar por internet, hay muchos usuarios de Selenium disponibles, o incluso solicitar soporte directo a la gente de Selenium: http://docs.seleniumhq.org/support/

      Suerte!

      🙂

  2. Buenas

    Soy nuevo en Selenium y necesito ayuda, no se si me pueda colaborar

    Lo que sucede es que tengo el siguiente script en selenium IDE 2.4.0

    open
    /SivemWEB/autenticacion/login.jsf

    type
    id=form:username
    29774944

    type
    id=form:password
    xxxx

    clickAndWait
    id=form:j_idt28
    -> aqui ejecuta el botón ingresar

    //- aqui abre la sesion, y cuando quiero intentar dar clik en la opción salir, no lo ejecuta-//

    clickAndWait
    id=j_idt30:j_idt31;

    este es el tag de la pagina web:

    Salir

    Le agradezco, muchas gracias

    • Hola Alcides!

      Sin tener la página disponible para probar sobre ella es un poco difícil, pero por lo que dices suena a que Selenium está haciendo click sobre la opción “Salir” antes que esta esté 100% operativo.

      Muchas veces el “clickAndWait” no es suficiente para continuar con el test, seguramente falta un “waitForElementPresent” hacia la opción “Salir” después del login, antes de trabajar sobre la misma.

      Para comprobar esto, yo te sugeriría que hicieras tú manualmente el login y cuando todo esté cargado, haz que Selenium ejecute el click sobre la opción “Salir”. Si lo hace y funciona, es un tema de esperas (“waiting”). Si no lo hace, es que no es tan fácil como parece el hacer click en esta opción y hay que investigar más sobre cómo hacerlo.

      Espero que te sirva de ayuda,

      Saludos!

      — Mauri

  3. Hola Mauri!! nuevamente te encuentro, tenia otra conssulta estoy probando el SELENIUM para el testing de un sistema desarrollado en JAVA, mi pregunta es cuando encuentro algun error o BUG o inconsistencia en el sistema como un link roto http 404… ¿cómo debo asignarles a los desarrolladores estos problemas? o en tu caso particular y tu experiencia ¿cómo jugaste con los desarrolladores?

    Gracias!

    • Hola de nuevo!

      Mi manera preferida de registrar, mantener y documentar los bugs que vas encontrando es instalando un bugtracker como Atlassian Jira, Trac, Bugzilla, etc. dentro del proyecto en el que trabajes y que lo use todo el equipo (desarrolladores incluidos). Si te interesa el tema del bug-reporting y la comunicación alrededor del mismo, hace unos meses escribí sobre ello aquí: https://testingfuncional.wordpress.com/2013/06/19/reportar-defectos-es-comunicarse/

      Sobre cómo tratar este tema con los desarrolladores, es importante trabajar la idea que los testers no somos ni jueces ni verdugos ni quejicas ni rompedores de software, simplemente buscamos, encontramos e informamos de fallos ya existentes de las aplicaciones con la intención de que, si son de interés para el negocio en sentido amplio, se resuelvan. No estás demonizando el trabajo de nadie, simplemente aportando tu grano de arena en favor de la entrega exitosa del proyecto como equipo.

      Mucha suerte en tu cometido,

      Saludos!

      — Mauri

  4. muchas Gracias Mauri!

    Ya instele “The Bug Genie” para realizar el BugTracker, me parecio muy amigable para el usuario, y tambien muy facil la instalacion en WIn, en linux aun tengo algunos problemas.

    y muchas gracias por el consejo, con los desarrolladores.

  5. Pingback: Pruebas Funcionales a OpenERP con Selenium IDE (PARTE II) | Recortes Tecnológicos

  6. Pingback: Pruebas Funcionales a OpenERP con Selenium IDE (PARTE I) | Recortes Tecnológicos

  7. Mauri …. cual es la organizacion ideal o plan de trabajo para iniciar un trabajo de testing ? … la verdad me llene d informacion y no se como empesar como dividir .registro de pruebas funcionales , interfaz , bug no se …. algun formato para seguir el camino correcto 🙂

    • Hola!

      Si te has llenado de información, ya tienes medio camino hecho 🙂

      Hay que tener siempre en cuenta que el testing es el testing de algo, de un servicio, de una aplicación, de un producto… Esa es tu guía, es lo que tienes que validar. De esta guía, debes conseguir información (documentación o similares), para saber lo que se espera de ella. Con esas expectaciones, debes fragmentarlas, para mayor organización y poder validarlas separadamente pero también en conjunto.

      Con esa guía, esas expectativas y esa organización en mano ya lo tienes todo para empezar, a falta de un último e importantísimo detalle: antes de testear debes tener previsto el mecanismo de bug-tracking que usarás para comunicarte con los responsables / desarrolladores del proyecto, así puedes empezar a validar y registrar los problemas que te vayas encontrando por el camino.

      Espero que esto te sirva como guía para empezar. Mucha suerte en tu aventura!

      — Mauri

  8. Hola Mauri Edo,

    Gracias por el post, muy claro!, estoy moviendome de QTP a Selenium, y record & play es solo el ABC.

    Ojala puedas compartir buenos sitios para que ayuden con el Selenium Web Driver, instalacion y todo lo que se peuda.

    Saludos!!

    Alfonso

    • Hola Alfonso, gracias por tu comentario!

      Me alegra que te haya gustado el contenido. Si estás interesado en Selenium Webdriver te recomiendo que eches un vistazo al trabajo que está haciendo Gustavo desde testingbaires.com, si no me equivoco está justo ahora ejecutando un curso on-line sobre ello, aprovecha!

      Saludos y suerte,

      — Mauri

      • Gracias Mauri!!!!

        Efectivamente, en estos momentos estamos dando el Ciclo 2 del Curso online de Automatización de Pruebas con Selenium WebDriver en Ruby.

        Estaremos hasta las 18:00hs (ARG) (6pm) dando la clase, asi que todo aquel que quiera participar de oyente algunos minutos para vivenciar la dinámica de la sesión, solo me tiene que enviar un correo a:

        webmaster@testingbaires.com

        Una vez que reciba el pedido, le estaremos enviando la invitación por correo con un enlace a la plataforma que utilizamos para el e-learning (Anymeeting)

        Gracias Mauri, nuevamente!

  9. Mauri, estoy probando Selenium IDE, en SO UBUNTU y tengo un problema en cuanto a el “clickAndWait” a un objeto Link, no llega a hacer click, hay alguna configuración para trabajar en Ubuntu?

    • Hola!

      Pues no creo que tenga nada que ver con Ubuntu sino más bien con el navegador, el add-on de Selenium IDE y sus respectivas versiones. Como dices que el problema es el click, has probado de grabar el evento con el modo de recording? Y debugar el script de Selenium ejecutando los pasos manualmente en el add-on?

      Si nada de esto te funciona, te recomiendo que mandes una consulta directamente al grupo de soporte de Selenium o a los múltiples grupos de Linkedin que tratan estos temas, que seguro te pueden ayudar.

      Surte!

      — Mauri

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s