some image

Tag Selenium

Tomar captura de pantalla con Selenium WebDriver

Etiquetas: , Blog, Testing No comments

Una de las partes más importantes en la automatización de pruebas es la parte de los reportes y la manera de presentar las evidencias, las cuales son un respaldo para saber que efectivamente nuestro sistema se encuentra estable.

El frameworkde Selenium WebDriver nos ofrece una clase para poder tomar capturas de pantalla : TakesScreenshot.

A continuación coloco un ejemplo para utilizar dicha clase utilizando la funcionalidad de org.apache.commons.io.FileUtils :)

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

/***
 * Realiza capturas de pantalla en la automatizacion de pruebas con Selenium
 * WebDriver y deja las imagenes en un directorio especificado. Para un mejor
 * desempeño se recomienda la utilizacion de la libreria apache.commons.io.FileUtils 
 * la cual permite trabajar mucho mejor con archivos, ejemplo copiando archivos
 * binarios como las imagenes
 * 
 * ver : http://seleniumhq.org/docs/04_webdriver_advanced.html
 * ver : http://commons.apache.org/io/download_io.cgi
 * @author codesandtags
 * 
 */
public class TakeScreenShotSelenium {

	public static void main(String[] args) {

		//Se utiliza un driver de Firefox 
		WebDriver driver = new FirefoxDriver();

		//Pagina principal
		driver.navigate().to("http://codesandtags.org");
		takeScreenShotTest(driver, "Home");
		//Pagina de Testing
		driver.findElement(By.linkText("Testing")).click();
		takeScreenShotTest(driver, "Testing");

		//Se finaliza el uso del driver
		driver.close();

	}

	/**
	 * Toma una impresion de pantalla y la guarda en un directorio donde quedan
	 * todas las evidencias de prueba
	 * 
	 * @param driver
	 * @throws IOException
	 */
	public static void takeScreenShotTest(WebDriver driver, String imageName) {
		//Directorio donde quedaran las imagenes guardadas
		File directory = new File("d:\\imagenes");

		try {
			if (directory.isDirectory()) {
				//Toma la captura de imagen 
				File imagen = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
				//Mueve el archivo a la carga especificada con el respectivo nombre
				FileUtils.copyFile(imagen, new File(directory.getAbsolutePath()	+ "\\" + imageName + ".png"));
			} else {
				//Se lanza la excepcion cuando no encuentre el directorio
				throw new IOException("ERROR : La ruta especificada no es un directorio!");
			}
		} catch (IOException e) {
			//Impresion de Excepciones 
			e.printStackTrace();
		}
	}

}

Ejemplos de las imagenes tomadas

Referencias : http://seleniumhq.org/docs/04_webdriver_advanced.html

Generando valores random en Selenium IDE

Etiquetas: , Blog, Testing No comments

Normalmente cuando realizamos pruebas automatizadas es muy util manejar valores aleatorios (Random), ya seán numeros, palabras, letras, caracteres especiales, etc. Para realizar esto en Selenium IDE podemos utilizar la función random que nos ofrece JavaScript. Este POST se estructura en 2 partes.

1) Mostrar como generar diferentes tipos de valores aleatorios (Random) en JavaScript
2) Mostrar como implementar diferentes tipos de valores aleatorios (Random) en Selenium IDE con Javascript.

1) Generando valores aleatorios (Random) en Javascript.

Este codigo muestra un ejemplo de la forma de generar valores aleatorios en JavaScript, una vez visto este ejemplo pasaremos a la generación de datos aleatorios en Selenium IDE.

 
  
  
 

2) Generando valores random en Selenium IDE.

Para obtener estos valores debemos hacer uso de store (Variables) y el soporte de Javascript para Selenium IDE.

a) Se podria utilizar JavaScript directamente pero es mucho mas facil almacenar el valor en una variable.
b) Aunque el codigo parece demasiado, mas adelante se podra utilizar una funcion y adicionarla como extensiones de usuario en Selenium IDE :).
c) La forma de acceder a las variables definidas en Selenium IDE desde JavaScript, es utilizando la instrucción storedVars[‘nombreVariableSelenium’]. Ejemplo :

A continuación coloco los comandos y el codigo JavaScript utilizado para generar los valores random en Selenium IDE.

store Habia una vez una iguana iguana
echo Y entonces….. javascript{ storedVars[‘iguana’].toString(); }

randomSelenium
store 30 longitud
store javascript{valor = “”;  for(i=0; i<storedVars[‘longitud’]; i++){  code = Math.floor(Math.random() * 10 + 48);   valor += String.fromCharCode(code); } valor.toString();} random_number
echo El numero es : ${random_number}
store javascript{valor = “”; for(i=0; i<storedVars[‘longitud’]; i++){   code = Math.floor(Math.random() * 26 + 97);   valor += String.fromCharCode(code); } valor.toString();} random_letters_lower
echo Las letras son  : ${random_letters_lower}
store javascript{valor = “”; for(i=0; i<storedVars[‘longitud’]; i++){   code = Math.floor(Math.random() * 26 + 97);   valor += String.fromCharCode(code); } valor.toUpperCase().toString();} random_letters_upper
echo Las letras son  : ${random_letters_upper}
store javascript{var valor=””; for(i=0; i<storedVars[‘longitud’]; i++){ grupo = Math.floor(Math.random() * 4 + 1); switch(grupo){ case 1: code = Math.floor(Math.random() * 16 + 32); break; case 2: code = Math.floor(Math.random() * 7 + 58); break; case 3: code = Math.floor(Math.random() * 6 + 92); break; case 4: code = Math.floor(Math.random() * 4 + 123); break; } valor += String.fromCharCode(code); } valor.toString();} random_specialchars
echo Los caracteres son  : ${random_specialchars}

Imagen de Ejemplo de Selenium IDE

Utilizando el metodo wait() para Selenium WebDriver

Etiquetas: , Blog, Testing No comments

 

Hoy tuve la gran duda de ¿Cómo hacer para esperar X tiempo de segundos el cargue de una pagina o simplemente esperar X segundos para continuar  con la ejecución mi prueba en Selenium WebDriver?. Bien, al principio intente utilizar Threads pero tenia el gran inconveniente de que  el Thread se ejecutaba pero la prueba corria alternamente… :-(

Comence a buscar en la documentación de Selenium WebDriver y llegue a una solución :

1)  Codigo de Ejemplo para esperar X segundos en Selenium WebDriver :

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class PruebaTiempoSelenium {
	
	//Driver que hace magia
	WebDriver driver;
	
	/**
	 * @param Constructor y prueba de ejemplo 
	 */
	public PruebaTiempoSelenium() {
		//Instancia a un Driver de Firefox
		driver = new FirefoxDriver();
		//Se navega a la pagina principal de codes and tags
		driver.navigate().to("http://codesandtags.org");
		//Se esperan 10 segundos
		esperarSegundos(driver, 10);
		//Se pulsa clic sobre el enlace de Testing
		driver.findElement(By.linkText("Testing")).click();
		//Se evalua el Titulo
		if(driver.getTitle().equals("Testing | Codes and Tags")){
			System.out.println("Excelente parce prueba superada!!!");
		}
		//Se cierra el driver
		driver.close();
	}
	
	/**
	 * Metodo que se encarga de esperar X cantidad de segundos durante
	 * la ejecucion de la prueba utilizando el driver
	 * @param driver
	 * @param segundos
	 */
	public void esperarSegundos(WebDriver driver, int segundos){
		
		synchronized(driver){
			try {
				driver.wait(segundos * 1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	
	public static void main(String[] args) {
		//Ejecucion de la prueba
		PruebaTiempoSelenium prueba = new PruebaTiempoSelenium();		
	}

}

Nota : Esta prueba fue configurada de la manera más sencilla, para aumentar la complejidad se pueden utilizar Frameworks de pruebas como por ejemplo TestNG o Junit.

2) Para utilizar directamente el WebDriverWait manejando condiciones se puede consultar la documentación : http://seleniumhq.org/docs/04_webdriver_advanced.html

 

Selenium IDE Seleccionar elementos de un ComboBox / Select

Etiquetas: , Blog, Testing No comments

Uno de los problemas que se originan durante la automatización de las pruebas el cambio constante de los datos. Si no podemos identificar patrones que nos permitan obtener, acceder o seleccionar los elementos que se presentan en la página la automatización seria una labor tediosa porque siempre tendriamos que actualizar los scripts :(.

Tomando puntualmente un caso donde tenemos un Select, cuyos elementos son variables la mejor forma de acceder a uno de ellos utilizando nuestro mágico Selenium IDE, es a través de su Index / Indice.

A continuación coloco un ejemplo de un ComboBox / Select y su respectivo Script en Selenium para acceder a sus elementos sin tener que utilizar el Label / Nombre del Elemento.

Ejemplo del codigo HTMl utilizado para la prueba

 

Script Selenium

 

Command Target Value
select name=ejemplo index=1
select name=ejemplo id=42
select name=ejemplo index=0
select name=ejemplo id=coco

Solucionando problema con InternetExplorerDriver para SeleniumWebDriver

Etiquetas: , Blog, Testing No comments

Ultimamente me he estado dedicando a la automatización de pruebas con el Framework de Selenium WebDriver y TestNG. Dentro de algunos problemas que tuve probando con los diferentes Drivers de navegadores, aqui trataré puntualmente como solucione el problema al arrancar el driver de Internet Explorer.

Definición del problema : 

Codigo Inicial :

//Instancia del Driver InternetExplorerDriver
WebDriver driver;
driver = new InternetExplorerDriver();

Cuando se intentaba instanciar un objeto de la clase InternetExplorerDriver, se generaba una excepción en tiempo de ejecución con la siguiente traza de error :

FAILED CONFIGURATION: @BeforeTest before
org.openqa.selenium.WebDriverException: Unexpected error launching Internet Explorer. Protected Mode must be set to the same value (enabled or disabled) for all zones. (WARNING: The server did not provide any stacktrace information); duration or timeout: 113 milliseconds
Build info: version: '2.9.0', revision: '14289', time: '2011-10-20 23:22:17'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_21'
Driver info: driver.version: InternetExplorerDriver

Planteamiento : 

Investigando en foros de Selenium WebDriver, se obtiene la siguiente conclusion :

http://code.google.com/p/selenium/issues/detail?id=1795

Cuando se lanza el driver del navegador Internet Explorer, es lanzado no se puede obtener la información del navegador ya que este debe estar en modo protegido.

Solución :

Para solucionar este problema se debe habilitar manualmente el modo seguro para las Zonas en el navegador de Internet Explorer.

 

Una vez se reinicia el navegador se puede ejecutar la prueba sin problemas, visualizando el siguiente texto en Iexplore una vez se inicia :

 

Hakuna Matata!!! :-)