Diferencia entre revisiones de «Selenium»

De Dos Ideas.
Saltar a: navegación, buscar
(Sobre caracteres especiales)
(Sobre la integración contínua)
Línea 138: Línea 138:
 
== Sobre la integración contínua ==
 
== Sobre la integración contínua ==
  
Cuando se usa Selenium en un proceso de integración contínua puede pasar que nos encontremos con tests que fallan porque no se encuentran los elementos esperados. Lo bueno es saber qué se encontró en lugar de lo que se esperaba. El método selenium.getBody() retorna un String con el texto de la página en la que se encuentra selenium en ese momento, pero lo mejor de todo es que además lo escribe en consola.
+
Cuando se usa Selenium en un proceso de integración contínua puede pasar que nos encontremos con tests que fallan porque no se encuentran los elementos esperados. Lo bueno es saber qué se encontró en lugar de lo que se esperaba.
 +
 
 +
El método selenium.getBody() retorna un String con el texto de la página en la que se encuentra selenium en ese momento, pero lo mejor de todo es que además lo escribe en consola.
 +
 
 +
Si miramos la salida por consola del test fallido vamos a encontrar la secuencia de los comandos de selenium y en los lugares donde hayamos puesto los getBody() vamos a ver intercalado los textos que mostraba la página en ese momento.
  
 
==Ver también==
 
==Ver también==

Revisión del 19:03 23 mar 2010

Selenium es una herramienta de Software Libre para pruebas de aplicaciones Web. Las pruebas de Selenium se ejecutan directamente en un navegador y facilitan las pruebas de compatibilidad en navegadores, también como pruebas funcionales de aceptación de aplicaciones Web.

La herramienta Selenium posee un ambiente de desarrollo llamado Selenium IDE, este facilita el registro de pruebas de aceptación y su depuración.

Integracion con JUnit 4.x

Para poder armar el test es necesario incluir los siguientes jars.

  • selenium-java-client-driver-tests.jar
  • selenium-java-client-driver.jar
  • selenium-server-tests.jar
  • selenium-server.jar

Se pueden descargar de acá: Librerías


import org.junit.Before; import org.junit.Test; import org.openqa.selenium.server.SeleniumServer;

import com.thoughtworks.selenium.DefaultSelenium; import com.thoughtworks.selenium.SeleneseTestCase;

public class GoogleWebTest extends SeleneseTestCase {

   private DefaultSelenium selenium;
   private SeleniumServer seleniumServer;
   @Override
   @Before
   public void setUp(String browser) throws Exception {
       // Se instancia el server de selenium por default toma el puerto 4444
       seleniumServer = new SeleniumServer();
       seleniumServer.start();
       // Se configura el acceso a la pagina por medio del server de selenium
       // DefaultSelenium("SELENIUM_HOST", PUERTO, "BROWSER", URL_DE_LA_APLICACION);
       // En este ejemplo, se utiliza Internet Explorer: "*iehta"
       selenium = new DefaultSelenium("localhost", 4444, "*iehta", "http://www.google.com");
       selenium.start();
   }
   /** Al finalizar los tests, detener el server de Selenium 
     */
   @Override
   public void tearDown() throws Exception {
       // Se para la conexión con la pagina 
       selenium.stop();
       // Se para la instancia del server de selenium
       seleniumServer.stop();
   }


   /** Testeamos una búsqueda en Google
     * Accedemos a Google, realizamos una búsqueda y comprobamos que venga el resultado esperado
     */
   @Test
   public void testGoogle() throws Exception {
       selenium.open("http://www.google.com/webhp");
       assertEquals("Google", selenium.getTitle());
       selenium.type("q", "Selenium OpenQA");
       assertEquals("Selenium OpenQA", selenium.getValue("q"));
       selenium.click("btnG");
       selenium.waitForPageToLoad("30000");
       assertEquals("Selenium OpenQA - Google Search", selenium.getTitle());
   }

}

Sobre waitForPageToLoad

Es importante que la página esté cargada antes de hacer las verificaciones sobre el nuevo contenido. Para hacer más sólido el caso de prueba ubica un waitForPageToLoad luego de un click.

Es recomendable que al terminar un caso de prueba ubiques un waitForPageToLoad y así te aseguras que el próximo caso de prueba no falle al comenzar.

Sobre assertTextNotPresent

Este comando es útil después de cada comando clickAndWait para confirmar un texto no debe estar presente en la página.

Sobre assertTextPresent

Este comando es útil después de cada comando clickAndWait para confirmar un texto debe estar presente en la página.


Sobre verifyTrue

Al realizar test secuencial con Selenium IDE, y verificar texto en la página, después de convertir el test a código Java -para correrlo con JUnit- queda generado con el comando

verifyTrue(selenium.isTextPresent("Algun texto"));

Este comando no genera fallas en el test en caso que el texto buscado no se encuentre en la página. El comando adecuado para que se genere la falla es

assertTrue(selenium.isTextPresent("Algun texto"));

Sobre Popups

En Selenium, se trabaja con una ventana a la vez. Para trabajar con diferentes ventanas (por ejemplo, un popup) se necesita primero elegir la ventana en cuestión. Y no solo basta con esto, tambien dicha ventana tiene que ser identificada. La forma mas facil de realizar esto es capturar el id de la nueva ventana con Selenium IDE.

Si la ventana se abre con un target="_blank" no se podrá utilizar Selenium para acceder a dicha ventana dado a que el id que se genera es random. Hay un Jira abierto en Selenium para resolver esto.

Sobre caracteres especiales

Para que hudson tome bien los acentos (y caracteres especiales) en los test de selenium hay que usar unicode.

Los codigos son:

  • á -> \u00e1
  • é -> \u00e9
  • í -> \u00ed
  • ó -> \u00f3
  • ú -> \u00fa
  • Á -> \u00c1
  • É -> \u00c9
  • Í -> \u00cd
  • Ó -> \u00d3
  • Ú -> \u00da
  • ñ -> \u00f1
  • Ñ -> \u00d1
  • ü -> \u00FC
  • Ü -> \u00DC
  • ç -> \u00E7
  • Ç -> \u00C7
  • ¿ -> \u00BF
  • ¡ -> \u00A1

Sobre la integración contínua

Cuando se usa Selenium en un proceso de integración contínua puede pasar que nos encontremos con tests que fallan porque no se encuentran los elementos esperados. Lo bueno es saber qué se encontró en lugar de lo que se esperaba.

El método selenium.getBody() retorna un String con el texto de la página en la que se encuentra selenium en ese momento, pero lo mejor de todo es que además lo escribe en consola.

Si miramos la salida por consola del test fallido vamos a encontrar la secuencia de los comandos de selenium y en los lugares donde hayamos puesto los getBody() vamos a ver intercalado los textos que mostraba la página en ese momento.

Ver también