Selenium Remote Control

1
40624

Selenium Remote Control.

0. Índice de contenidos.

1. Introducción

Selenium Remote Control (RC) es una herramienta del paquete SeleniumHQ creada con el fin de
ampliar y complementar las funcionalidades de las herramientas ya explicadas en anteriores tutoriales:

  1. Selenium IDE (Tutorial)
  2. Selenium Core (Tutorial)

Nota: Resulta interesante visualizar los tutoriales anteriores antes de meterse de lleno con esta herramienta.

Selenium Remote Control es una herramienta que permite automatizar las pruebas sobre aplicaciones web, para ello:

  • Permite escribir los test en cualquier lenguaje que permita realizar peticiones vía HTTP (Por ejemplo : Java,C#,Perl,…).
  • Estos test se aplicarán sobre un sitio web HTTP.
  • Para ello utilizará un navegador que permita usar Javascript (Lo tiene que tener habilitado).

Ayuda: Para la generación de un test en el lenguaje elegido se aconseja utilizar la exportación disponible en Selenium IDE.De esta
forma se proporciona la mayor parte del código necesaria para la ejecución de la prueba.

Lo dicho, podremos generar nuestros scripts en nuestro lenguaje favorito, pudiendo utilizar todo nuestro conocimiento para
dotar de mucha mayor potencia y flexibilidad a los scripts.La única pega, es que tendremos que utilizar un navegador que permita el
uso de Javascript,cualquier navegador que lo tenga habilitado para ello nos vale, pero aquellos que no estan considerados en los
requerimientos pueden presentar algun tipo de limitación debido a sus opciones de seguridad.

OJO: Mucho cuidado con las opciones de seguridad de los navegadores, a veces juegan malas pasadas. 😉

La función principal de esta herramienta es la de ejecutar los test en diferentes navegadores y en diferentes plantaformas.
Esto es lo realmente interesante, porque al final lo ideal sería que pudieramos probar nuestra aplicación en todos los entornos posibles,
pero bastará con que lo probemos en aquellos entornos que utilizará el cliente (algo totalmente lógico).

Por ejemplo: En algunos sitios se impone como único entorno («típico») de uso el formado por Windows e Internet Explorer.Por suerte
esto es cada vez menor y cada vez es más fácil ver gente que utiliza otros navegadores u otros sistemas operativos.Esto
lo que genera es mayor diversidad de usuarios que hay que tener en cuenta a la hora de implementar una aplicación.

Ejemplos de entornos que se pueden utilizar:

Sistema Operativo Navegador
Windows Internet Explorer
Windows Firefox
Linux Firefox
OS X Safari
OS X Firefox

Recodad que esta herramienta se plantea como solución para poder resolver los problemas de seguridad que aparecen en el
navegador (bloqueos de test , etc.) cuando queremos ejecutar test en servidores en los que no se encuentra instalado Selenium
Core. (Para ver más información sobre este tema ver el tutorial de Selenium Core (Tutorial))

Para poder controlar el navegador, Selenium Remote Control proporciona un servidor («servidor Selenium») desde el cual se permite arrancar, controlar y
detener «casi» cualquier navegador.Digo lo de «casi» por lo que he dicho antes, tiene que tener Javascript habilitado y una configuración de seguridad apropiada.

Comentar que en el fondo el servidor Selenium utiliza la herramienta Selenium Core para ejecutar los test.

2. Entorno.

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil Asus G50Vseries (Core Duo P8600 2.4GHz, 4GB RAM, 320 GB HD).
  • Sistema operativo: Windows Vista Ultimate.
  • Internet Explorer 7.0.6001.1800
  • Mozilla Firefox 3.0.6
  • Opera 9.63
  • Safari 3.2.1

3. Requerimientos.

En este punto se indicará la compatibilidad de este plugin con diferentes configuraciones (navegador / sistema operativo / lenguaje de programación),
describiendo las acciones permitidas o bien los problemas encontrados al ejecutarlo con esa configuración.

Navegador:

Navegador Funcionamiento
Firefox 3 Iniciar navegador y reproducir test
Firefox 2 Iniciar navegador y reproducir test
IE 8b1 ?
IE 7 Iniciar navegador y reproducir test
Safari 3 Iniciar navegador y reproducir test
Safari 2 Iniciar navegador y reproducir test
Opera 9 Iniciar navegador y reproducir test
Opera 8 Iniciar navegador y reproducir test
Otros Posible soporte parcial (*)

(*) Selenium Remote Control puede arrancar y ejecutar cualquier navegador, pero depende de las configuración del navegador el poderse utilizarlo con alguna limitación
en su funcionalidad.

Sistema operativo:

Sistema operativo Funcionamiento
Windows Iniciar navegador y reproducir test
OS X Iniciar navegador y reproducir test
Linux Iniciar navegador y reproducir test
Solaris Iniciar navegador y reproducir test
Otros Iniciar navegador y reproducir test (*)

(*) El servidor Selenium Remote Control esta escrito en Java, por lo tanto debería de poderse ejecutarse en cualquier sistema que soporte Java y que
tuviera un navegador disponible.

Lenguaje de Programación:

Lenguaje Funcionamiento
C# Soporte librería («driver»)
Java Soporte librería («driver»)
Perl Soporte librería («driver»)
PHP Soporte librería («driver»)
Python Soporte librería («driver»)
Ruby Soporte librería («driver»)
Otros Comandos vía peticion HTTP (*)

(*) Cualquier lenguaje que permite peticiones HTTP debería de funcionar sin problemas.

4. Funcionamiento.

Gráfico de funcionamiento

Funcionamiento

Descripción del funcionamiento:

El cliente tendrá el test adaptado al lenguaje de programación con el que se realizará la prueba.
Para ello,hará uso de las librerías propocionadas para manejar los objetos necesarios durante la prueba
(Ver apartado de configuración).

Estos objetos permiten manejar la aplicación.

Lo primero que hará el cliente es conectarse al servidor Selenium, el cual deberá de estar arrancado
como un proceso independiente y activo durante toda la prueba.En caso de que por alguna necesidad se necesite
interrumpir dicho servidor se realizará cualquier actividad de parada o arranque desde la línea de comandos
(esta parte será explicada en el apartado de configuración).

Después el servidor Selenium ejecutará el navegador seleccionado para el test, para ello abrirá dos ventanas

  • Ventana de Selenium Core: Visualiza los comandos que se estan ejecutando.
  • Ventana de página web: Visualiza las «respuestas visuales» realizadas por los comandos anteriores.

Dichas ventanas serán visibles desde el cliente que las ejecuto.

Es muy importante decir que la ejecución del navegador se realiza mediante el uso de un servidor proxy, el cual
se establece entre el navegador y el sitio web. De esta forma,Selenium permite habilitar un navegador para
poder ejecutarse en sitios arbitrarios.

Nota: El servidor Selenium no necesita correr en la misma maquina virtual (JVM) o en la misma máquina física.

Una vez el servidor Selenium recibe la primera instrucción del cliente (vía HTTP proxy),realiza la acción
recibida en la primera instrucción.Posteriormente el servidor web se «sincronizará» con la página, visualizando
los cambios realizados (se podran ver los resultados de las acciones realizadas en la venta de página web).

Se aconseja usar los clientes integrados con algun tipo de framework de prueba , por ejemplo para Java JUnit o Testng.

5. Instalación.

Estos son los pasos que hay que realizar para instalar Selenium Remote Control:

Paso 1: Descargar Selenium Remote control desde su página web http://seleniumhq.org/download/.

Instalación 1

Paso 2: Pulsar sobre download.

Instalación 2

Paso 3: Una vez se haya descargado, descomprimir el archivo en un directorio. Es aconsejable que el nombre del directorio
sea Selenium Remote Control X.X (siendo el valor X.X la versión), de esta manera tendremos controlada la versión en todo momento.

Instalación 3

Como se puede observar en la imagen, al descomprimir la carpeta se han generado los directorios correspondientes a las librerías de los
lenguajes con los que se puede utilizar Selenium RC. Por otro lado, en esta misma ubicación se encuentra la carpeta correspondiente al
servidor Selenium.

6. Configuración.

En este apartado se explicará en detalle las operaciones principales que sepodrán utilizar con el servidor Selenium.

Primero de todo indicar que existen dos formas de arrancar el servidor Selenium :

  • Modo normal : No permite modificar las condiciones de ejecución de forma directa. (Los cambios se introducen al arrancarlo)
  • Modo interactivo : Permite modicar las condicones de ejecución de forma directa.

Ejecutar el servidor Selenium en modo normal

Para poder arrancar el servidor Selenium con la configuración utilizada por defecto hay que abrir la consola y situarse en la
carpeta donde se ha descomprimido el servidor Selenium.

Configuracion 1

Escribir la siguiente instrucción : java -jar selenium-server.jar

Configuracion 2

Para poder parar esta ejecución hay que escribir en la URL de cualquier navegador la siguiente dirección: http://localhost:4444/selenium-server/driver/?cmd=shutDown

Con el siguiente mensaje de «OK» se indicará que se ha cerrado el servidor correctamente.

Configuracion 3

Como se ha podido ver en las indicaciones anteriores, hemos aprendido a arrancar el servidor Selenium con las opciones de configuración básicas.Decir, que
estas opciones se pueden configurar desde la línea de comandos al arrancarlo para hacerlo de forma «avanzada» para ello se introducirán modificaciones como
los siguientes:

Uso :java -jar selenium-server.jar [-interactive] [options]

Ejemplos de opciones:

  • -port <num> : El puerto que Selenium debería de utilizar (Por defecto 4444)
  • -timeout <num> : El n� de segundos de debería de tener de timeout.

Para visualizar el resto de opciones de arranque visitar la siguiente página http://seleniumhq.org/documentation/remote-control/options.html

Ejecutar el servidor Selenium en modo interactivo

Para poder arrancar el servidor Selenium en modo interactivo hay que abrir la consola y situarse en la
carpeta donde se descomprimio el servidor Selenium.

Configuracion 1

Escribir la siguiente instrucción : java -jar selenium-server.jar -interactive

Configuracion 4

También para poder parar esta ejecución hay que escribir en la URL del navegador la siguiente dirección: http://localhost:4444/selenium-server/driver/?cmd=shutDown

O bien ejecutar un comando que realiza la misma operación,como se puede ver en la imagen al ejecutarse en modo interactivo (y permitir la introducción de comandos por
consola) se puede conseguir el mismo efecto si se escribe la instrucción : quit

Configuracion 5

Debido a que su ejecución es en modo interactivo podemos modificar las condiciones de ejecución para ello permite introducir comandos como:

-> cmd=open&1=http://www.google.com

-> cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com

De esta manera podremos realizar cambio en caliente de las configuraciones sobre las que realizaremos las pruebas.

Navegadores

Es importante tener claro bajo que tipo de navegador se va a utilizar la prueba,debido a que habrá que especificarlo en el comando
que permitirá controlar al navegador.Para ellos hay que distinguir dos tipos de familias de navegadores :

Normales

Representan a los navegadores habituales que se suelen utilizar Selenium RC.

Navegador Constante que lo representa
Internet Explorer *iexplore
Firefox *firefox
Safari *safari
Custom *custom /path/to/browser

Experimentales

Son aquellos que permiten probar las aplicaciones en cualquier sitio.Hay que distinguir 2 tipos:

– Subir los privilegios de seguridad:

Los navegadores que aquí se muestran no requieren el uso de servidores proxy.

Navegador Constante que lo representa Descripción
Internet Explorer en modo HTA *iehta Ejecuta Internet Explorer en modo HTA (Incremeta sus privilegios y permite escribir en disco)
Firefox *chrome Ejecuta Firefox con la URL del Chrome

– Inyección de proxy:

Los navegadores que aquí se muestran usan servidores proxy «agresivos» para poder ejecutar las acciones sobre cualquier sitio, incluso permiten «modificar» la aplicación.

Navegador Constante que lo representa
Internet Explorer en modo HTA *piiexplore
Firefox *piifirefox

Nota : Para poder utilizar estos dos navegadores hay que arrancar el servidor Selenium de un modo especial : java -jar selenium-server.jar -proxyInjectionMode

El uso de este tipo de navegadores es menos frecuente, por regla general no es necesario su uso a no ser que las condiciones de seguridad sean muy complejas.

Objeto DefaultSelenium

En las librerías de los lenguajes de programación descargadas en la carpeta de instalación se dispondrán de los objetos desde los
cuales nos van a permitir manejar al navegador. En este apartado se ense�ará a utilizar el objeto disponible para JAVA.

Recordar que este objeto será usado desde el cliente y que evidentemente diferirá en su uso en función del lenguaje de programación utilizado.

Constructor : Selenium selenium = new DefaultSelenium(String seleniumServerHost,int seleniumServerPort,String browserType,String baseURL);

  • String seleniumServerHost : Es el lugar donde se va a ejecutar el servidor Selenium (Por defecto será localhost)
  • int seleniumServerPort : Es el puerto por el cual el servidor Selenium estará a la escucha (Por defecto 4444)
  • String browserType : Es el navegador utilizado en la prueba (Será la constante que representa al navegador)
  • String baseURL : Es la URL base sobre la que se va a probar.

OJO: El objeto creado queda vinculado a una URL concreta y sólo se puede utilizar con esa URL. Así que no puede cambiar de
URL base en mitad del script.

Por otro lado cuando se quiera arrancar el navegador se utilizará la siguiente instrucción:

selenium.open(�http://www.site.com/page.html�);

Y cuando se quiera finalizar el uso del navegador se utilizará la siguiente instrucción:

selenium.stop();

7. Integración con JUnit.

JUnit es un framework que permite realizar pruebas unitarias sobre aplicaciones Java.

Se basa principalmente en el concepto de caso de prueba (test case).

Un caso de prueba es la forma de probar una parte del sistema en función de sus datos de entrada, condiciones
de ejecución y del resultado esperado. Su representación en código fuente suele ser una clase que dispone de
métodos para probar a su vez los métodos de una clase o módulo concreto.

Por regla general cada clase que quisieramos probar debería de tener su clase de caso de prueba.

Para poder tener organizados los casos de prueba se suele utilizar el concepto de suite de prueba (test suite)

Una suite de pruebas es un conjunto de casos de prueba, los casos de prueba deberían de estar relacionados de
alguna forma.

Funcionamiento: Se evalua el resultado esperado respecto a unos datos de entrada concretos. En caso de verificarse que el resultado obtenido es igual que el
esperado, JUnit indicará que la prueba se ha realizado con éxito, en caso contrario, mostrará el error en el método especificado.

Instalación

Paso 1: Descargar JUnit 4.5 de www.junit.org

Paso 2: Descomprimir en una carpeta del sistema. Por ejemplo : C:\JUnit4.5\

Paso 3: Comprobar que el JDK utilizado esta en la variable de entorno PATH.

Paso 4: Incluir en la variable de entorno CLASSPATH las librerías: selenium-java-client-driver.jar / junit-4.4.jar;

Plantillas JUnit

Plantilla de Caso de prueba (Test Case)

Las condiciones para que se considere una clase de prueba test case son las siguientes:

  • La clase creada tendrá un nombre con el siguiente formato <NombreClase>Test.
  • La clase creada heredará de la clase junit.framework.TestCase.
  • Dispondrá de un método setUp(): Reserva los recursos necesarios para realizar la prueba.
  • Dispondrá de métodos test<NombreCasoPrueba>() : Realizará una prueba específica.
  • Dispondrá de un método tearDown(): Libera los recursos necesarios tras realizar la prueba.
import junit.framework.TestCase;
import com.thoughtworks.selenium.*;

public class Test extends TestCase {

    private Selenium browser;

    public void setUp() {
        browser = new DefaultSelenium(,,,);
        browser.start();
    }

    public void test() throws InterruptedException {

          
        //verifyTrue(browser.isTextPresent("Primeros pasos con Selenium IDE"));
    }

    public void tearDown() {
        browser.stop();
    }
}

OJO: Los comandos verify grabados por Selenium IDE no son reconocidos por JUnit,se aconseja cambiar estos
métodos por assert.

Plantilla de Suite de prueba (Test Suite)

Las condiciones para que se considere una clase test suite son las siguientes:

  • La clase tendrá el nombre que se quiera, pero se aconseja incluir el sufijo «TestSuite».
  • La clase heredará de la clase junit.framework.TestSuite.
  • Incorporar método suite() : Devuelve una instancia de la clase TestSuite.
  • Los casos de prueba se indicarán en el método suite().
  • El método suite se llamará desde el método main(String[] args).
import junit.framework.Test;
import junit.framework.TestSuite;
import junit.textui.TestRunner;


public class TestSuite extends TestSuite {
  
  public TestSuite(String name) {
    super(name);
  }

  public static void main(String[] args) {
    TestRunner.run(suite());
  }

  public static Test suite() {
    TestSuite suite = new ("Ejemplo Test Suite Java");
   
    //Establecemos los casos de prueba a ejecutar
    suite.addTestSuite(.class);
    suite.addTestSuite(.class);
    .
    .
    .
    suite.addTestSuite(.class);
   
    return suite;
  } 
}

8. Ejemplo.

Generar Script : Acceso a la página de «Adictos al trabajo» desde Google

Este ejemplo esta sacado de la generación de código en formato Java que se obtiene
de la herramienta Selenium IDE. Ver Tutorial Selenium IDE

Objetivo: Acceder a la página web de «Adictos al trabajo» desde la página del buscador «Google».

Nombre del fichero: AccederAdictosDesdeGoogleTest.java

Generar un fichero con el nombre anterior y el contenido siguiente:

import junit.framework.TestCase;
import com.thoughtworks.selenium.*;

public class AccederAdictosDesdeGoogleTest extends TestCase {

    private final String URL          = "http://www.google.com";
    private final String BROWSER_TYPE = "*firefox";
    
    private Selenium browser;

    public void setUp() {
        browser = new DefaultSelenium("localhost",4444,BROWSER_TYPE,URL);
        browser.start();
    }

    public void testAccederAdictosDesdeGoogle() throws InterruptedException {
    
        browser.open("http://www.google.es/");
		    assertEquals("Google", browser.getTitle());
		    browser.type("q", "Adictos al trabajo");
		    browser.click("btnG");
		    browser.waitForPageToLoad("50000");
		    assertEquals("Adictos al trabajo - Buscar con Google", browser.getTitle());
		    browser.click("link=Adictos al Trabajo. Formación y desarrollo | JAVA, JEE, UML, XML ...");
		    browser.waitForPageToLoad("50000");
		    assertEquals("Adictos al Trabajo. Formación y desarrollo | JAVA, JEE, UML, XML |. Tutoriales sobre nuevas tecnologías.", browser.getTitle());
    }

    public void tearDown() {
        browser.stop();
    }
}

Generar Script : Acceso al tutorial de «Primeros pasos con Selenium IDE» desde la pagina de «Adictos al trabajo»

Este ejemplo esta sacado de la generación de código en formato Java que se obtiene
de la herramienta Selenium IDE.

Objetivo: Acceder al tutorial «Primeros pasos con Selenium IDE» desde la página web de «Adictos al trabajo».

Nombre del fichero: AccederTutorialSeleniumDesdeAdictosTest.java

Generar un fichero con el nombre anterior y el contenido siguiente:

import junit.framework.Test;
import junit.framework.TestSuite;
import junit.textui.TestRunner;


public class EjemploTestSuite extends TestSuite {
  
  public EjemploTestSuite(String name) {
    super(name);
  }

  public static void main(String[] args) {
    TestRunner.run(suite());
  }

  public static Test suite() {
    TestSuite suite = new EjemploTestSuite("Ejemplo Test Suite Java");
   
    //Establecemos los casos de prueba a ejecutar
    suite.addTestSuite(AccederAdictosDesdeGoogleTest.class);
    suite.addTestSuite(AccederTutorialSeleniumDesdeAdictosTest.class);
   
    return suite;
  }
  
}

Generar Suite

Objetivo: Generar un Test Suite con los Casos de prueba anteriores.

Nombre del fichero: EjemploTestSuite.java

Generar un fichero con el nombre anterior y el contenido siguiente:

@echo off
echo 
echo  "--------------------------------"
echo  "Ejemplo Test Selenium-RC - build"
echo  "--------------------------------"

rmdir /S/Q build

mkdir build
mkdir build\test-classes

set CP="lib\junit-4.5.jar;lib\selenium-java-client-driver.jar"
set CP=%CP%;"build\test-classes"

javac -classpath %CP% -sourcepath src -d build\test-classes src\EjemploTestSuite.java  

pause

Generar Compilador

Para compilar las clases se ha realizado un ejecutable .bat con el código siguiente:

OJO: Fijaros que las librerias utilizadas se le pasan como parámetro, y estas se encuentran
en una subcarpeta «lib «en el lugar donde se encuentra el ejecutable.

Los códigos fuente de los casos de prueba y de la suite se encuentran en una carpeta «src» en el
mismo nivel que el ejecutable encargado de compilar.

Generar Ejecutable

@echo off
echo 
echo  "--------------------------------"
echo  "Ejemplo Test Selenium-RC - build"
echo  "--------------------------------"

rmdir /S/Q build

mkdir build
mkdir build\test-classes

set CP="lib\junit-4.5.jar;lib\selenium-java-client-driver.jar"
set CP=%CP%;"build\test-classes"

javac -classpath %CP% -sourcepath src -d build\test-classes src\EjemploTestSuite.java  

pause

Para ejecutar las prubas bastará con generar un fichero ejecutable .bat con el código
siguiente:

OJO: Fijaros que las librerías utilizadas se le pasan como parámetro, y estas se encuentran
en una subcarpeta «lib «en el lugar donde se encuentra el ejecutable.

@echo off

echo  "--------------------------------"
echo  "Ejemplo Test Selenium-RC - test"
echo  "--------------------------------"

set CP="lib\junit-4.5.jar;lib\selenium-java-client-driver.jar"
set CP=%CP%;"build\test-classes"

java -classpath %CP% EjemploTestSuite 

pause

Ejecución de ejemplo

Paso 1 : Arrancar el servidor Selenium.

Paso 2 : Compilar las clases a probar.

Paso 3 : Ejecutar las clases a probar.

Paso 4 : Parar el servidor Selenium.

A continuación se comenzarán a ejecutar las pruebas indicadas en el Test Suite para ello se cargarán las dos ventanas indicadas
donde se mostrarán los comandos y resultados de los comandos en cada ejecución de los comandos de los scripts.

Ejecucion 1

Al final se mostrará una ventana que resume la ejecución de las pruebas, en nuestro caso se muestra que las dos pruebas que tenía
asignadas se han ejecutados de forma exitosa.

Ejecucion 2

9. Conclusiones.

En este tutorial os he presentado la mejor forma de averiguar si se ha producido una regresión en nuestro SW, así que se acabo el
repetir siempre las mismas pruebas cada vez que se libera una versión.Imaginaos todo el tiempo que dedicamo a esta parte y lo cómodo
que nos va a resultar «despachar» este trabajo a la misma aplicación , es decir, que se pruebe ella….jejeje 😉

Espero haberos podido ayudar a entender un poquito más esta «chulísima» aplicación.Y sobre todo haberos aclarado la parte
de integración con JUnit y Maven. De su integración con Maven se hablará en un siguiente tutorial.

Un saludo.

Víctor

mailto:vjmadrid@autentia.com

1 COMENTARIO

  1. Hola,

    Pensaba que el RC era para conectarme a un servidor y ejecutar los test que estuvieran en ese servidor servidor, al parecer estoy equivocado??

    Saludos.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad