Resumen:
- Usando Selenium crearemos un test en Java para probar nuestra aplicación web.
- Para facilitar la creación del test usaremos Selenium IDE, un add-on para firefox.
- Para refinar el test que creemos, nos ayudaremos de XPath Checker, otro add-on para firefox.
Introducción :
Selenium es un framework que nos permite realizar test sobre aplicaciones web.
Básicamente consta de :
- Selenium Remote Control
Consta de dos partes :
- Servidor (Remote Control Server ), encargado de lanzar y controlar los navegadores sobre los que se realizan los tests.
- Librerías clientes para los diferentes lenguajes de programación
- Selenium IDE
XPath Checker es un add-on para Firefox que nos permite ver la ruta XPath de un determinado elemento de la página
Creando y ejecutando tests
Aparecerá la ventana del Selenium IDE
Volvemos a la ventana del navegador y navegamos por nuestra aplicación. En este ejemplo he usado la demo de Loom. Las acciones que vayamos realizando se irán registrando en la ventana de Selenium IDE.
Una vez finalizada la navegación exportamos lo capturado por Selenium IDE como un test JUnit de java a través de la opción de menú "Export Test Case As..."
El código generado :
package com.example.tests; import com.thoughtworks.selenium.*; import java.util.regex.Pattern; public class Untitled extends SeleneseTestCase { public void setUp() throws Exception { setUp("http://change-this-to-the-site-you-are-testing/", "*firefox"); } public void testUntitled() throws Exception { selenium.open("/loomdemo/mortgages/"); selenium.click("link=Customers"); selenium.waitForPageToLoad("30000"); selenium.click("//div[@id='main']/div[1]/a"); selenium.waitForPageToLoad("30000"); selenium.type("customer.firstName", "Ernesto"); selenium.type("customer.lastName", "Hernández"); selenium.type("customer.idCard", "11111"); selenium.type("prices[EUROPE]", "1000"); selenium.type("prices[ASIA]", "1000"); selenium.type("prices[AMERICA]", "1000"); selenium.click("customer.creditType0"); selenium.type("customer.password", "miPassword"); selenium.type("confirmPassword", "miPassword"); selenium.click("//input[@value='save']"); selenium.waitForPageToLoad("30000"); } }
Modificamos el código para especificar en setUp() nuestro servidor (localhost:8080).
public class LoomDemoTest extends SeleneseTestCase ... setUp("http://localhost:8080/", "*firefox");
Listo, ya tenemos nuestra clase de test que podremos ejecutar cuando tengamos arrancado el Servidor de Selenium. En nuestro proyecto el arrancar el servidor Selenium lo podremos hacer por ejemplo usando un plugin de maven, aunque también lo podemos arrancar a mano.
$ java -jar target/dependency/selenium-server-1.0.1-standalone.jar
Una vez ejecutemos el test, se abrirán dos ventanas del navegador, una en donde irá apareciendo información sobre la ejecución del test
Y otra con el resultado del test ( nuestra aplicación )
Refinando los tests
En algunas ocasiones puede ser que necesitemos refinar nuestro test.
Supongamos que mientras grabábamos el test hicimos click en el primer item del listado:
el código generado por Selenium IDE puede ser algo como:
selenium.open("/loomdemo/customers/list"); selenium.click("link=1 - in conguealiquet (ID: 5158319217)"); selenium.waitForPageToLoad("30000");
En donde vemos que se indica que haga click en el link con el texto "1 - in conguealiquet ... "
Un problema que puede ocurrir es que ese texto varíe ( datos de ejemplo ).
En lugar de esto tal vez nos interesa especificar que haga click "en el primer elemento del listado". Para ello sustituiremos la expresión que le pasamos por parámetro al método click por otra ruta XPath.
Para calcular la ruta XPath del primer item del listado, sobre el enlace en concreto, haremos click con el botón derecho del ratón y seleccionamos "View XPath". Se nos abrirá la ventana del XPath con la ruta XPath del elemento seleccionado:
Usando el campo XPath podemos realizar búsquedas en la página, de esta forma podemos ver que además de la ruta que nos da por defecto "id('main')/div[2]/ul[2]/li[1]/a" vemos que también nos sirve la ruta "//ul[2]/li[1]/a" .
Podemos usar esta herramienta para comprobar rutas XPath. Por ejemplo :
//div[@id="menu"]
Retomando nuestro test, podemos ahora sustituir
selenium.click("link=1 - in conguealiquet (ID: 5158319217)");
por
selenium.click("//ul[2]/li[1]/a");
Con lo que nuestro test ahora siempre seleccionará el primer item de la lista independientemente del texto que contega.
tengo problemas al ejecutar una prueba, en un campo de texto la información que se ingresa a través de la prueba automatizada desaparece, pero solo en ese campo, en los demas no hay problemas
ResponderEliminarimport com.thoughtworks.selenium.*;
ResponderEliminarimport org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.regex.Pattern;
@Deprecated
public class Representantes extends SeleneseTestCase {
@Before
public void setUp() throws Exception {
selenium = new DefaultSelenium("localhost", 4444, "*iexplore", "mi aplicacion");
selenium.start();
}
@Test
public void testRepresentantes() throws Exception {
selenium.open("/");
selenium.type("id=txtUsuario_I", "oper");
selenium.type("id=txtPassword_I", "sqa2011");
selenium.click("id=btnAcceder");
selenium.click("name=btnAcceder");
selenium.waitForPageToLoad("3000000");
// selenium.open("/Paginas/Captacion/Cotizacion/Cotizacion.aspx");
selenium.click("link=Representantes");
selenium.waitForPageToLoad("30000");
selenium.click("css=#ctl00_HeaderContent_ASPxRoundPanel3_btnAgregar_CD > table > tbody > tr > td");
selenium.click("name=ctl00$HeaderContent$ASPxRoundPanel3$btnAgregar");
selenium.type("id=ctl00_HeaderContent_ASPxRoundPanel3_txtrut_I", "13201205");
selenium.type("id=ctl00_HeaderContent_ASPxRoundPanel3_txtdigv_I", "9");
selenium.type("id=ctl00_HeaderContent_ASPxRoundPanel3_txtname_I", "Fernando Chamorro");
selenium.click("id=ctl00_HeaderContent_ASPxRoundPanel3_ddlcomuna_B-1");
selenium.type("id=ctl00_HeaderContent_ASPxRoundPanel3_txtdireccion_I", "Las Urbinas 73");
selenium.type("id=ctl00_HeaderContent_ASPxRoundPanel3_txtnacionalidad_I", "chilena");
selenium.click("id=ctl00_HeaderContent_ASPxRoundPanel3_dtescritura_B-1Img");
selenium.type("id=ctl00_HeaderContent_ASPxRoundPanel3_txtprofesion_I", "Abogado");
selenium.click("id=ctl00_HeaderContent_ASPxRoundPanel3_dtescritura_DDD_C_PYCImg");
selenium.click("id=ctl00_HeaderContent_ASPxRoundPanel3_dtescritura_DDD_C_PYCImg");
selenium.click("id=ctl00_HeaderContent_ASPxRoundPanel3_dtescritura_DDD_C_PYCImg");
selenium.click("id=ctl00_HeaderContent_ASPxRoundPanel3_dtescritura_DDD_C_PYCImg");
selenium.click("id=ctl00_HeaderContent_ASPxRoundPanel3_dtescritura_DDD_C_PYCImg");
selenium.click("id=ctl00_HeaderContent_ASPxRoundPanel3_dtescritura_DDD_C_PYCImg");
selenium.click("css=#ctl00_HeaderContent_ASPxRoundPanel3_btnEditar_BTC > span");
selenium.click("name=ctl00$HeaderContent$ASPxRoundPanel3$btnEditar");
}
@After
public void tearDown() throws Exception {
selenium.stop();
}
}
selenium.type("id=ctl00_HeaderContent_ASPxRoundPanel3_txtrut_I", "13201205");
ResponderEliminareste es el campo que se borra la informacion, estoy trabajando con windows 7, una aplicacion que esta hecha para internet explorer 8, esta hecha en .net con c#