Decidiendo entre Selenium Webdriver y WebdriverIO

En este post te comparto una investigación que realizó Luis Zambra de Abstracta, donde vamos a  comparar dos herramientas de test automation: Selenium Webdriver y WebdriverIO, revisando los aspectos más relevantes, Por último compararemos la ejecución de un test case sencillo en ambos frameworks, a modo de evaluación y para ayudar a establecer un criterio para decidir entre estas excelentes herramientas (en el caso de Selenium Webdriver consideramos solo la opción con JavaScript para que sea más similar la comparación).



Herramientas a comparar

Al seleccionar una herramienta open source de automatización de pruebas  Selenium suele ser de las opciones más consideradas, en parte por su gran comunidad y versatilidad al soportar varios lenguajes, siendo uno de ellos Javascript (donde recibe el nombre de WebdriverJS). Aquí es donde entra WebdriverIO como alternativa puesto que es una implementación del protocolo webdriver de W3C también en el lenguaje Javascript. 

Tuve la oportunidad de conocer esta última herramienta en un taller interno de Abstracta brindado por Alexis Alvarez y Pablo Calvo, y posteriormente lo puse en práctica en un proyecto donde pude sacarle bastante provecho a sus capacidades. Estas experiencias me permitieron ver que Selenium Webdriver y WebdriverIO comparten varias similitudes, pero tienen algunos puntos de comparación bastante interesantes para destacar.

Comparativa de WebdriverIO y Selenium Webdriver

A continuación, les comparto una tabla comparativa basada en información compartida por las comunidades que sustentan ambas herramientas, además de estadísticas y experiencias personales:

WebdriverIOSelenium Webdriver
Release inicial20132008
Último release (a la fecha 23 de Abril de 2020)17 Apr 202018 Mar 2020
Frecuencia en los releasesMuy alta (más de 20 releases en los últimos 30 días).No muy frecuentes (aproximadamente una cada 2 meses).
PopularidadCreciendo pero aún muy por debajo de Selenium Webdriver.El más popular actualmente, tanto en descargas como en búsquedas.
Soporte de Applitools (testing visual)SiSi 
Facilidad de setupMuy sencillo de hacer gracias a su test runner, el cual nos generará un config file con todo lo necesario.Setup sencillo, pero lograr lo mismo que el config file de WebdriverIO lleva un poco más de trabajo.
Ejecuciones en paraleloSi, se pueden configurar fácilmente desde el archivo de configuración.Si, pero lograrlo es un poco más trabajoso.
Ejecutar tests en forma sincrónica Si, esto se puede configurar en el archivo de configuración.Si, se puede lograr mediante webdriver-sync.
Facilidad para escribir / mantener los testsMuy similar a Selenium, aunque su sintaxis en varios comandos es más simple y más fácil de leer. Su API permite crear tests robustos y está muy bien documentada.
BrowsersChrome
Firefox
Edge
Internet Explorer
Safari
Chrome
Firefox
Edge
Internet Explorer
Safari
Opera
Facilidad de manejo de browsersWebdriverIO maneja las instancias de browsers que le pidamos por sí solo.Requiere que las instancias de browsers sean manejadas desde el código. 
Mobile apps Si, con WebdriverIO también se puede automatizar en mobile mediante Appium (ver documentación).No, pero existen otras alternativas (aquí hay un artículo interesante al respecto).
Desktop applications Si, mediante Appium (aquí hay un artículo al respecto).Si, mediante Appium.
Cross-browsing (Saucelabs, Browserstack, etc.)SiSi
Ofrecen RecordersSiSi 
Lenguajes disponiblesJavascriptJava
Python
Ruby
C#
JavaScript
Perl
PHP
Generación de reportesSe pueden integrar herramientas para esto fácilmente con el test runner, donde tiene muchas opciones. No soporta generación de reportes de forma nativa, pero se pueden integrar varias herramientas para esto (ejemplos en Java).

Comparando en la práctica

Como comparativa adicional, vamos a ver cómo preparar un test sencillo con ambas, Selenium Webdriver y WebdriverIO, donde trataremos de pasar el juego 1to50 (planteado por Fede en un desafío aquí en su blog) en el menor tiempo posible y sacando captura al final para verificar el tiempo. Para hacer la comparativa lo más justa posible utilizaremos WebdriverJS (Selenium Webdriver para JavaScript) y el mismo browser (Google Chrome) en ambos frameworks.

Dejamos el código de las dos soluciones publicadas en este repositorio de GitHub.

Los resultados se pueden ver en la siguiente tabla.

WebdriverIOSelenium Webdriver
Tiempo de ejecución del script19.2s.19.1s.
Tiempo invertido en escribir el código (aproximado)20 min.30 min.
Tiempo invertido para pasar el juego4.301s.4.601s.

Estas fueron las mejores puntuaciones que pude conseguir (más allá de la eficiencia de mi algoritmo que es el mismo en las dos soluciones y las prestaciones de mi máquina), no hay una diferencia muy significativa entre ambas. 

Dos herramientas muy recomendables  

En definitiva, ambas herramientas me parecen opciones excelentes. Por un lado WebdriverIO tiene varios puntos a favor, como su sintaxis más simple, su manejo de browser simplificado y demás. Por otro lado Selenium Webdriver destaca más respecto al soporte de su comunidad y la gran cantidad de documentación que tiene (muchos ejemplos y problemas resueltos). Esto último me da a pensar que es más fácil aprender a hacer tests en Selenium Webdriver, aunque no haya una gran diferencia entre ambos.

¿Cuál es tu experiencia?

Leave a Reply

Your email address will not be published. Required fields are marked *