{"id":2704,"date":"2012-11-28T17:12:32","date_gmt":"2012-11-28T16:12:32","guid":{"rendered":"http:\/\/www.palentino.es\/blog\/?p=2704"},"modified":"2012-11-28T17:12:32","modified_gmt":"2012-11-28T16:12:32","slug":"prueba-o-testing-automatizado-de-sitios-web","status":"publish","type":"post","link":"https:\/\/www.palentino.es\/blog\/prueba-o-testing-automatizado-de-sitios-web\/","title":{"rendered":"Prueba o testing automatizado de sitios web"},"content":{"rendered":"<p style=\"text-align: justify;\"><strong>Selenium<\/strong> es una plataforma para hacer \u201c<strong>testing<\/strong>\u201d en el browser o navegador. B\u00e1sicamente puedes automatizar el uso de tu aplicaci\u00f3n web y repetir el proceso cuantas veces sea necesario para verificar que est\u00e1 haciendo lo que se supone. Por otro lado es un <strong>set de herramientas<\/strong> que nos permiten desarrollar scripts para pruebas de aplicaciones Web en diversos lenguajes como Java, Ruby, Python, Perl, .Net o PHP.<\/p>\n<p style=\"text-align: justify;\">Es un producto Open Source que est\u00e1 permanentemente siendo optimizado.<\/p>\n<p style=\"text-align: justify;\">Nos permite grabar, editar y depurar casos de prueba, que podr\u00e1n ser ejecutados de forma autom\u00e1tica e iterativa posteriormente. \u00a0El potencial de esta herramienta puede ser utilizado para la grabaci\u00f3n de las pruebas funcionales durante la Generaci\u00f3n de pruebas de regresi\u00f3n. Con este servicio se consigue obtener una bater\u00eda de pruebas automatizadas que podr\u00e1n ser utilizadas cuando sea necesario repetir las pruebas.<\/p>\n<p style=\"text-align: justify;\"><strong>Existen 3 tipos de Herramientas: <\/strong>Selenium<strong> IDE, <\/strong>Selenium<strong> Webdriver, y <\/strong>Selenium<strong> Grids.<\/strong><\/p>\n<p style=\"text-align: justify;\"><strong>En este post os mostrar\u00e9 como usarlo. Adem\u00e1s al final veremos herramientas relacionadas y un video en castellano sobre su uso.<br \/>\nComencemos &#8230;<\/strong><\/p>\n<p><!--more--><\/p>\n<p><a href=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2012\/11\/selenium.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-thumbnail wp-image-2708\" title=\"selenium\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2012\/11\/selenium-150x150.png\" alt=\"\" width=\"150\" height=\"150\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><strong>Selenium IDE<\/strong> es un plugin para Firefox que permite grabar y ejecutar scripts directamente desde tu navegador.<\/p>\n<p style=\"text-align: justify;\"><strong>Selenium Webdriver \u00a0<\/strong>(anteriormente RC) es una biblioteca (library) y servidor escrito en lenguaje Java que permite ejecutar scripts en forma local o remota a trav\u00e9s de comandos. \u00a0Este permite correr pruebas de selenium en <strong>los dem\u00e1s navegadores, no solo Firefox<\/strong>. Adem\u00e1s te permite ejecutar en todos los sistemas operativos populares y algunos no tan populares.<\/p>\n<p style=\"text-align: justify;\"><strong>Selenium Grids<\/strong> permite coordinar m\u00faltiples sevidores \u00a0Selenium para \u00a0poder ejecutar scripts en m\u00faltiples plataformas y equipos al mismo tiempo.<\/p>\n<p style=\"text-align: justify;\">La idea de hacer testing a desarrollos web no es nueva, \u00a0pero la verdad es que, no muchos usuarios las hacen. Casi todas las personas que conozco que hacen testing se limitan al c\u00f3digo en el server y no a la presentaci\u00f3n final en el browser. Es importante entender que nuestra aplicaci\u00f3n principalmente es lo que los usuarios ven en el navegador y es ah\u00ed donde debemos hacer nuestras pruebas. Una herramienta como Selenium hace esto \u00a0de forma m\u00e1s eficiente y sencilla.<\/p>\n<p><a href=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2012\/11\/selenium-how-it-works1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2723\" title=\"selenium-how-it-works\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2012\/11\/selenium-how-it-works1.png\" alt=\"\" width=\"360\" height=\"487\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2012\/11\/selenium-how-it-works1.png 360w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2012\/11\/selenium-how-it-works1-221x300.png 221w\" sizes=\"auto, (max-width: 360px) 100vw, 360px\" \/><\/a><\/p>\n<p><strong>Veamos el uso de Selenium IDE<\/strong><\/p>\n<p>La instalaci\u00f3n de Selenium IDE al tratarse de un complemento de Firefox es muy sencilla. Podemos descargar e instalar el complemento desde cualquiera de los siguientes enlaces:<\/p>\n<p><a href=\"https:\/\/addons.mozilla.org\/es-ES\/firefox\/addon\/2079\/\">https:\/\/addons.mozilla.org\/es-ES\/firefox\/addon\/2079\/<\/a><\/p>\n<p><a href=\"http:\/\/seleniumhq.org\/download\/\">http:\/\/seleniumhq.org\/download\/<\/a><\/p>\n<p style=\"text-align: justify;\">Una vez instalado el complemento y tras reiniciar Firefox podremos tener acceso a Selenium IDE tanto desde el men\u00fa de herramientas, el cual nos abrir\u00e1 la aplicaci\u00f3n en una nueva ventana, como desde Ver -&gt; Panel lateral -&gt; Selenium IDE que nos lo mostrar\u00e1 como un Panel (ver la imagen) dentro de la ventana principal de Firefox.<\/p>\n<p><strong>Descripci\u00f3n del Panel<\/strong><\/p>\n<p>El Panel consta de los siguientes objetos:<\/p>\n<p>Un men\u00fa desplegable con las siguientes opciones:<\/p>\n<p style=\"text-align: justify;\">Men\u00fa &#8216;<em>Archivo<\/em>&#8216;: Permite crear un nuevo &#8216;Test Case&#8217;, abrir uno existente, guardarlo, exportarlo en varios formatos y lo mismo con los &#8216;Test Suite&#8217;<\/p>\n<p style=\"text-align: justify;\">Men\u00fa &#8216;<em>Editar<\/em>&#8216;: contiene las opciones de copiar, pegar, seleccionar, etc&#8230;<\/p>\n<p style=\"text-align: justify;\">Men\u00fa &#8216;<em>Options<\/em>&#8216;: en este men\u00fa se encuentran las opciones de configuraci\u00f3n de Selenium y las opciones de selecci\u00f3n de formato del visor y del portapapeles. En las opciones de Selenium se puede definir el encoding de los ficheros de test, el tiempo de timeout por defecto, etc&#8230;<\/p>\n<p style=\"text-align: justify;\">Debajo del men\u00fa existe un campo de texto que contiene la url base sobre la que se van a grabar las pruebas.<\/p>\n<p style=\"text-align: justify;\">A continuaci\u00f3n hay una lista de iconos con los que se puede ejecutar todo el test grabado, ejecutar s\u00f3lo la l\u00ednea seleccionada, pausar la ejecuci\u00f3n, iniciar la grabaci\u00f3n,&#8230;<\/p>\n<p style=\"text-align: justify;\">Tambi\u00e9n se dispone de un selector de velocidad para ajustar la velocidad a la que se ejecutan los test.<\/p>\n<p><a href=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2012\/11\/Selenium-IDE1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2711\" title=\"Selenium-IDE1\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2012\/11\/Selenium-IDE1.jpg\" alt=\"\" width=\"380\" height=\"564\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2012\/11\/Selenium-IDE1.jpg 380w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2012\/11\/Selenium-IDE1-202x300.jpg 202w\" sizes=\"auto, (max-width: 380px) 100vw, 380px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>La Pesta\u00f1a source, muestra el c\u00f3digo fuente generado, en el formato que se haya seleccionado.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Pasemos a la grabaci\u00f3n de las pruebas.<\/strong><\/p>\n<p>La grabaci\u00f3n de una prueba puede ser configurada para que se haga de forma autom\u00e1tica o manual:<\/p>\n<p><strong>Grabaci\u00f3n autom\u00e1tica:<\/strong><\/p>\n<p>Para grabar una prueba simplemente habr\u00e1 que habilitar el panel de\u00a0<strong>Selenium IDE<\/strong>\u00a0en el navegador\u00a0<strong>Mozilla Firefox<\/strong>, verificar que el bot\u00f3n grabar est\u00e1 activo (debe quedar de color rojo claro) y empezar a realizar la navegaci\u00f3n. Nuestra navegaci\u00f3n quedar\u00e1 registrada, gener\u00e1ndose los comandos que correspondan en cada caso, que se podr\u00e1n ver en el panel de Selenium IDE.<\/p>\n<p>En el bot\u00f3n secundario del rat\u00f3n hay una opci\u00f3n con la cual para cualquier elemento de la p\u00e1gina en la que se navega se muestran las funciones de Selenium disponibles. Esta opci\u00f3n es muy \u00fatil para cuando se quiere verificar que existe un texto en la pantalla o si un elemento est\u00e1 presente.<\/p>\n<p><a href=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2012\/11\/Selenium-IDE3.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2712\" title=\"Selenium-IDE3\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2012\/11\/Selenium-IDE3.jpg\" alt=\"\" width=\"716\" height=\"510\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2012\/11\/Selenium-IDE3.jpg 716w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2012\/11\/Selenium-IDE3-300x213.jpg 300w\" sizes=\"auto, (max-width: 716px) 100vw, 716px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><strong>\u00a0Grabaci\u00f3n manual:<\/strong><\/p>\n<p style=\"text-align: justify;\">Para programar las instrucciones que automatizan la prueba, se deshabilita el bot\u00f3n de grabar, en la pesta\u00f1a \u201cTable\u201d se selecciona una l\u00ednea vac\u00eda y en los desplegables que aparecen en la parte inferior se indica la instrucci\u00f3n.<\/p>\n<p style=\"text-align: justify;\">El primer desplegable contiene la lista completa de funciones que ofrece Selenium IDE (no incluye el detalle de cada una de ellas ya que, al seleccionarla, en la parte de informaci\u00f3n podemos ver la operativa de la funci\u00f3n seleccionada).<\/p>\n<p style=\"text-align: justify;\">El segundo combo muestra una lista con todos los indicadores posibles para el elemento sobre el que se quiere realizar la acci\u00f3n (ver Localizaci\u00f3n de elementos), siempre que se hayan grabado autom\u00e1ticamente, en caso de edici\u00f3n manual aparece vac\u00edo.<\/p>\n<p style=\"text-align: justify;\">En el \u00faltimo campo se introduce el valor que pueda necesitar la funci\u00f3n de Selenium para su ejecuci\u00f3n, por ejemplo, el texto a introducir en un campo de texto.<\/p>\n<p style=\"text-align: justify;\">En el apartado de referencias podemos encontrar un enlace a la p\u00e1gina oficial de Selenium (Manual de Referencia) donde se nos muestran todos los comandos posibles y su descripci\u00f3n.<\/p>\n<p style=\"text-align: justify;\">De la misma forma tambi\u00e9n se pueden editar pruebas que ya hayan sido grabadas con anterioridad, editando los campos que aparecen en la parte inferior de la pesta\u00f1a \u201cTable\u201d o directamente en el c\u00f3digo generado en la pesta\u00f1a \u201cSource\u201d.<\/p>\n<p><a href=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2012\/11\/Selenium-IDE4-grabacion-manual.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2713\" title=\"Selenium-IDE4-grabacion-manual\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2012\/11\/Selenium-IDE4-grabacion-manual.jpg\" alt=\"\" width=\"361\" height=\"425\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2012\/11\/Selenium-IDE4-grabacion-manual.jpg 361w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2012\/11\/Selenium-IDE4-grabacion-manual-254x300.jpg 254w\" sizes=\"auto, (max-width: 361px) 100vw, 361px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Identificaci\u00f3n de los elementos de la interfaz<\/strong><\/p>\n<p style=\"text-align: justify;\">Hay comandos de Selenium que necesitan como par\u00e1metro un localizador del elemento sobre el que realizar la acci\u00f3n. Es muy importante que dicho localizador se resuelva de forma \u00fanica, para que la prueba sea correcta, y la acci\u00f3n no se realice sobre un elemento indeseado. Por otra parte, tambi\u00e9n debe tenerse en cuenta que el identificador elegido sea reutilizable en el futuro: por ejemplo debe evitarse la elecci\u00f3n de un identificador que cambie con cada nueva versi\u00f3n de la aplicaci\u00f3n.<\/p>\n<p>Por ello, es muy importante elegir de manera adecuada los identificadores que vamos a usar en cada caso:<\/p>\n<p><strong><em>id<\/em><\/strong>: Es la mejor opci\u00f3n siempre y cuando la p\u00e1gina HTML tenga definidos correctamente los identificadores de sus elementos, es decir, que sean \u00fanicos e invariantes en el tiempo. En estos casos, el mantenimiento de las pruebas generadas usando este m\u00e9todo es pr\u00e1cticamente nulo, y el hecho de a\u00f1adir o quitar elementos a la p\u00e1gina no afecta al &#8216;id&#8217; del resto de elementos existentes.<\/p>\n<p><em><strong>name:<\/strong><\/em> Por definici\u00f3n, el atributo &#8216;name&#8217; de un elemento HTML no tiene que ser \u00fanico, con lo que el uso de este m\u00e9todo de localizaci\u00f3n no garantiza que la prueba se ejecute de la manera deseada. Adem\u00e1s, en funciones que s\u00f3lo referencian a un elemento (getText, click, type, etc&#8230;) la acci\u00f3n se realizar\u00eda siempre sobre el primer elemento encontrado, por ejemplo, esta opci\u00f3n no ser\u00eda v\u00e1lida para hacer click sobre un conjunto de &#8216;radiobuttons&#8217; con el mismo nombre.<\/p>\n<p><em><strong>identificador:<\/strong> <\/em>\u00c9sta es la opci\u00f3n por defecto que Selenium-IDE al grabar las pruebas y consiste en usar el &#8216;id&#8217; si existe y si no usar el &#8216;name&#8217;.<\/p>\n<p><em><strong>dom:<\/strong><\/em> Esta opci\u00f3n utiliza el DOM de la p\u00e1gina para hacer referencia a los elementos. El problema que presenta es que cualquier introducci\u00f3n de un nuevo elemento, o reorganizaci\u00f3n de los existentes, provoca que las referencias cambien, lo que puede invalidar las pruebas grabadas anteriormente.<\/p>\n<p><em><strong>xpath:<\/strong><\/em> Este m\u00e9todo de identificaci\u00f3n es similar al anterior, pero en este caso hace uso de la estructura XML que posee todo documento HTML, para as\u00ed hacer referencia a los elementos mediante una ruta, ya sea absoluta (partiendo desde el elemento \/) o relativa (partiendo de un elemento conocido). Posee el mismo problema que el localizador por &#8216;dom&#8217; ya que tanto el DOM como el XPATH dependen de la estructura del documento. Adem\u00e1s Xpath devolver\u00e1 un elemento \u00fanico siempre que sea una ruta absoluta, en el caso de rutas relativas no se cumple ya que una misma ruta puede ser v\u00e1lida para varios elementos.<\/p>\n<p style=\"text-align: justify;\"><em><strong>link:<\/strong><\/em> Este m\u00e9todo es el m\u00e1s utilizado al querer localizar un enlace. Su uso requiere conocer el texto que va a mostrar dicho enlace en la p\u00e1gina HTML, por lo tanto no es \u00fatil en caso de existir enlaces con el mismo texto (devolver\u00eda el primero de ellos), enlaces sin texto, o enlaces con texto din\u00e1mico.<\/p>\n<p><em><strong>css:<\/strong><\/em> Este localizador consiste en identificar los elementos por sus propiedades de CSS. Este m\u00e9todo tampoco garantiza la unicidad del elemento referenciado.<\/p>\n<h4>Limitaciones<\/h4>\n<p>Algunas de las limitaciones encontradas para la grabaci\u00f3n de las pruebas usando Selenium son las siguientes:<\/p>\n<p><em>Uso de la tecnolog\u00eda AJAX<\/em><\/p>\n<p style=\"text-align: justify;\">El uso de esta tecnolog\u00eda en los desarrollos permite modificar el HTML cargado de una p\u00e1gina sin realizar una recarga de la misma, por lo que las funciones de Selenuim que esperan a que la p\u00e1gina haya cargado para continuar con la ejecuci\u00f3n de los tests, no sirven.<\/p>\n<p style=\"text-align: justify;\">En estos casos la estrategia que se recomienda seguir es identificar un elemento que sea modificado mediante la llamada AJAX y realizar una espera hasta que el elemento sea modificado. Lo m\u00e1s habitual es esperar a que un elemento cambie de visibilidad (visible-&gt;oculto y viceversa), o que aparezca un nuevo elemento HTML (un nuevo input, un nuevo texto, etc..). De esta manera se podr\u00e1 identificar cu\u00e1ndo una llamada AJAX ha terminado y es posible continuar con la ejecuci\u00f3n de los tests.<\/p>\n<p><em>Ventanas emergentes<\/em><\/p>\n<p style=\"text-align: justify;\">Para la ejecuci\u00f3n de las pruebas, Selenium &#8216;inyecta&#8217; c\u00f3digo javascript en la p\u00e1gina HTML y as\u00ed consigue la ejecuci\u00f3n autom\u00e1tica del c\u00f3digo grabado. Esto hace que no sea posible acceder a ning\u00fan elemento que se quede fuera del \u00e1mbito del c\u00f3digo HTML, como es el caso en el que se necesite interactuar con ventanas emergentes. Existen varias situaciones, y en algunas de ellas el problema es solventable:<\/p>\n<p style=\"text-align: justify;\">&#8211;\u00a0<strong>Ventanas emergentes de javascript<\/strong>\u00a0(alert, confirm y promt): Selenium ofrece funciones para interactuar con ellas. Es necesario conocer el nombre de la ventana emergente para poder hacer uso de las funciones que Selenium dispone a tal efecto.<\/p>\n<p>&#8211; \u00a0<strong>Ventanas emergentes generadas por el sistema operativo<\/strong>\u00a0(cargar \/ guardar un fichero \/ selecci\u00f3n de certificado digital): En este caso Selenium no es capaz de interactuar con ellas y es necesario recurrir a herramientas externas.<\/p>\n<p>&#8211; \u00a0<strong>Ventanas emergentes del propio navegador<\/strong>\u00a0(enlaces nuevas ventanas): Al igual que en el caso de ventanas emergentes de javascript, Selenium ofrece funciones para interactuar con ellas. Es necesario conocer el nombre de la ventana emergente para poder hacer uso de las funciones que Selenium dispone a tal efecto.<\/p>\n<p>En cualquier caso, las ventanas emergentes obligan a realizar una actuaci\u00f3n manual.<\/p>\n<p><strong>Diferencias entre navegadores<\/strong><\/p>\n<p style=\"text-align: justify;\">Existen diferencias en la interpretaci\u00f3n javacript de cada navegador (incluso puede que entre diferentes versiones del mismo navegador) o los permisos que se pueda tener para realizar diferentes tareas, lo cual implica que las pruebas generadas deben seguir estrategias diferentes seg\u00fan el navegador al que vaya dirigido, aumentando la complejidad del dise\u00f1o.<\/p>\n<p>Las diferencias entre navegadores (incluso entre diferentes versiones del mismo navegador) mas comunes son:<\/p>\n<ul>\n<li><strong>Acceso mediante HTTPS:<\/strong>Cuando se accede a una p\u00e1gina mediante HTTPS, \u00e9sta proporciona un certificado de seguridad que se debe aceptar para continuar la navegaci\u00f3n.<\/li>\n<li>En\u00a0<strong>Internet Explorer 7<\/strong>, esta ventana de informaci\u00f3n se puede grabar con Selenium, con lo que se puede sortear f\u00e1cilmente.<\/li>\n<li>En cambio en\u00a0<strong>Firefox<\/strong>, la aceptaci\u00f3n del certificado de seguridad pasa por una ventana emergente a la que Selenium no tiene acceso, por lo que hay que recurrir al uso de perfiles en la definici\u00f3n del navegador a usar en las pruebas:<\/li>\n<li>Arrancar el manager de perfiles de Firefox (firefox.exe -P )<\/li>\n<li>Crear un nuevo perfil y acceder a Firefox con dicho perfil<\/li>\n<li>Aceptar el certificado de seguridad permanentemente y configurar Selenium para que use el perfil para Firefox (java -jar Selenium-server.jar -firefoxProfileTemplate [ruta al perfil]).<\/li>\n<\/ul>\n<p><strong>La interpretaci\u00f3n de funciones: <\/strong>Se da el caso de que una misma funcion de Selenium tiene comportamientos diferentes dependiendo del navegador.<\/p>\n<ul>\n<li>verifyTrue (verifyFalse, verifyEquals, verifyNotEquals): estas funciones comprueban si una condici\u00f3n dada es verdadera o falsa, lanzando al final de la ejecuci\u00f3n de la prueba, una excepci\u00f3n en caso de error. En\u00a0<strong>Internet Explorer<\/strong>\u00a0el funcionamiento de este tipo de funciones no es el adecuado, devolviendo valores &#8216;true&#8217; cuando no deber\u00eda hacerlo.<\/li>\n<li>isElementPresent(isTextPresent): Esta funci\u00f3n verifica si un elemento est\u00e1 presente en la p\u00e1gina HTML o no. En\u00a0<strong>Firefox<\/strong>, si el elemento est\u00e1 oculto (visibilidad con valor &#8216;hidden&#8217;) devuelve &#8216;false&#8217;, mientras que en\u00a0<strong>Internet Explorer<\/strong>\u00a0devuelve &#8216;true&#8217;.<\/li>\n<\/ul>\n<h3>Reutilizaci\u00f3n de las pruebas grabadas con Selenium<\/h3>\n<h4>Impacto de los cambios en la aplicaci\u00f3n sobre las pruebas automatizadas<\/h4>\n<p style=\"text-align: justify;\">Dependiendo del cambio introducido en la aplicaci\u00f3n, las pruebas funcionales automatizadas con anterioridad podr\u00e1n ser reutilizadas en mayor o en menor medida. Los cambios se pueden agrupar en:<\/p>\n<ul>\n<li style=\"text-align: justify;\"><strong>Nuevas interfaces:<\/strong>\u00a0Es el caso en el que se presentan nuevas funcionalidades en la aplicaci\u00f3n en forma de nuevas ventanas, sin interferir en las ya existentes mas all\u00e1 de agregar los accesos a las nuevas pantallas. El impacto de estas nuevas funcionalidades sobre las pruebas ya grabadas es muy bajo o incluso nulo, ya que el hecho de que hayan aparecido estas nuevas pantallas no afecta en nada a las ya existentes.<\/li>\n<li style=\"text-align: justify;\"><strong>Modificaciones en funcionalidad de interfaces existentes:<\/strong>\u00a0Es el caso en el que se modifica la funcionalidad de pantallas ya existentes. El impacto de estos cambios va en funci\u00f3n del nivel de cambios introducido. As\u00ed cuanto m\u00e1s haya cambiado, mayores ser\u00e1n las modificaciones necesarias en las pruebas automatizadas que incluso puede que requiera una grabaci\u00f3n desde cero.<\/li>\n<li style=\"text-align: justify;\"><strong>Cambio en las interfaces existentes sin modificar la funcionalidad:<\/strong>\u00a0Es el caso en el que se modifica el aspecto y\/o contenido de las pantallas pero sin afectar a la funcionalidad existente: puede ir desde un simple cambio en las hojas de estilo (css) a una reorganizaci\u00f3n completa de los datos mostrados (cambio en la estructura HTML). En este caso el impacto va a depender mucho del tipo de localizador de elementos que se haya usado. Siempre que se usen localizadores independientes de la estructura del HTML, los cambios no deben afectar. Sin embargo, para aquellos elementos para los que se haya usado un localizador dependiente de la estructura del HTML, habr\u00eda que revisar si los cambios han afectado a los localizadores.<\/li>\n<\/ul>\n<p><strong>Evaluaci\u00f3n de la automatizaci\u00f3n de las pruebas de una aplicaci\u00f3n<\/strong><\/p>\n<p>Antes de decidir la automatizaci\u00f3n de las pruebas de una aplicaci\u00f3n con Selenium es necesario analizar el tiempo medio que se va a invertir en la grabaciones de las pruebas, ya que en ocasiones puede resultar mucho mayor que el proceso de ejecutarlas manualmente<\/p>\n<p><span style=\"color: #800000;\"><strong>Preguntas frecuentes &#8211; \u00a0FAQ\u00a0<\/strong><\/span><\/p>\n<p><strong>&#8211; \u00bfD\u00f3nde puedo encontrar el plugin de Selenium IDE?<\/strong><\/p>\n<p>En la\u00a0<a href=\"http:\/\/seleniumhq.org\/\" target=\"_blank\">p\u00e1gina oficial de Selenium<\/a>, en la secci\u00f3n de descargas hay enlace al plugin Selenium IDE para Firefox.<\/p>\n<p><strong>&#8211; En la grabaci\u00f3n de una prueba, al realizar algunos pasos, no se actualiza la lista de comandos grabados. \u00bfNo se est\u00e1n grabando?<\/strong><\/p>\n<p style=\"text-align: justify;\">En ocasiones tarda en refrescarse la lista de comandos, as\u00ed que se puede continuar la grabaci\u00f3n y si a las 5 o 6 ordenes no aparecen, comprobar si el bot\u00f3n de grabaci\u00f3n est\u00e1 activo.<\/p>\n<p style=\"text-align: justify;\"><strong>&#8211; \u00bfC\u00f3mo puedo saber la ruta XPath de un elemento?<\/strong><\/p>\n<p style=\"text-align: justify;\">Se puede mirar el c\u00f3digo fuente de la p\u00e1gina e ir construyendo la ruta XPath a mano. Pero para ahorrar tiempo y evitar errores conviene instalar el <a href=\"https:\/\/addons.mozilla.org\/es\/firefox\/addon\/firebug\/\" target=\"_blank\">plugin Firebug para Firefox<\/a>. Una vez instalado podremos activarlo con el bot\u00f3n que se ha a\u00f1adido a la parte inferior del navegador. Una vez activo veremos una ventana como \u00e9sta:<br \/>\nFirebug para Firefox<\/p>\n<p style=\"text-align: justify;\">En la pesta\u00f1a HTML podemos ver un \u00e1rbol con la estructura de la p\u00e1gina. En \u00e9l se puede buscar el elemento del cual queremos conocer el XPath, aunque es m\u00e1s f\u00e1cil hacer uso del bot\u00f3n de selecci\u00f3n de elementos y hacer click sobre el elemento deseado, lo que har\u00e1 que se abra el \u00e1rbol HTML justo en el objeto seleccionado:<br \/>\n<em>Bot\u00f3n de selecci\u00f3n de elementos<\/em><\/p>\n<p>Una vez encontrado el objeto en el HTML, al hacer click con el bot\u00f3n secundario sobre \u00e9l, aparece la opci\u00f3n \u201cCopiar XPath\u201d, con lo que tendremos en el portapapeles la ruta XPath del elemento.<\/p>\n<p><strong>&#8211; He grabado una prueba \u00bfc\u00f3mo la ejecuto?<\/strong><\/p>\n<p>Para ejecutarla desde Selenium IDE, lo primero es parar la grabaci\u00f3n, para ello se desactiva el bot\u00f3n parar<\/p>\n<p>A continuaci\u00f3n, para ejecutar hay que pulsar el bot\u00f3n<br \/>\n<em>Bot\u00f3n play<\/em><\/p>\n<p><strong>&#8211; He grabado una prueba y aunque los localizadores de los elementos son correctos (Selenium los encuentra), las funciones no se ejecutan sobre el elemento deseado.<\/strong><\/p>\n<p>Hay que comprobar que el localizador usado sea \u00fanico, porque lo m\u00e1s probable en este caso sea que no lo sea y la ejecuci\u00f3n se est\u00e9 realizando sobre otro elemento.<\/p>\n<p><strong>&#8211; He grabado una prueba y al ejecutarla me dice que no encuentra un elemento que si est\u00e1 en la p\u00e1gina.<\/strong><\/p>\n<p>En este caso puede estar ocurriendo dos cosas:<\/p>\n<ul>\n<li>Que el elemento se haya creado con AJAX, por lo que hay que introducir el c\u00f3digo necesario para que la ejecuci\u00f3n se espere hasta que el elemento se cargue con AJAX (por ejemplo esperando a que el elemento exista y est\u00e9 visible).<\/li>\n<li>Que el identificador sea din\u00e1mico y ya no sea v\u00e1lido, en cuyo caso hay que buscar otro tipo de localizador que sea invariante en el tiempo.<\/li>\n<\/ul>\n<p><strong>&#8211; Al ejecutar una prueba que tiene grabada la interacci\u00f3n con un popup javascript, no aparecen dichos popups. \u00bfEst\u00e1 mal grabada la prueba?<\/strong><\/p>\n<p>No, la prueba esta correctamente grabada, Selenium a la hora de ejecutar una prueba no muestra los popups de javascript, pero si que interactua con ellos a trav\u00e9s de las funciones que dispone a tal efecto.<\/p>\n<p><strong>\u00bfComo s\u00e9 si una prueba se ha ejecutado correctamente?<\/strong><\/p>\n<p style=\"text-align: justify;\">Al realizar una ejecuci\u00f3n, en la lista de comandos podremos ver en color verde las instrucciones que se lanzan correctamente y en rojo las que han fallado. Adem\u00e1s en la ventana de informaci\u00f3n aparece las razones por las que se ha producido el fallo.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #800000;\"><strong>V\u00eddeo explicativo del uso de Selenium en castellano.<\/strong><\/span><\/p>\n<p><a href=\"http:\/\/www.youtube.com\/watch?v=AptRJxAVsI4&amp;feature=relmfu\" target=\"_blank\">http:\/\/www.youtube.com\/watch?v=AptRJxAVsI4&amp;feature=relmfu<\/a><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #800000;\"><strong>Existen otros entornos parecidos a Selenium:<\/strong><\/span><\/p>\n<p><strong>Windmill<\/strong>\u00a0&#8211;\u00a0<a href=\"http:\/\/www.getwindmill.com\/features\/windmill-demo-videos\" target=\"_blank\">http:\/\/www.getwindmill.com\/features\/windmill-demo-videos<\/a><\/p>\n<p><strong>FIT<\/strong> &#8211;\u00a0<a href=\"http:\/\/fitnesse.org\/\" target=\"_blank\">http:\/\/fitnesse.org\/<\/a><\/p>\n<p><strong>Webdriver<\/strong> &#8211; <a href=\" http:\/\/code.google.com\/p\/webdriver\/\" target=\"_blank\">\u00a0http:\/\/code.google.com\/p\/webdriver\/<\/a><\/p>\n<p><strong>Watin<\/strong>\u00a0&#8211;\u00a0<a href=\"http:\/\/watin.org\/\" target=\"_blank\">http:\/\/watin.org\/<\/a><\/p>\n<p><strong>Canoo Webtest<\/strong>\u00a0&#8211;\u00a0<a href=\"http:\/\/webtest.canoo.com\/webtest\/manual\/WebTestHome.html\" target=\"_blank\">http:\/\/webtest.canoo.com\/webtest\/manual\/WebTestHome.html<\/a><\/p>\n<p><strong>TestComplete from SmartBear &#8211;\u00a0<\/strong><a href=\"http:\/\/smartbear.com\/products\/qa-tools\/automated-testing-tools\" target=\"_blank\">http:\/\/smartbear.com\/products\/qa-tools\/automated-testing-tools<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>En fin, de momento es la mejor herramienta que conozco para realizar pruebas funcionales directamente desde la propia UI.<\/p>\n<p><span style=\"color: #800000;\"><strong>P\u00e1gina oficial de selenium:<\/strong><\/span><\/p>\n<p><a href=\"http:\/\/seleniumhq.org\/projects\/ide\/\" target=\"_blank\">http:\/\/seleniumhq.org\/projects\/ide\/<\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Selenium es una plataforma para hacer \u201ctesting\u201d en el browser o navegador. B\u00e1sicamente puedes automatizar el uso de tu aplicaci\u00f3n web y repetir el proceso cuantas veces sea necesario para verificar que est\u00e1 haciendo lo que se supone. Por otro lado es un set de herramientas que nos permiten desarrollar scripts para pruebas de aplicaciones Web en diversos lenguajes como Java, Ruby, Python, Perl, .Net o PHP. Es un producto Open Source que est\u00e1 permanentemente siendo optimizado. Nos permite grabar, editar y depurar casos de prueba, que podr\u00e1n ser ejecutados de forma autom\u00e1tica e iterativa posteriormente. \u00a0El potencial de esta herramienta puede ser utilizado para la grabaci\u00f3n de las pruebas funcionales durante la Generaci\u00f3n de pruebas de regresi\u00f3n. Con este servicio se consigue obtener una bater\u00eda de pruebas automatizadas que podr\u00e1n ser utilizadas cuando sea necesario repetir las pruebas. Existen 3 tipos de Herramientas: Selenium IDE, Selenium Webdriver, y Selenium Grids. En este post os mostrar\u00e9 como usarlo. Adem\u00e1s al final veremos herramientas relacionadas y un video en castellano sobre su uso. Comencemos &#8230;<\/p>\n","protected":false},"author":1,"featured_media":2727,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[70,41,7,297,24],"tags":[301,42,299,300,298,665],"class_list":["post-2704","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-diseno-2","category-ingenieria-del-software","category-software","category-testing","category-web","tag-experto","tag-ingenieria","tag-ingeniero","tag-selenium","tag-testing-2","tag-web"],"_links":{"self":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/2704","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/comments?post=2704"}],"version-history":[{"count":21,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/2704\/revisions"}],"predecessor-version":[{"id":2732,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/2704\/revisions\/2732"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media\/2727"}],"wp:attachment":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media?parent=2704"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/categories?post=2704"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/tags?post=2704"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}